首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab集成问题,输入函数问题

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

Stack Overflow用户
提问于 2015-02-14 14:13:06
回答 1查看 53关注 0票数 0

我试图对一个函数做一个数值积分,这是一个非常可怕的扩展和分析工作的函数。积分在dpsi和dtheta上。如果我将变量存储为sym,我被告知积分输入必须是双输入或单输入,如果我将其存储为双变量或单变量,则会被告知添加了两个不同维度的张量。帮助?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-14 14:34:45

最简单的解决方案:

使用以下方法将符号表达式转换为实际的数字函数:

代码语言:javascript
复制
fun = matlabFunction((rpar+rperp),'vars',{dtheta,dpsi});

更好的解决办法:

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

代码语言:javascript
复制
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);

然后,传递给整数的函数应该是:

代码语言:javascript
复制
fun = @(dtheta,dpsi) YOURFANCYFUNCTION(eta,psi,theta,sdev,dtheta,dpsi)

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

顺便说一句:变量sdev从未被使用过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28516462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档