問題
- 自定義一個函數,求給定復數的指數、對數、正弦和余弦,並在命令文件中調用該函數。
- 自定義一個函數,計算一行向量中各元素的均值和標准差。
- 求下列方程的根:
1.實驗過程:創建m文件,保存到桌面,重命名位fushu,此時我就創建了一個函數,然后再新建一個m文件作為我們命令文件,實現輸入復數並調用函數的功能,然后運行之后,在matlab命令行窗口即可執行
實驗結果:
2.實驗過程:
函數文件:
function output=way(x)
n=length(x);
sum=0;
for i=1:n
sum=sum+x(i);
i=i+1;
end
avg=sum/n;
b=0;
for i=1:n
b=b+(x(i)-avg)^2;
std1=sqrt(b/n);
end
fprintf('avg=%f\n',avg);
fprintf('std=%f\n',std1);
命令文件:
x=input('x=?');
way(x);
命令文件保存后運行,然后在命令行窗口輸入一個向量
實驗結果:
x=?0:5
avg=2.500000
std=1.707825
3.直接在命令行窗口執行即可
過程及結果
>> f=@(x)exp(x)+x^2+x^(sqrt(x))-100;
>> x0=fzero(f,3)
x0 =
4.1635
>> f(x0)
ans =
2.8422e-14
其中fzero(f,a)的意思是在a旁邊找一個最接近a的點x使f(x)最接近於零
1.函數文件+調用命令文件:需單獨定義一個自定義函數的M文件;
2.直接通過@符號定義.如:f=@(x,y)(x.^2-sin(y)),調用:f(2,3)
函數句柄變量f相當於函數的別名,利用它可以間接調用函數
- 函數所傳遞參數的數目具有可調性
例子:
function [mag, angle] = polar_value(x, y)
msg = nargchk(1,2,nargin);
//nargin 這個函數返回調用這個函數時所需要的實際輸入參數的個數
//實際輸入參數的個數必須≥1而且≤2,如果一個函數在被調用時含有過
//多或過少的參數,函數nargchk 將會產生一個包含標准錯誤的字符串
//如果參數的個數在允許的范圍之內,那么這個函數將返回一個空字符
error(msg);
//如果msg 是一個包含錯誤信息的字符串,error函數執行,它將會中止當
//前函數並返回到鍵盤輸入狀態,在命令窗中顯示出錯誤信息
//如果這個信息字符中為空,error 函數將什么也不做,當前函數繼續執行
if nargin < 2
y = 0;
end
if x == 0 & y == 0
msg = 'Both x and y are zero: angle is meaningless!';
warning(msg);
//顯示警告信息並繼續執行函數,如果參數錯誤不是致命的,執行還能繼續,則這個將會被調用。
end
mag = sqrt(x .^2 + y .^2);//極坐標的矢徑
if nargout == 2
angle = atan2(y,x) * 180/pi;//極角
end
- maltab 程序與它們函數之間的交互用是按值傳遞機制。當一個函數調用發生時,matlab將會復制實參生成一個副本,然后把它們傳遞給函數。它意味着雖然函數修改了輸入參數,但它並沒有影響到調用者的原值。
匿名函數定義
fhandle = @(arglist) expr
其中,expr是具體的函數表達式,arglist是指定的函數的自變量。
子函數是在同一函數文件中,主函數之后的由“function”引導的函數,一個函數文件可以有多個子函數。這些子函數在函數文件中的排列順序可以隨意,前提是都要位於主函數后
嵌套函數,即nested function,顧名思義,是嵌套在函數體內部的函數。嵌套函數以function 聲明,結束的時候加上end