Matlab 自定義函數


問題

  1. 自定義一個函數,求給定復數的指數、對數、正弦和余弦,並在命令文件中調用該函數。
  2. 自定義一個函數,計算一行向量中各元素的均值和標准差。
  3. 求下列方程的根:

     


分析與解答:

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)最接近於零

總結與心得

Matlab自定義函數的方法:

1.函數文件+調用命令文件:需單獨定義一個自定義函數的M文件;
2.直接通過@符號定義.如:f=@(x,y)(x.^2-sin(y)),調用:f(2,3)
函數句柄變量f相當於函數的別名,利用它可以間接調用函數

Matlab的函數中變量的傳遞

  1. 函數所傳遞參數的數目具有可調性
例子:
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
  1. maltab 程序與它們函數之間的交互用是按值傳遞機制。當一個函數調用發生時,matlab將會復制實參生成一個副本,然后把它們傳遞給函數。它意味着雖然函數修改了輸入參數,但它並沒有影響到調用者的原值。

Matlab的匿名函數、子函數和嵌套函數。

匿名函數定義
fhandle = @(arglist) expr
其中,expr是具體的函數表達式,arglist是指定的函數的自變量。

子函數是在同一函數文件中,主函數之后的由“function”引導的函數,一個函數文件可以有多個子函數。這些子函數在函數文件中的排列順序可以隨意,前提是都要位於主函數后

嵌套函數,即nested function,顧名思義,是嵌套在函數體內部的函數。嵌套函數以function 聲明,結束的時候加上end


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM