我使用以下代码为具有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.
谢谢!
答案 0 :(得分:2)
一个问题是你必须在prob5diff上调用fsolve,它需要一个矢量输入,因为你的猜测是一个矢量:
prob5diff(x)
M = x(1);
Fx = x(2);
Fy = x(3);