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...