有问题的代码在这里:
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应该足够小,以致需要数十万次迭代才能触发。
假设我必须使用欧拉方法。如果你对我为什么告诉你采取这样的假设感到好奇,我有一个带有状态依赖噪声的随机微分方程。