日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

MATLAB02:结构化编程和函数定义「建议收藏」

發(fā)布時(shí)間:2023/12/15 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 MATLAB02:结构化编程和函数定义「建议收藏」 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

大家好,又見(jiàn)面了,我是你們的朋友風(fēng)君子。

pdf版本筆記的下載地址: MATLAB02_結(jié)構(gòu)化編程和函數(shù)定義(訪問(wèn)密碼:3834)

學(xué)習(xí)一門(mén)技術(shù)最好的方式就是閱讀官方文檔,可以查看MATLAB官方文檔

結(jié)構(gòu)化編程

流程控制語(yǔ)句和邏輯運(yùn)算符

與大多數(shù)編程語(yǔ)言相同,MATLAB有以下流程控制語(yǔ)句:

流程控制語(yǔ)句 作用
if, elseif, else if語(yǔ)句為真,則執(zhí)行子句
switch, case, otherwise 根據(jù)switch語(yǔ)句內(nèi)容判斷執(zhí)行哪個(gè)子句
while 重復(fù)執(zhí)行子句直到while中的條件為假
for 執(zhí)行子句固定次數(shù)
try, catch 執(zhí)行子句并捕獲執(zhí)行過(guò)程中的異常
break 跳出循環(huán)
continue 直接進(jìn)入下一次循環(huán)
end 結(jié)束子句
pause 暫停程序
return 返回到調(diào)用函數(shù)處

上述所有循環(huán)和條件語(yǔ)句都要在末尾以end閉合.

MATLAB還有以下邏輯運(yùn)算符:

運(yùn)算符 意義
< 小于
<= 小于或等于
> 大于
>= 大于或等于
== 等于
~= 不等于
&&
||

&&||運(yùn)算符支持邏輯短路功能.

流程控制語(yǔ)句示例

下面演示各流程控制語(yǔ)句:

  1. if語(yǔ)句:

    if rem(a, 2) == 0
    	disp('a is even');
    else
    	disp('a is odd');
    end
    
  2. switch語(yǔ)句:

    switch input_num
    case -1
    	disp('negative 1');
    case 0
    	disp('zero');
    case 1
    	disp('positive 1');
    otherwise
    	disp('other value');
    end
    
  3. while語(yǔ)句:

    n = 1;
    while prod(1:n) < 1e100
    	n = n + 1;
    end
    
  4. for語(yǔ)句:

    for n=1:10
    	a(n)=2^n;
    end
    disp(a)
    
  5. break語(yǔ)句:

    x = 2; k = 0; error = inf;
    error_threshold = 1e-32;
    while error > error_threshold
        if k > 100
        	break
        end
        x = x - sin(x)/cos(x);
        error = abs(x - pi);
        k = k + 1;
    end
    

使用循環(huán)語(yǔ)句應(yīng)盡量預(yù)先分配內(nèi)存空間

若一個(gè)變量所需要的內(nèi)存空間是一個(gè)可預(yù)測(cè)的定值,我們應(yīng)盡量提前為其分配內(nèi)存空間.

以下面兩段程序?yàn)槔?演示這一點(diǎn):

  • 程序一:

    tic
    for ii = 1:2000
        for jj = 1:2000
            A(ii,jj) = ii + jj;
        end
    end
    toc
    

    程序輸出Elapsed time is 4.616199 seconds.

  • 程序二:

    tic
    A = zeros(2000, 2000);		% 預(yù)先為變量分配內(nèi)存空間
    for ii = 1:size(A,1)
        for jj = 1:size(A,2)
            A(ii,jj) = ii + jj;
        end
    end
    toc
    

    程序輸出Elapsed time is 2.786401 seconds.

可以看到,程序一比程序二所用的時(shí)間更長(zhǎng).這是因?yàn)? 對(duì)于程序一,沒(méi)有預(yù)先為變量A分配內(nèi)存,因此每當(dāng)A的形狀發(fā)生改變時(shí),都需要重新為A分配內(nèi)存地址,這花費(fèi)了更多的時(shí)間.

編寫(xiě)腳本時(shí)應(yīng)注意的問(wèn)題

在腳本開(kāi)頭應(yīng)添加語(yǔ)句清空工作區(qū)

在每個(gè)腳本的開(kāi)頭,應(yīng)添加下述語(yǔ)句,清空工作區(qū)緩存以及之前程序運(yùn)行的痕跡:

clear all	% 清空工作區(qū)內(nèi)存中的變量
close all 	% 關(guān)閉之前程序繪制的圖像
clc			% 清空之前程序在終端的輸出

在運(yùn)算和賦值語(yǔ)句后應(yīng)添加分號(hào);抑制輸出

在所有運(yùn)算和賦值語(yǔ)句都應(yīng)該添加分號(hào);抑制輸出,若需要向終端輸出一個(gè)變量,應(yīng)對(duì)其調(diào)用disp方法.

使用省略號(hào)...拼接多行語(yǔ)句

在MATLAB中,省略號(hào)...可以將多行語(yǔ)句拼接為一行,靈活使用該語(yǔ)句可以提高代碼可讀性.

annPoints_sampled = annPoints(annPoints(:,1)>x1 & ...
    annPoints(:,1) < x2 & ...
    annPoints(:,2) > y1 & ...
    annPoints(:,2) < y2);

函數(shù)

與其他語(yǔ)言相似,MATLAB也可以定義函數(shù).與腳本類(lèi)似,函數(shù)可以被存入函數(shù)名.m文件中,也可以以函數(shù)句柄的形式定義在內(nèi)存中.

查看內(nèi)置函數(shù)

我們可以使用which命令查看內(nèi)置函數(shù)源代碼文件的位置,與edit命令結(jié)合可以查看內(nèi)置函數(shù)的源代碼.

運(yùn)行下面語(yǔ)句可以打開(kāi)MATLAB內(nèi)置的mean函數(shù)的源文件:

edit(which('mean.m'))

可以在編輯器中看到mean函數(shù)的源代碼如下:

函數(shù)名.m文件形式定義函數(shù)

在MATLAB文件中定義函數(shù)的格式如下:

function [輸出變量名] = 函數(shù)名(輸入變量名) 
% 函數(shù)的文檔

函數(shù)代碼
  • function是一個(gè)關(guān)鍵字,聲明該文件中保存的是一個(gè)函數(shù).
  • 輸入變量輸出變量是非必須的,函數(shù)既可以沒(méi)有輸入變量,也可以沒(méi)有輸出變量.
  • 函數(shù)名應(yīng)與.m文件名相同,且不包含特殊字符(最好不要有中文).

MATLAB內(nèi)置的函數(shù)參數(shù)

在MATLAB中,內(nèi)置了一些函數(shù)參數(shù)如下:

函數(shù)參數(shù) 意義
imputname 輸入變量名列表
mfilename 函數(shù)源代碼文件名
nargin 輸入變量數(shù)
nargout 輸出變量個(gè)數(shù)
varargin 可變長(zhǎng)輸入?yún)?shù)列表
varargout 可變長(zhǎng)輸出參數(shù)列表

MATLAB不提供其他高級(jí)語(yǔ)言的指定默認(rèn)參數(shù)值以及函數(shù)重載等語(yǔ)法,但靈活使用上述內(nèi)置的函數(shù)參數(shù),可以在一定程度上實(shí)現(xiàn)指定默認(rèn)參數(shù)值以及方法重載:

function [volume]=pillar(Do,Di,height)
if nargin==2,
	height=1;
end
volume=abs(Do.^2-Di.^2).*height*pi/4;

MATLAB函數(shù)定義示例1

下面程序用來(lái)計(jì)算自由落體運(yùn)動(dòng)中位移量:
x = x 0 + v 0 t + 1 2 g t 2 x = x_0 + v_0 t + \frac{1}{2} g t^2 x=x0?+v0?t+21?gt2

function x = freebody(x0,v0,t)
% calculation of free falling
% x0: initial displacement in m
% v0: initial velocity in m/sec
% t: the elapsed time in sec
% x: the depth of falling in m
x = x0 + v0.*t + 1/2*9.8*t.*t;

該函數(shù)演示了一個(gè)MATLAB編程技巧: 計(jì)算乘法時(shí)應(yīng)盡量使用.*而非*,因?yàn)榍罢卟粌H對(duì)參數(shù)t為標(biāo)量的情況可用,也對(duì)變量t為向量或矩陣的情況可用.

freebody(0, 0, 2)			% 得到 19.6000
freebody(0, 0, [0 1 2 3])	% 得到 [0 4.9000 19.6000 44.1000]
freebody(0, 0, [0 1; 2 3])	% 得到 [0 4.9000; 19.6000 44.1000]

MATLAB函數(shù)定義示例2

下面函數(shù)實(shí)現(xiàn)了從華氏溫度到攝氏溫度的轉(zhuǎn)換,該函數(shù)可以識(shí)別輸入的待轉(zhuǎn)換樣例的個(gè)數(shù),當(dāng)輸入的待轉(zhuǎn)換樣例個(gè)數(shù)為0時(shí),退出函數(shù).

function F2C()
while 1
    F_degree = input('tempreature in Fahrenheit: ', 's');
    F_degree = str2num(F_degree);
    if isempty(F_degree)
        return
    end
    C_degree = (F_degree-32)*5/9;
    disp(['tempreature in Celsius: ' num2str(C_degree)])
end


(需要按Ctrl+C退出程序)

以函數(shù)句柄形式定義函數(shù)

我們也可以使用函數(shù)句柄的形式定義函數(shù),這更接近數(shù)學(xué)上的函數(shù)定義,其語(yǔ)法如下:

函數(shù)句柄 = @(輸入變量) 輸出變量 

可以直接通過(guò)函數(shù)句柄調(diào)用該方法.

f = @(x) exp(-2*x);
x = 0:0.1:2;
plot(x, f(x));

pdf版本筆記的下載地址: MATLAB02_結(jié)構(gòu)化編程和函數(shù)定義(訪問(wèn)密碼:3834)

總結(jié)

以上是生活随笔為你收集整理的MATLAB02:结构化编程和函数定义「建议收藏」的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。