用quad2d求2重积分,错误提示 是必须是有限的,标量,浮点。

syms T n
A=sin(2.*pi.*(23.45.*(sin(360.*(284+n))./365)/360).*(sin(2.*pi.*28.83./360))+cos(2.*pi.*23.45./360).*(sin(2.*pi.*(360.*(284+n))./365./360)).*(cos(2.*pi.*28.83/360)).*cos(2.*pi.*15.*(12-T)/360))
B=(1-A^2)^(1/2)
C=(A.*sin(2.*pi.*28.83/360-sin(2.*pi.*23.45*sin((2.*pi.*360.*(284+n)./(365.*360))./360))))./(B.*cos(2.*pi.*28.83/360))
D=(B.*C+A./tan(1))./(1+(1+(tan(1)^2)^(1./2)))
E=(1-D^2)^(1./2)
I=4870800.*0.7^(A^0.078).*E
K=((-12.*acos(((1-sin(2.*pi.*23.45.*sin((2.*pi.*360.*(284+n)/(365.*360))./360)).*sin(2.*pi.*28.83/360))./(cos(2.*pi.*23.45.*sin((2.*pi.*360.*(284+n)./(365.*360)))).*cos(2.*pi.*28.83./360))))))./pi+12
J=((-12.*acos(((-sin(2.*pi.*23.45*sin((2.*pi.*360.*(284+n)./(365.*360))./360)).*sin(2.*pi.*28.83/360))./(cos(2.*pi.*23.45.*sin((2.*pi.*360.*(284+n)./(365.*360)))).*cos(2.*pi.*28.83/360))))))./pi+12
Q = quad2d(@(T,n)4870800.*(7./10)^(sin(509261720127443129./2958864955182415872000.*pi.*sin(102240+360.*n)+65203807073152761236388669176745./81129638414606681695789005144064.*sin(1./65700.*pi.*(102240+360*n)).*cos(1./12.*pi.*(12-T)))^(39/500)).*(1-(20282409603651670423947251286016./63209772253217858311781754693435.*sin(509261720127443129./2958864955182415872000.*pi.*sin(102240+360.*n)+65203807073152761236388669176745./81129638414606681695789005144064.*sin(1./65700.*pi.*(102240+360.*n)).*cos(1./12.*pi.*(12-T))).*sin(961/6000.*pi-sin(469/10.*pi.*sin(1/65700.*pi.*(284+n))))+5070602400912917605986812821504./28092832251953733945522734363625.*sin(509261720127443129./2958864955182415872000.*pi.*sin(102240+360.*n)+65203807073152761236388669176745./81129638414606681695789005144064.*sin(1./65700.*pi.*(102240+360.*n)).*cos(1/12.*pi*(12-T))))^2)^(1/2),K,J,1,365)
错误提示:A must be a finite, scalar, floating point constant

 Réponse acceptée

xiveve
xiveve le 25 Nov 2022

0 votes

正确的做法是,被积函数必须是关于 n、T 的函数句柄,另外, 积分限K,J是关于 n 的函数句柄。所以,你其实一开始就不应该定义syms T n的,你应该直接将A、B、C、D、E、I、J、K这些统统定义为 n 的函数句柄,即: A = @(n) A的表达式; 因为你一开始没有这么做,我只好将你的符号表达式转化为对应的函数句柄。如下:
f = 4870800.*(7./10)^(sin(509261720127443129./2958864955182415872000.*pi.*sin(102240+360.*n)+65203807073152761236388669176745./81129638414606681695789005144064.*sin(1./65700.*pi.*(102240+360*n)).*cos(1./12.*pi.*(12-T)))^(39/500)).*(1-(20282409603651670423947251286016./63209772253217858311781754693435.*sin(509261720127443129./2958864955182415872000.*pi.*sin(102240+360.*n)+65203807073152761236388669176745./81129638414606681695789005144064.*sin(1./65700.*pi.*(102240+360.*n)).*cos(1./12.*pi.*(12-T))).*sin(961/6000.*pi-sin(469/10.*pi.*sin(1/65700.*pi.*(284+n))))+5070602400912917605986812821504./28092832251953733945522734363625.*sin(509261720127443129./2958864955182415872000.*pi.*sin(102240+360.*n)+65203807073152761236388669176745./81129638414606681695789005144064.*sin(1./65700.*pi.*(102240+360.*n)).*cos(1/12.*pi*(12-T))))^2)^(1/2)
f = eval(['@(n,T)',vectorize(f)])
K = eval(['@(n)',vectorize(K)])
J = eval(['@(n)',vectorize(J)])
Q = quad2d(f,1,365, K,J)

Plus de réponses (0)

Catégories

En savoir plus sur MATLAB dans Centre d'aide et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!