Matlab自定義函式的幾種方法

2021-06-27 08:04:08 字數 2121 閱讀 9186

1、函式檔案+呼叫命令檔案:需單獨定義乙個自定義函式的m檔案;

2、函式檔案+子函式:定義乙個具有多個自定義函式的m檔案;

3、inline:無需m檔案,直接定義;

4、匿名函式;

5、syms+subs: 無需m檔案,直接定義;

6、字串+subs:無需m檔案,直接定義;

7、直接通過@符號定義.

% 呼叫函式檔案:myfile.m

clear

clcfor t=1:10

y=mylfg(t);

fprintf(『m^(1/3)=%6.4f\n』,t,y);

end%自定義函式檔案: mylfg.m

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

y=x^(1/3);

注:這種方法要求自定義函式必須單獨寫乙個m檔案,不能與呼叫的命令檔案寫在同乙個m檔案中。

%命令檔案:funtry2.m

function =funtry2()

for t=1:10

y=lfg2(t)

fprintf(『m^(1/3)=%6.4f\n』);

endfunction y=lfg2(x)

y= x^(1/3);

%注:自定義函式檔案funtry2.m中可以定義多個子函式function。子函式lfg2只能被主函式和主函式中的其他子函式呼叫。

%inline命令用來定義乙個內聯函式:f=inline(『函式表示式』, 『變數1』,』變數2』,……)。

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

例如:f=inline(『x^2+y』,』x』,』y』);

z=f(2,3)

ans=7

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

例:clear

clcf=』x^2』;

syms x g;

g=x^2;

h=inline(『x^2』,』x』);

4. 

匿名函式

使用matlab函式控制代碼操作符@,可以定義指向matlab內建函式和使用者自定義函式的函式控制代碼,函式控制代碼也可以像函式一樣的使用。例如:

>>x=-pi:0.1:pi;

>> fh=;

fh =

@cos 

@sin

>>plot(fh(x))

用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)

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

直接定義乙個字串,用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

示例如下:

>>f=@(x,y)(x.^2-sin(y))

f =@(x,y)(x.^2-sin(y))

>> f(2,3)

ans =

3.8589

Matlab自定義函式的幾種方法

function y myfun x y x 2 以上是myfun.m檔案,matlab命令列使用 clear clc y myfun 2 inline方式類似c 裡的內聯函式,一般較簡單的函式適合內聯。定義方式 f inline 函式表示式 變數1 變數2 以下是例子 clear clc f in...

pytorch自定義loss函式的幾種方法

1.讓張量使用variable 型別,如下所示 1 from torch.autograd import variable 23 inp torch.zeros 2,3 4 inp variable inp type torch.longtensor 5print inp variable型別包裝了...

matlab學習 matlab自定義函式的編寫

判斷乙個數是否為素數 function p myprime a for i 2 a 1if 0 rem a,i p 0 break elseif i a 1 p 1 endend 測試 clc n input 請輸入乙個數 res myprime n if res 1disp 是素數 else di...