Filter löschen
Filter löschen

Global variables to plot variables from ODE45 function

2 Ansichten (letzte 30 Tage)
Marlon
Marlon am 7 Sep. 2023
Kommentiert: Torsten am 14 Sep. 2023
Hello,
the following code stands representative for a bigger code, in which i want to plot some variables over time that are calculated in the odefunction but are gonna be passed to the ODE solver. Is there any way to set these variables as global variables, so that I can plot them outside of the ode Function?
Like in this case to plot the variable "a", which is calculatet inside the function.
tspan= 0:.01:10;
x=1;
[t,x] = ode45(@(t,x) odefcn(x,t),tspan,x);
figure;
plot(t,a);
function [dxdt] = odefcn(x,t)
a=cos(t)*x;
dxdt = x*a;
end

Antworten (1)

Torsten
Torsten am 7 Sep. 2023
Bearbeitet: Torsten am 7 Sep. 2023
t < pi/2 is necessary:
syms t x(t)
eqn = diff(x,t) == x^2*cos(t);
conds = x(0)==1;
dsolve(eqn,conds)
ans = 
tspan= 0:.01:10;
x=1;
[t,x] = ode45(@(t,x) odefcn(x,t),tspan,x);
Warning: Failure at t=1.562403e+00. Unable to meet integration tolerances without reducing the step size below the smallest value allowed (3.552714e-15) at time t.
a = zeros(size(t));
for i = 1:numel(t)
[~,a(i)] = odefcn(x(i),t(i));
end
figure;
plot(t,a);
function [dxdt,a] = odefcn(x,t)
a=cos(t)*x;
dxdt = x*a;
end
  6 Kommentare
Marlon
Marlon am 14 Sep. 2023
Thanks for the quick answer, but when I try to plot the first row of vrv vs time
I get following error:
Error using plot
Vectors must be the same length.
Error in Zustandsraum_lin (line 62)
plot(t,vrv(:,1))
Torsten
Torsten am 14 Sep. 2023
Change the code according to your needs:
t = 0:1:100;
x = [t.',t.^2',t.^3']
a = zeros(3,numel(t));
for i = 1:numel(t)
[~,a(:,i)] = odefcn(x(i,:),t(i));
end
plot(t,a(2,:))
function [dxdt,vrv] = odefcn(x,t)
rv = [1;1;1];
delta = 0;
vrv = [cos(x(3)+delta) sin(x(3)+delta) 0;
-sin(x(3)+delta) cos(x(3)+delta) 0;
0 0 1]*rv;
end

Melden Sie sich an, um zu kommentieren.

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by