1樓:王
matlab自定義函式的幾種方法
1、函式檔案+呼叫命令檔案:需單獨定義一個自定義函式的m檔案;
2、函式檔案+子函式:定義一個具有多個自定義函式的m檔案;
3、inline:無需m檔案,直接定義;
4、匿名函式;
5、syms+subs: 無需m檔案,直接定義;
6、字串+subs:無需m檔案,直接定義;
7、直接通過@符號定義.
1、函式檔案+呼叫函式檔案:定義多個m檔案:
% 呼叫函式檔案:myfile.m
clear
clcfor t=1:10
y=mylfg(t);
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(『m^(1/3)=%6.4f\n』);
endfunction y=lfg2(x)
y= x^(1/3);
%注:自定義函式檔案funtry2.m中可以定義多個子函式function。子函式lfg2只能被主函式和主函式中的其他子函式呼叫。
3、inline:無需m檔案,直接定義;
%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))
5、syms+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)
注:該方法的缺點是,由於使用符號運算核心,運算速度會大大降低。
6、字串+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
7、直接通過@符號定義.
示例如下:
>> f=@(x,y)(x.^2-sin(y))
f =@(x,y)(x.^2-sin(y))
>> f(2,3)
ans =
3.8589
2樓:匿名使用者
你好!定義好了函式及各個引數,直接執行函式名和引數就可以了
比如:在主程式或命令視窗上寫好main(引數)或者直接main執行即可
請問matlab中m檔案寫的程式開頭是定義的function後怎麼執行
matlab用function定義一個函式後 怎麼讓這個函式生效 是把這個m檔案存到哪啊
3樓:卜項離
函式 是要呼叫的,.m檔案應該和呼叫它的.m檔案放在一個資料夾裡才行,不然找不到它的;
譬如函式為 out = function(input1,input2); 此函式有兩個引數,一個返回值;
呼叫它的話,就是 result = function(x1,x2); result 就是用函式function對實際引數x1和x2計算得到的返回值;
matlab的函式定義和函式呼叫基本和其它程式語言是一個道理,引數傳入,引數傳出等
matlab中如何將自己寫的函式儲存到函式庫以便以後呼叫?
4樓:匿名使用者
你把自己儲存檔案的路徑新增到matlab的搜尋路徑,以後就可以直接用了。
file-set path-
5樓:化學工程
太可以了,下面是一個高斯消去法程式,存為mygauss.m。
function x = mygauss(a, b)
% solve linear system by gauss elimination method without pivoting
n = length(b);
for k = 1 : n-1
if a(k,k)==0
fprintf('error: the %dth pivot element equal to zero!\n',k);
return;
endindex = [k+1:n];
m = -a(index,k)/a(k,k);
a(index,index) = a(index,index) + m*a(k,index);
b(index) = b(index) + m*b(k);
endx = zeros(n,1);
x(n) = b(n)/a(n,n);
for i = n-1:-1:1
x(i) = ( b(i) - a(i,[i+1:n])*x([i+1:n]) )/a(i,i);
end呼叫時,
>>a=[10,-7,0;5,-1,5;-3,2,6];
>>b=[7;6;4];
>>mygauss(a,b)
ans =
0.0000
-1.0000
1.0000
或>> mygauss([10,-7,0;5,-1,5;-3,2,6], [7;6;4])
ans =
0.0000
-1.0000
1.0000
也可以在程式種直接呼叫,如:
a=[10,-7,0;5,-1,5;-3,2,6];
b=[7;6;4];
x=mygauss(a,b)
6樓:蓋濰駒問兒
在matlab命令視窗敲入doc
加回車你可以看到所有的函式都在裡面
而且都有解釋怎麼用的。
matlab 如何建立、呼叫自定義函式?
7樓:rsn_灰灰
新建一個m檔案 在m檔案裡面第一行輸入function [x,y]=pll(x1,y1,x2,y2),這裡x1 x2 y1 y2是你函式的輸入值, x y是輸出值,接著定義你要實現的功能,比如:x = x1 + x2; y = y1 + y2; 接著儲存這個m檔案,注意!! 這個m檔案的名字必須是定義的函式的名字,即儲存為pll.
m 否則會出錯。
接著在matlab命令視窗中輸入 pll(1,2,3,4)看看會得到什麼? 也可以另外建立一個m檔案,在這裡呼叫pll()這個函式。
不知道我說清楚了沒。。。。我沒有除錯過,希望不會報錯 -。-
8樓:紫風**
新建一個m檔案
,在editor編輯器中輸入函式function [x,y]=pll(x1,y1,x2,y2)以及其欲實現的功能,儲存,然後在另外一個m檔案中就可以呼叫這個函式,在命令視窗中不能實現呼叫。
我初學,我就是這樣用的,並且那個自定義了函式的m檔案與呼叫此函式的m檔案須在同一儲存路徑下
9樓:阿魯特
我也是這個問題,但是這個是因為你在這裡只是定義一個function,沒有給裡面的引數定義所以會出現錯誤,你在別的m檔案中直接呼叫這個函式,引數匹配就沒有問題。我的已經調好了,你加油!
10樓:匿名使用者
function [x,y]=pll(1,2,3,4)'x1=1 y1=2 x2=3 y2=4
關於函式的定義,關於MATLAB定義函式的問題
沒有哪一部分是y,你沒有理解函式的本質 f是一個作用,使得x對映為 x 1 更基本的是叫做關係的一個 x與z 姑且不寫y,為了讓你清楚些 有關係,是說x的變化影響z,z的變化影響x 當x固定後,若只有唯一一個z與之對應,則z叫做x的函式,使x變化為z的作用我們記作g,即g x z 所以說,你可以任意...
matlab關於定義函式的問題
你可以這樣寫 x 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8 8.5 9 9.5 10 y 5.8 4.7 10.3 13.9 18.6 21.2 24.1 32.0 45.1 47.4 62.1 69.9 84.5 89.0 104.6 11...
c語言後定義函式前面在函式原型中為什麼要加
傳遞引數為陣列或者指標。形參都是以指標形式表示。你的例,第一個引數的實參為int型,第二個的實參可以是int陣列名 第一元素地址 int型指標 指標的值就是地址 int值的地址 x int 是一個型別 就好比如char也是一個型別。double也是一個型別。int型別 int 型別這是兩個型別 加 ...