簡體   English   中英

對於不同的初始條件值,使用 matlab 中的 ODE45 function 求解非線性方程

[英]Solve a nonlinear equation using ODE45 function in matlab for different values of initial conditions

我已經編寫了一個腳本來計算和求解一個簡單的倒立擺系統。現在假設我想用不同初始條件值的 ODE45 function 求解系統的非線性動力學方程。如何使用 for 循環求解 state不同初始條件值的 X 向量?我寫了一個 for 循環來做到這一點,但我無法得到我想要的答案。請幫助我。這是我的 function 和 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 向量的第一列,即每次迭代中擺的 angular 位移,因為 ODE45 中 X 向量的第二列始終是主 state 向量的導數。

您可以將不同初始條件的所有積分輸出存儲在 3D 陣列中。

Xout的行數將等於您要評估解決方案的時間步數,因此numel(t) 列數是狀態數,然后第三維將是您要測試的初始條件數。

Xout = zeros(numel(t), size(Ics, 2), size(Ics, 1)); % initialize the 3D array 
for k = 1:size(Ics, 1)
    [~, Xout(:, :, k)] = ode45(@(t, x)of(x, g, L, u(x)), t, Ics(k, :));
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM