필터 지우기
필터 지우기

Global variables to plot variables from ODE45 function

조회 수: 2 (최근 30일)
Marlon
Marlon 2023년 9월 7일
댓글: Torsten 2023년 9월 14일
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

답변 (1개)

Torsten
Torsten 2023년 9월 7일
편집: Torsten 2023년 9월 7일
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
Marlon
Marlon 2023년 9월 14일
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 2023년 9월 14일
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

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Annotations에 대해 자세히 알아보기

제품


릴리스

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by