0
我试图解决一个系统的边界值问题q' = f(q(t), a(t))
与输入a
在Matlab中使用bvp4c。其中q = [q1, q2, q1_dot, q2_dot]'
用bvp4c Matlab求解边界值
我的Matlab代码无法正常工作。有谁知道如何解决这个问题?
img: System Equation of the One Pendulum
a
是一个输入功能。
初始状态:q1(0) = pi, q2(0) = 0, q1_dot(0) = 0, q2_dot(0) = 0.
结束状态:q1(te) = 0, q2(te) = 0, q1_dot(te) = 0, q2_dot(te) = 0.
输入初始状态:a(0) = 0,
和结束状态:a(te) = 0
。
我总共有10个边界。 one_pendulum_bc可以只有5个,而不是更多和更少。
function one_pendulum
options = []; % place holder
solinit = bvpinit(linspace(0,1,1000),[pi, 0, 0, 0],0);
sol = bvp4c(@one_pendulum_ode,@one_pendulum_bc,solinit,options);
t = sol.x;
plot(t, sol.y(1,:))
figure(2)
plot(t, sol.y(2,:))
figure(3)
plot(t, sol.y(3,:))
figure(4)
plot(t, sol.y(4,:))
% --------------------------------------------------------------------------
function dydx = one_pendulum_ode(x,y,a)
% Parameter of the One-Pendulum
m1 = 0.3583; % weight of the pendulum [kg]
J1 = 0.03799; % moment of inertia [Nms^2]
a1 = 0.43; % center of gravity [m]
d1 = 0.006588; % coefficient of friction [Nms]
g = 9.81; % gravity [m/s^2]
dydx = [ y(3)
y(4)
(a*a1*m1*cos(y(1)) + a1*g*m1*sin(y(1)) - d1*y(3))/(J1 + a1^2 *m1)
a ];
% --------------------------------------------------------------------------
function res = one_pendulum_bc(ya,yb,a)
res = [ya(1) - pi
ya(2)
ya(4)
yb(1)
yb(3)];
img: The result should look like this
请对您的问题进行更具体的描述:哪些方法无法正常工作?输出是不是你所期望的?代码是否会抛出错误?如果是这样,什么命令会导致它,什么是错误信息? –
@LeanderMoesinger对不起我的英文。我没有收到任何错误消息,这只是我不期望的输出。输出是错误的。 – user3730973
二阶二阶微分方程只需要四个边界条件是唯一的;超过四个会使问题超出预期。你超出了这个问题。 – TroyHaskin