Solve nonlinear equation using ODE45 function with different initial conditions

1 回表示 (過去 30 日間)
Mhmmd Sjj
Mhmmd Sjj 2020 年 12 月 7 日
編集済み: Stephan 2020 年 12 月 7 日
I have written a function plus a script to solve a non linear single degree of freedom pendalum system.I don't know how to solve the nonlinear equation with ODE45 function for different values of initial conditions.How could I do that?.I have used a for loop but it gives me just the state vector of the last initial condtion.I want the state vector for all initial condtions.Here are my function and the script:
function xDot = of(x,g,L,u)
xDot = zeros(2,1);
xDot(1) = x(2);
xDot(2) = ((g./L)*sin(x(1)))+u;
end
%% Main Script
clc;clear;close all;
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.001;
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

回答 (1 件)

Stephan
Stephan 2020 年 12 月 7 日
編集済み: Stephan 2020 年 12 月 7 日
Corrected:
%% Main Script
L = 1;
g = 9.81;
h = 0.25;
t = [0 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.001;
Q = eye(2);
K = lqr(A,B,Q,R);
u = @(x)-K*(x);
for ii = 1:size(Ics, 1)
[t, X(:,:,ii)] = ode45(@(t, x)of(t,x, g, L, u), t, Ics(ii,:));
end
function xDot = of(~,x,g,L,u)
xDot = zeros(2,1);
xDot(1) = x(2);
xDot(2) = ((g./L)*sin(x(1)))+u(x);
end
X is saved as a 3D array - To show the results for the single IC's use:
>> plot(t,X(:,:,1)) % first set of IC
>> plot(t,X(:,:,2)) % second set of IC

カテゴリ

Help Center および File ExchangeOrdinary Differential Equations についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by