matlab匿名函式,matlab 匿名函式組的問題

時間 2021-08-30 10:29:04

1樓:匿名使用者

matlab是匿名函式。

f = @(x1,x2,x3) x1+x2+x3。

cf = func2str(f); for k = 1:3。

s = ['x' num2str(k)]。

ss = ['x(' num2str(k) ',:)']。

cf = strrep(cf,s,ss)。

end ff = str2func(cf)。

匿名函式:

匿名函式它是matlab中定義的一種函式形式,出現在matlab中,匿名函式不以檔案形式駐留在資料夾上;他的生成方式最簡捷,可在指令窗或任何函式體內通過指令直接生成。

2樓:匿名使用者

匿名函式 出現在 matlab 中。它是matlab中定義的一種函式形式。

函式簡介:匿名函式不以檔案形式駐留在資料夾上;他的生成方式最簡捷,可在指令窗或任何函式體內通過指令直接生成。

匿名函式的作用:主要實現自己定義matlab中的函式,從而擴大函式的使用功能

和內聯函式(inline)相比,匿名函式的優越性在於可以直接使用workspace中的變數,不必申明,非常適合嵌入到m檔案中。

%例10-25 匿名函式舉例。

%本例列舉3個匿名函式的例子,分別有0個、1個和兩個輸入引數。

%首先介紹沒有輸入引數的匿名函式,只需用空格代替arglist即可。例如,編寫求解當前時間的匿名函式如下所示。

>> t = @() datestr(now);

t() %函式的呼叫

ans =

14-sep-2004 20:22:50

%值得注意的是,呼叫該函式時,括號不能省略,否則, matlab 7.1將對程式不予計算,如下所示。

>> t

t =@() datestr(now)

>>%再介紹有乙個輸入引數的匿名函式,該函式用於求所輸入引數的平方,編制並執行程式如下所示。

>> sqr = @(x) x.^2

sqr =

@(x) x.^2

>> sqr(12)

ans =

144>>

%最後介紹有兩個輸入引數的匿名函式,使用者可以由此推導有多個引數的匿名函式,編制並執行程式如下所示。

>> sumaxby = @(x, y) (14*x + 41*y)

sumaxby =

@(x, y) (14*x + 41*y)

>> sumaxby(3,7)

ans =

329>>

注意這些定義過程,其中@這個標誌符是很重要的。

3樓:卓英媛烏炳

後面的@也一樣啊,同樣的意思

把他拆成兩個函式就是:

fx=@(x)(a.*x.^2+1./a^2),myfhd=@(a)(quad(fx,0,1))

這是matlab的控制代碼函式。你要是檢視quad的幫助就會發現,q=quad(fun,a,b)

中fun需要是乙個函式或者函式的控制代碼,所以你第二種寫法是有問題的

4樓:匿名使用者

要搞明白出現這個現象的原因,需要了解inline函式和匿名函式是怎樣工作的。

使用下面的語句定義inline函式:

fx=inline(f);

由於f是sym型別,所以呼叫的實際上是符號數學工具箱的函式sym/inline,該函式將sym物件轉換為char,再呼叫matlab基本系統的inline函式。inline函式可以按照樓主的方式呼叫:

x1=feval(fx,x1);

也可以直接調:

x1=fx(x1);

作用是完全相同的。

匿名函式的定義語法是:

fhandle = @(arglist) expr

等號的右邊包括三部分:

函式控制代碼的符號(@);

參數列arglist(引數之間用逗號分隔,外面加括號);

函式體expr :是乙個合法的matlab表示式,用以執行函式所要實現的功能。

等號左邊可以指定乙個變數,用以儲存匿名函式的控制代碼以便後面使用,不過在很多情況下,匿名函式經常會在定義時直接使用,而不把它儲存為乙個變數。

匿名函式的表示式中可以使用兩種資料:

參數列arglist中列出的變數,這些變數在呼叫的時候才會有具體的資料;

在表示式expr中出現的其它變數。在構造匿名函式的時候,由matlab儲存當前工作區中這些變數的值,然後在呼叫匿名函式的時候使用。需要注意,如果在構造匿名函式之後,表示式裡的變數值變化甚至被清除,都不會影響到已構造的匿名函式,而從另乙個角度說,如果希望這些變數值的變化起作用,需要重新構造匿名函式。

另外,如果表示式中存在當前工作區未定義的變數,構造匿名函式的時候並不會報錯,呼叫的時候才會。

接下來,我們來看一下樓主定義的匿名函式是怎樣工作的:

fx=@(x) f;

這樣構造的乙個匿名函式fx,其函式體是f,matlab會把當前工作區的變數f的值保留下來——這是乙個sym物件(並非樓主所說的字元型),那麼,在呼叫它的時候,就會把這個值作為匿名函式的執行結果返回,所以就出現了樓主所說的現象。

要想讓匿名函式執行f對應的函式表示式,應該這樣定義:

fx=@(x) subs(f);

這樣,就會用匿名函式的輸入引數x代替f表示式中的x,而得到想要的結果。也可以使用以下幾種定義方式:

fx=@(x0) subs(f,x,x0);

fx=@(x0) subs(f,x0);

fx=@(x) subs(f,x);

結果都完全相同。這裡需要說明的是,在匿名函式的表示式中,參數列中的變數處於作用域,如果參數列使用x,則在表示式expr中的x不會被視作符號變數,而是匿名函式的輸入引數。所以,如果表示式中需要用到x,那麼參數列中應使用另乙個變數名x0加以區別。

matlab 匿名函式組的問題

5樓:

tmp=@(t,k)nchoosek(n-1,k)*t.^k.*(1-t).^(n-1-k);

這樣寫導致k也成了函式自變數,所以不對。

我猜測題主需要的是:

tmp= @(t) nchoosek(n-1,k)*t.^k.*(1-t).^(n-1-k);

matlab設計GUI,如何使用matlab製作GUI介面

苛政 建個m檔案,輸入以下 試試看,調整一下大小,調整以下檔案,執行就可以了,不需要用新建gui的過程。clf reset 1 set gcf,unit normalized position 0.1,0.4,0.85,0.35 set gcf,defaultuicontrolunits norma...

matlab中怎樣建立對角矩陣,matlab中怎樣建立一個對角矩陣 20

小小歐平兒 材料 工具 電腦 matlab軟體 1 首先開啟電腦上的 matlab 軟體,在命令列視窗輸入一個向量n,向量n有4個元素。接著使用diag函式生成對角矩陣。2 diag n,k 可以把向量放在第k條對角線上,k為正值,表示右上。k為負值,則表示左下。在命令列輸入diag n,2 即可把...

matlab中如何產生pn序列,matlab中如何產生pn序列 5

雲傾城 for k 1 length x gfpretty x k,end m偽隨機序列matlab源 5階m序列 在matlab命令視窗輸入以下 fbconnection 0 1 0 0 1 mseq m sequence fbconnection mseq function mseq m seq...