matlab 为什么会出现“边界条件函数BCFUN应返回长度为5的列向量”的错误信息?

cbwuti44  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(147)
function Y6
solinit = bvpinit(linspace(0,1),[0;3;1;1],2);

sol = bvp4c(@ode, @bc, solinit);
y = sol.y;
time = sol.parameters*sol.x;
ut = -y(4,:);

figure(1);
plot(time,y([1 2],:)','-'); hold on;
plot(time, ut, 'k:');
axis([0 time(1,end) -1.5 3]);
text(1.3,2.5,'x_1(t)');
text(1.3,.9,'x_2(t)');
text(1.3,-.5,'u(t)');
xlabel('time');
ylabel('states');
title('Numerical solution');
hold off;

% -------------------------------------------------------------------------
% ODE's of augmented states
function dydt = ode(t,y,T)
dydt = T*[2*y(2);4*y(4);0;-2*y(3)];

% -------------------------------------------------------------------------
% boundary conditions: x1(0)=11;p2(0)=2; x2(tf)=3; 3*p1(tf)+p2(2)^2=0
function res = bc(ya,yb,T)
res = [ ya(1) - 11; ya(4); yb(2) - 3; 3*yb(3)+yb(4)^2];

我不知道为什么边界条件函数BCFUN应该返回长度为5的列向量,错误消息来了。你能给我解释一下吗?非常感谢

vatpfxk5

vatpfxk51#

未知的参数或常量,这里是T,也算作组件。因此,您的州总共有4+1=5个组件,需要设置5个边界条件。
有时这是显而易见的,例如,在以特征值为参数的Sturm-Liouville特征值计算中,您想要避免零解,因此要求,例如,平方积分的值为1。
在以飞行时间为参数的弹道射击中,将大炮和目标的位置固定为明显的边界条件,选择什么作为额外的BC并不是那么明显,但可能的方法是固定初始速度或初始Angular 。

相关问题