Matlab集成问题,输入函数问题

时间:2015-02-14 14:13:06

标签: matlab integration

我正在尝试对一个功能进行数值积分,这个功能对于扩展和分析工作来说是非常可怕的。积分超过dpsi和dtheta。如果我将变量存储为sym我被告知积分输入必须是double或single,如果我将它存储为double或single我被告知我添加了两个不同尺寸的张量。帮助

eta = input('Enter Dielectric Constant 1.5-4:  ');
psi = input('Enter Lattitude -pi/2 to +pi/2:  ');
theta = input('Enter Longitude -pi/2 to +pi/2:  ');
sdev = input('Enter STD DEV (roughness) maybe 0.1:  ');



dpsi = sym('dspi');
dtheta = sym('dtheta');

calpha = (cos(theta+dtheta)).*(cos(psi+dpsi));
rp01 = calpha-sqrt(eta-1+((calpha).^2));
rp02 = calpha+sqrt(eta-1+((calpha).^2));
rperp = (rp01./rp02).^2;
rp11 = ((eta.*calpha)-sqrt(eta-1+((calpha).^2)));
rp12 = ((eta.*calpha)+sqrt(eta-1+((calpha).^2)));
rpar = (rp11./rp12).^2;



fun = @(dtheta,dpsi) (rpar+rperp)
thetamax = (pi/2) - theta
psimax = (pi/2) - psi

q = integral2(fun,-pi/2,thetamax,-pi/2,psimax)

1 个答案:

答案 0 :(得分:0)

最简单的解决方案:

使用以下符号将符号表达式转换为实际数值函数:

fun = matlabFunction((rpar+rperp),'vars',{dtheta,dpsi});

更好的解决方案:

首先避免使用符号,然后定义一个函数:

function out = YOURFANCYFUNCTION(eta,psi,theta,sdev,dtheta,dpsi)
calpha = (cos(theta+dtheta)).*(cos(psi+dpsi));
rp01 = calpha-sqrt(eta-1+((calpha).^2));
rp02 = calpha+sqrt(eta-1+((calpha).^2));
rperp = (rp01./rp02).^2;
rp11 = ((eta.*calpha)-sqrt(eta-1+((calpha).^2)));
rp12 = ((eta.*calpha)+sqrt(eta-1+((calpha).^2)));
rpar = (rp11./rp12).^2;
out = (rpar+rperp);

传递给积分的函数应该是:

fun = @(dtheta,dpsi) YOURFANCYFUNCTION(eta,psi,theta,sdev,dtheta,dpsi)

其中捕获eta,psi,theta,sdev的当前值并生成dthetadpsi个变量。

顺便说一句:永远不会使用变量sdev