matlab循环中调用函数,Matlab:优化循环中函数调用和余弦符号查找的速度

有问题的代码在这里:

function k = whileloop(odefun,args)

...

while (sign(costheta) == originalsign)

y=y(:) + odefun(0,y(:),vars,param)*(dt); % Line 4

costheta = dot(y-normpt,normvec);

k = k + 1;

end

...

end并澄清,odefun是F1.m,是我的一个m文件。我把它传递给包含这个while循环的函数。这就像whileloop(@F1,args)。上面代码块中的第4行是欧拉方法。

我使用while循环的原因是因为我想触发矢量“y”穿过由点“normpt”定义的平面和垂直于该平面的矢量“normvec”。

这个代码是否有一个简单的改变,可以大大加快速度?我应该尝试学习如何制作mex文件(为了提高速度)?

编辑:

这是一个匆忙尝试的例子,可以尝试用什么来测试。我没有调试过。这是给你一个想法:

%Save the following 3 lines in an m-file named "F1.m"

function ydot = F1(placeholder1,y,placeholder2,placeholder3)

ydot = y/10;

end

%Run the following:

dt = 1.5e-12 %I do not know about this. You will have to experiment.

y0 = [.1,.1,.1];

normpt = [3,3,3];

normvec = [1,1,1];

originalsign = sign(dot(y0-normpt,normvec));

costheta = originalsign;

y = y0;

k = 0;

while (sign(costheta) == originalsign)

y=y(:) + F1(0,y(:),0,0)*(dt); % Line 4

costheta = dot(y-normpt,normvec);

k = k + 1;

end

disp(k);dt应该足够小,以致需要数十万次迭代才能触发。

假设我必须使用欧拉方法。如果你对我为什么告诉你采取这样的假设感到好奇,我有一个带有状态依赖噪声的随机微分方程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值