matlab不定積分
等價無窮小替換
∵ln(1+x)~x
∴ln[e^sinx+³√(1-cosx)]=ln[1+e^sinx+³√(1-cosx)-1]~e^sinx+³√(1-cosx)-1
∵arctanx~x
∴arctan[2³√(1-cosx)]~2³√(1-cosx)
∴原式=(1/2)lim(x→0) [e^sinx+³√(1-cosx)-1]/³√(1-cosx)
=(1/2){lim(x→0) [e^sinx-1]/³√(1-cosx)+ lim(x→0)³√(1-cosx)/³√(1-cosx)}
=1/2+(1/2)lim(x→0) [e^sinx-1]/³√(1-cosx)
再用等價無窮小替換
∵e^x-1~x
∴e^sinx-1~sinx~x
1-cosx~x²/2
∴原式=1/2+(1/2)lim(x→0) [e^sinx-1]/³√(1-cosx)
=1/2+(1/2)lim(x→0) x/³√(x²/2)
=1/2+(1/2)lim(x→0) ³√(2x)
=1/2
試用matlab如下數值積分其中R r爲常量
題主的做法主要存在兩點問題:
1、quad函數用於計算數值積分,函數表達式中不能包含符號量;
2、被積函數的表達式應該寫成關於被積變量的向量化的形式(也就是應該用點運算)。
參考代碼:
R=1;
syms L;
rr = 0 : 0.1 : 1;
for ii = 1 : length(rr)
r = rr(ii);
f = @(l)(acos((1+l*l-r*r)/(2*l))+r*r*acos((r*r+l*l-1)/(2*r*l))-0.5*sqrt(4*r*r-(1+r*r-l*l)^2))*2*l/(pi*r^4);
fun = @(L) arrayfun(f,L);
J(ii) = quadl(fun,0,r);
end
plot(rr, J)
或者也可以借用樓上 楓簫1 的部分代碼,寫成:
R=1;
syms L;
rr = 0 : 0.1 : 1;
for ii = 1 : length(rr)
r = rr(ii);
SOA=R^2*acos((R^2+L^2-r^2)/(2*R*L))+r^2*acos((r^2+L^2-R^2)/(2*r*L))-...
0.5*sqrt(4*R^2*r^2-(R^2+r^2-L^2)^2);
PAB=SOA/(pi*r^2);
p=2*L/r^2;
f=PAB*p;
fun = eval(['@(L)' vectorize(f)]);
fun = @(l) arrayfun(@(L)eval(f),l);
J(ii) = quadl(fun,0,r);
end
plot(rr, J)
以上代碼雖可以運行,但被積函數存在問題——SOA的第一項反餘弦的值可能出現複數(因爲在r稍小的情況下,acos的參數大於1),請題主再仔細檢查一下。
以上就是matlab不定積分的詳細內容,更多請關注本站其它相關文章!