用fsolve求解变参数微分方程

时间:2014-05-13 20:30:10

标签: matlab iteration ode

我使用以下代码为具有6个边界条件的ODE系统生成数值解。

我正在使用初始条件来获得解决方案,但我必须改变其他三个条件才能找到真正的解决方案。我的功能如下:

function diff = prob5diff(M,Fx,Fy)

u0 = [pi/2 0 0]';
sSpan = [0 13];
p = @(t,u) prob5(t,u,M,Fx,Fy);
options = odeset('reltol',1e-6,'abstol',1e-6);
[s,u] = ode45(p,sSpan,u0,options);
L = length(s);
x = u(:,2); y = u(:,3); theta = u(:,1);

diff(1) = x(L) - 5;
diff(2) = y(L);
diff(3) = theta(L) + pi/2;
end

最终,M,Fx和Fy的不同值将产生不同的解决方案,我想要一个解决方案,使diff中的值尽可能接近零,所以我希望fsolve迭代M,Fx的不同值和Fy

我收到以下错误:当我以这种方式调用它时:

opt = optimset('Display','iter','TolFun',1e-6);
guess = [1;1;1];
soln = fsolve(@prob5diff,guess,opt);

Error in line:
soln = fsolve(@prob5diff,guess,opt);

Caused by:
    Failure in initial user-supplied objective function evaluation. FSOLVE cannot      continue.

谢谢!

1 个答案:

答案 0 :(得分:2)

一个问题是你必须在prob5diff上调用fsolve,它需要一个矢量输入,因为你的猜测是一个矢量:

prob5diff(x)
    M = x(1);
    Fx = x(2);
    Fy = x(3);