我写了一个脚本来计算和求解一个简单的倒立摆系统。现在假设我想用不同初始条件值的 ODE45 函数求解系统的非线性动力学方程。我如何使用 for 循环来求解状态初始条件的不同值的 X 向量?我写了一个 for 循环来做到这一点,但我无法得到我想要的答案。请帮助我。这是我的函数和 mfile,如下所示:
function xDot = of(x,g,L,u)
xDot = zeros(2,1);
xDot(1) = x(2);
xDot(2) = ((g./L)*sin(x(1)))+u;
end
这是我的主要代码:
clc;
clear;close all;
%% Solve The Nonlinear Equation
L = 1;
g = 9.81;
h = 0.25;
t = [0:h:5];
A = [0 1;(g/L) 0];
B =[0 1]';
Ics = [pi,0;pi/2 0;pi/5 0;0.001 0;pi 0.5;pi/2 0.5;pi/5 0.5;0.001 0.5];
[Poles,~] = eig(A); %Poles Of Closed LOop System
R = 0.01;
Q = eye(2);
K = lqr(A,B,Q,R);
u = @(x)-K*(x);
for i=1:size(Ics,1)
[~,X] = ode45(@(t,x)of(x,g,L,u(x)),t,Ics(i,:));
end
另请注意,我想要 X 向量的第一列,它是每次迭代中摆的角位移,因为 ODE45 中 X 向量的第二列始终是主状态向量的导数。