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的列向量,错误消息来了。你能给我解释一下吗?非常感谢
1条答案
按热度按时间vatpfxk51#
未知的参数或常量,这里是
T
,也算作组件。因此,您的州总共有4+1=5个组件,需要设置5个边界条件。有时这是显而易见的,例如,在以特征值为参数的Sturm-Liouville特征值计算中,您想要避免零解,因此要求,例如,平方积分的值为1。
在以飞行时间为参数的弹道射击中,将大炮和目标的位置固定为明显的边界条件,选择什么作为额外的BC并不是那么明显,但可能的方法是固定初始速度或初始Angular 。