Penggantian setaraf infinitesimal
∵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)
∴Formula asal=(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)
Ganti dengan nilai infinitesimal yang setara
∵e^x-1~x
∴e^sinx-1~sinx~x
1-cosx~x²/2
∴Formula asal=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
Terdapat dua masalah utama dengan pendekatan pengarang:
1. Fungsi quad digunakan untuk mengira kamiran berangka, dan ungkapan fungsi tidak boleh mengandungi kuantiti simbolik
2. Ungkapan fungsi integrand hendaklah ditulis dalam bentuk vektor mengenai pembolehubah kamiran dan (iaitu, aritmetik titik harus digunakan).
Kod rujukan:
R=1;
syms L;
rr = 0 : 0.1 : 1;
untuk ii = 1 : panjang(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);
keseronokan = @(L) arrayfun(f,L);
J(ii) = quadl(seronok,0,r);
akhir
plot(rr, J)
Atau anda boleh meminjam sebahagian kod daripada Fengxiao 1 di tingkat atas dan tulis:
R=1;
syms L;
rr = 0 : 0.1 : 1;
untuk ii = 1 : panjang(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;
keseronokan = eval(['@(L)' vectorize(f)]);
keseronokan = @(l) arrayfun(@(L)eval(f),l);
J(ii) = quadl(seronok,0,r);
akhir
plot(rr, J)
Walaupun kod di atas boleh dijalankan, terdapat masalah dengan integrand - nilai kosinus songsang bagi sebutan pertama SOA mungkin nombor kompleks (kerana apabila r lebih kecil, parameter acos lebih besar daripada 1 ), sila semak dengan teliti sekali.
Atas ialah kandungan terperinci kamiran tak tentu matlab. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!