【发布时间】:2016-03-17 01:18:28
【问题描述】:
我正在尝试编写一个 MATLAB 程序,我已经到了需要执行以下操作的地步。我有这个等式:
我必须找到常数“Xcp”的值(大于零),也就是使积分等于零的值。
为了做到这一点,我编写了一个循环,其中 Xcp 的值在每次迭代中以小增量前进,并执行积分并检查它是否为零,如果它达到零,则循环结束并且 Xcp 为与此值一起存储。
但是,我认为这不是完成这项任务的有效方法。运行时间增加了很多,因为这个循环很长,每次都要进行积分,积分限制替换。
在 Matlab 中是否有更聪明的方法来获得更好的代码效率?
P.S.:我使用conv() 将两个多项式相乘。因为 cl(x) 和 (x-Xcp) 都是多项式。
编辑:一段代码。
p = [1 -Xcp]; % polynomial (x-Xcp)
Xcp=0.001;
i=1;
found=false;
while(i<=x_te && found~=true) % Xcp is upper bounded by x_te
int_cl_p = polyint(conv(cl,p));
Cm_cp=(-1/c^2)*diff(polyval(int_cl_p,[x_le,x_te]));
if(Cm_cp==0)
found=true;
else
Xcp=Xcp+0.001;
end
end
这是我用来运行本节的代码。另一个问题是我必须针对不同的情况(不同的 cl 函数)这样做,因此代码更慢。
【问题讨论】:
-
最好的方法是借助矢量化来做到这一点。出示您的代码,我们会尽力帮助您!
-
您可以重新排列并从积分中取出 Xcp 以获得 Xcp = A/B 其中 A = Integral( x*cl(x)) 和 B = Integral(cl(x))
-
这是个好主意,谢谢@dmuir
标签: matlab math integration