matlab中積分函式都有哪些,MATLAB中怎麼定義積分函式

時間 2022-03-29 19:24:18

1樓:粥楞發

有如下10種積分函式:

%符號積分

int(f,v)

int(f,v,a,b)

%數值積分

trapz(x,y)%梯形法沿列方向求函式y關於自變數x的積分

cumtrapz(x,y)%梯形法沿列方向求函式y關於自變數x的累計積分

quad(fun,a,b,tol)%採用遞推自適應simpson法計算積分

quad1(fun,a,b,tol)%採用遞推自適應lobatto法求數值積分

dbquad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol)%二重(閉型)數值積分指令

triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol)%三重(閉型)數值積分指令

matlab是美國mathworks公司出品的商業數學軟體,用於演算法開發、資料視覺化、資料分析以及數值計算的高階技術計算語言和互動式環境。

2樓:後藝餘初蘭

%符號積分

int(f,v)

int(f,v,a,b)

%數值百積分度

trapz(x,y)%梯形法沿列方向求函式y關於自變數x的積分

cumtrapz(x,y)%梯形法沿列方向求函式y關於自變數x的累計積問分

quad(fun,a,b,tol)%採用遞推自適應答simpson法計算積分

quad1(fun,a,b,tol)%採用遞推自適應lobatto法求數值積內分

dbquad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol)%二重(閉型容)數值積分指令

triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol)%三重(閉型)數值積分指令

3樓:藺冰柯螺

樓上已經比較完全了

可以在matlab中輸「help

int」試試,在幫助文件的最後會有羅列相近的函式鏈結

matlab中怎麼定義積分函式

4樓:暴血長空

int(s,v,a,b):以v為自變數,對被積函式s在區間[a,b]上的定積分。

a和b可以是兩個具體的數,也可以是乙個符號表示式,還可以是無窮(inf)。

例:syms x %定義符號變數

f=int(x^3,x,1,2) % 求x^3在區間[1,2]上的定積分

matlab中積分區間是自變數的函式,怎麼積分

5樓:我行我素

按你的程式是有問題,如開平方出現虛數後,就無法再算下去。我改了一下,看能不能達到你的預想:

g=0.189^2/0.148-0.1;

x=0:pi/100:g;

m=(-0.189-(0.189^2-0.148*x).^0.5)*((-0.0074)*(-1));

n=(-0.189+(0.189^2-0.148*x).^0.5)*((-0.0074)*(-1));

ms=sort(m);

ns=sort(n);

xlen=length(x);

for k=1:xlen

c=linspace(m(k),n(k),xlen);

y=(((2*pi)^0.5)*6)^(-1)*exp(-((c-25).^2)*(72^(-1)));

z=trapz(c,y,2)

figure

plot(x,y)end

matlab 做積分函式曲線

6樓:艾素延可可

問題主要出現在f0這個函式。

在s比較小而x比較大的時候,指數函式的值在數值意義上為0(小於realmin=2.2251e-308),而bessel函式的值為無窮大(大於realmax=1.7977e+308),導致出現0*inf的情況,結果為非數nan。

被積函式的值一旦出現nan,數值積分就會失敗,返回的結果也是nan,最後得到f是一串nan,所以畫不出曲線來。

就數值積分函式quad或integral而言,其內部包含了對邊界點出現nan值的處理,例如quad採取的做法是把邊界點進行微調eps*(b-a),以試圖避免nan。integral函式也有類似的處理。這也是類似下面的積分

1quad(@(x)sin(x)./x,0,1)

能夠計算的原因(否則在x=0處會出現nan)。

但數值積分函式對邊界點所做的微調對於本題的被積函式是不夠的。對此我花了不少時間對此進行分析,但現在有點太晚了,先不寫了,把結果先給你吧。

可以把積分下限0改成0.1,這樣會造成少量的誤差,但影響不大:

123456789101112b=1; sigma=1; z=1; mu=0;b0=b.^2;d0=sigma.^2;k=(z.

^2)./(2*b0);x=0:0.

01:15;f0=@(s,x)(1./(s.

^3)).*exp(-((log(s) - mu).^2.

/(2*d0))-(((k +1)*(x.^2))./(s.

^2))).*besseli(0,(2*x*sqrt(k*(k+1)))./s); f1=arrayfun(@(x)integral(@(s)f0(s,x),0.

1,inf),x);f=(2*(k+1)*exp(-k)*x.*f1)./(sqrt(2*pi*d0));plot(x,f,'r');

進一步的分析我明天貼到你對本問題的另外兩處提問(編號1796169735918091867、1638082848257894860)。

7樓:匿名使用者

1、quad的積分表示式中

2、quad的積分限不能為無窮大,換用integral函式(2012a以上版本)。

把f0=@(z)(1./z).*exp(-((log(z) - mu).^2./(2*d0))-(((x.^2)+(z.^2))./ (2*b0)));

f1=quad(f0,0,inf);

改成f0=@(z,x)(1./z).*exp(-((log(z) - mu).^2./(2*d0))-(((x.^2)+(z.^2))./ (2*b0)));

f1=arrayfun(@(x)integral(@(z)f0(z,x),0,inf),x);

matlab中函式有多個變數如何只對其中乙個積分,並得到函式。

8樓:

如果想做數值積分,那麼「其他變數」必須賦予具體的數值,而不能用符號變數表示。

修改示例:

function f = cd(y,z)

m = @(x) ((x-1531.2)/0.2).^-8/16+0.5*((x-1531.5)/0.2).^-8/16;

n = @(x) ((x-y)/0.2).^-8/16+0.5*((x-z)/0.2).^-8/16;

l = @(x) (n(x)-m(x)).^2;

f = integral(l,0,inf);

另外,請注意,我剛剛試了一下y=1 z=1的情形,發現被積函式在x=1處發散。請務必注意給yz取合適的值,否則這會導致不可預料的積分值。

matlab畫積分函式曲線

9樓:匿名使用者

這個問題和另乙個問題(編號2051722037141864067)基本相同,但與那個問題相比,又多了一處錯誤:

f1=integral(@(v)f0(v,x),0,inf);

f2=arrayfun(@(x)f1,x);

和f2=arrayfun(@(x)integral(@(v)f0(v,x),0,inf),x);

的作用是不一樣的:

對於後一種寫法,在integral的表示式中,x是作為匿名函式的形式引數,其值不定,在呼叫arrayfun的時候才被賦予了具體的值,即向量x=0:0.01:

15,也就是說,在這個表示式裡出現的x有兩種不同的含義,其實是兩個不同的量使用了相同的符號,這一點初學者有點容易被搞糊塗。

而對於前一種寫法,f1不是匿名函式,而是直接把x=0:0.01:15代入求得函式值,但由於計算積分的時候,自變數v是按照向量處理的,而此時x也是向量,所以會導致出錯,無法計算。

在另乙個問題(編號2051722037141864067)的回答裡面,我分析了造成無法繪圖的原因是由於被積分函式的值出現了nan,並建議把積分的下限改為0.1。這樣並不會造成太大影響,對此,我們可以通過下面的方法說明:

取積分下限分別為0.1、0.01、0.

001、0.0001,分別計算並繪圖(匿名函式f0之前的**基本不變,但按照你上一次提問的值,取s=1):

c = 'rgbm';

for i=1:length(c)

f2=arrayfun(@(x)integral(@(v)f0(v,x),10^-i,inf),x);

f=(2*(k+1)*exp(-k)*x.*f2)./(sqrt(2*pi*d0));

plot(x,f,c(i));

hold on

endlegend(arrayfun(@(i),10.^-(1:4)),0)

可以看到,積分下限取0.1對於x=0~15都能夠計算,取0.01則只能計算大約0~4的範圍(x更大的時候會得到nan,那部分的曲線就畫不出來了),如果進行區域性放大:

可以看到,如果取積分下限為0.001和0.0001,所給積分表示式能夠正確計算的範圍分別只有0.

4和0.04左右。另一方面,我們注意到,在可計算的範圍內,積分下限取0.

01、0.001、0.0001的曲線是相同的,這也就意味著,積分下限取0.

01就足夠精確了。另外,從圖中也反映出,積分下限如果取0.1,會在大約x=0~0.

2的範圍內存在誤差。

如果按照你現在的s取值,畫出的圖如下,與s=1相比,取相同的積分下限,可計算的範圍總體上相同,但即使取0.1作為積分下限,也幾乎沒有誤差。

另外,還有一些小問題:

1、計算出來的結果是f,繪製曲線卻用y。

2、括號並不是越多越好,過多的括號反而看起來更亂,例如

f0=@(v,x)(1./(v.^3)).

*exp(-(((log(v) - u).^2)./(2*d0))-(((k +1)*(x.

^2))./(v.^2))).

*besseli(0,(2*x*sqrt(k*(k+1)))./v);

可以改成

f0=@(v,x) (1./(v.^3)) .

* exp(-((log(v) - u).^2./(2*d0))-(k +1)*x.

^2./v.^2) .

* besseli(0,2*x*sqrt(k*(k+1))./v);

看起來更清晰。

matlab中hough函式用法

影象處理工具箱提供了三個與霍夫變換有關的函式。函式hough實現了前面討論的概念,函式houghpeaks尋找霍夫變換的峰值 累加單元的高計數 函式houghlines以來自其他兩個函式的結果為基礎在原始影象中提取線段。1.函式hough 函式hough支援任意的預設語法 h,theta,rho h...

matlab 中怎麼定義函式

俺明白你的意思。把以下檔案存為y.m 也可以用別的名字,以後執行起來統一就行,最好你就用y.m存吧,要不後面沒法執行 function f y t x 0 1 2 y 5.8955 3.5639 2.5173 1.9790 1.8990 1.3938 1.1359 1.0096 1.0343 0.8...

matlab中function函式怎麼用,為什麼出錯

function 是用來標記 m 檔案為函式檔案的,不能在 commend window 中直接輸入當成函式用。比如新建乙個 myfun.m 檔案,寫入你要包含的內容,然後保證這個檔案在 path 中 或者在當前資料夾中,就可以在命令視窗作為普通函式呼叫,比如 myfun 3 4 function的...

matlab中eval函式怎麼用

matlab 中eval函式的使用方法如下 eval r 函式的功能就是將括號內的字串視為語句並執行 例如 eval r y1 sin 2 就是相當於在matlab命令視窗輸入了y1 sin 2 這條命令。多在迴圈中使用,可以對多個名字有規則的變數或檔案進行操作,例1 for x 1 5 eval ...

matlab函式定義

俺明白你的意思。把以下檔案存為y.m function f y t x 0 1 2 y 5.8955 3.5639 2.5173 1.9790 1.8990 1.3938 1.1359 1.0096 1.0343 0.8435 0.6856 0.6100 0.5392 0.3946 0.3903 0...