Matlab自定義函數的五種方法 [轉]


1、函數文件+調用命令文件:需單獨定義一個自定義函數的M文件;

2、函數文件+子函數:定義一個具有多個自定義函數的M文件;

3Inline:無需M文件,直接定義;

4Syms+subs: 無需M文件,直接定義;

5、字符串+subs:無需M文件,直接定義.

 

1、函數文件+調用函數文件:定義多個M文件:

調用函數文件:myfile.m

clear

clc

for t=1:10

y=mylfg(t);

fprintf(‘%4d^(1/3)=%6.4f\n’,t,y);

end

%自定義函數文件: mylfg.m

function y=mylfg(x) %注意:函數名(mylfg)必須與文件名(mylfg.m)一致

Y=x^(1/3);

注:這種方法要求自定義函數必須單獨寫一個M文件,不能與調用的命令文件寫在同一個M文件中。

2、函數文件+子函數:定義一個具有多個子函數的M文件

%命令文件:funtry2.m

function []=funtry2()

for t=1:10

y=lfg2(t)

fprintf(‘%4d^(1/3)=%6.4f\n’);

End

function y=lfg2(x)

Y= x^(1/3);

%注:自定義函數文件funtry2.m中可以定義多個子函數function。子函數lfg2只能被主函數和主函數中的其他子函數調用。

3Inline:無需M文件,直接定義;

%inline命令用來定義一個內聯函數:f=inline(‘函數表達式’, ‘變量1’,’變量2’,……)

調用方式:y=f(數值列表) %注意:代入的數值列表順序應與inline()定義的變量名順序一致。

例如:

f=inline(‘x^2+y’,’x’,’y’);

z=f(2,3)

Ans=7

注:這種函數定義方式是將它作為一個內部函數調用。特點是,它是基於Matlab的數值運算內核的,所以它的運算速度較快,程序效率更高。缺點是,該方法只能對數值進行代入,不支持符號代入,且對定義后的函數不能進行求導等符號運算

例:

Clear

Clc

f=’x^2’;

Syms x g;

g=x^2;

h=inline(‘x^2’,’x’);

4Syms+subs: 無需M文件,直接定義;

syms定義一個符號表達式,用subs調用:

Syms f x %定義符號

f=1/(1+x^2); %定義符號表達式

subs(f, ‘x’, 代替x的數值或符號)

注:對於在syms中已經定義過的符號變量,在subs中進行替代時,單引號可以省略。但是,如果在syms后又被重新定義為其他類型,則必須加單引號,否則不可替換。

這種函數定義方法的特點是,可以用符號進行替換

Syms f x

f=1/(1+x^2);

subs(f, ‘x’,’y^2’)

ans=

1/(1+(y^2)^2)

注:該方法的缺點是,由於使用符號運算內核,運算速度會大大降低。

5、字符串+subs:無需M文件,直接定義.

直接定義一個字符串,用subs命令調用。例如:

f=’1/(1+x^2)’ %定義字符串

z=subs(f,’x’,2)

g=subs(f,’x’,’y^2’)

注:優點是,占用內存最少,定義格式方面自由。

缺點是,無法對字符進行符號轉化。

當所要替代的符號在調用前都已經有了數值定義,則可以直接調用subs(f).例如:

f=’x^2*y’;

x=2;y=3;

subs(f)

ans=12

 

[轉] http://apps.hi.baidu.com/share/detail/23406825


免責聲明!

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



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