MATLAB Troubleshooting ODE45 Matlab Subfunction: Save Matrix Values in Main Code

  • Thread starter Thread starter hasek
  • Start date Start date
  • Tags Tags
    Matlab Ode45
AI Thread Summary
The discussion revolves around issues with saving values from the ODE45 function in MATLAB. The user is trying to save the values of two matrices, vsd and vsq, generated within the ODE subfunction. They initially faced challenges because the index for saving these values resets with each function call. To address this, they attempted to create a persistent index using file operations, but are concerned about the potential impact on simulation time and accuracy.Additionally, another user inquired about saving and plotting multiple outputs from a loop using ODE45. They are looking for a method to store the results from each iteration of the loop and display them in separate plots. The conversation highlights the need for efficient data handling within ODE functions and the importance of maintaining performance while achieving the desired output.
hasek
Messages
3
Reaction score
0
I'm stuck with a problem with the subfunction ODE45 of Matlab:

I need to save two matrixes' values created inside the ODE subfunction.
I can't create an index inside the subfunction because I have to define it at the start so at every round it returns to zero.

This is what I've done in the main:

t0 = 0;
tf = 450;
y0 = [0 0 0 0 0 0];
options = odeset('RelTol', 1e-6);
[t, y] = ode45('ac_im3_IPM_prova1', [t0,tf] , y0, options);

and this is the subfunction:

function yp = ac_im3_IPM_prova1(t, y);
.
.
.
vsd = 2/3 * (vsa * cos(ttg) + vsb * cos(ttg - 2*pi/3) + vsc * cos(ttg - 4*pi/3));
vsq = -2/3 * (vsa * sin(ttg) + vsb * sin(ttg - 2*pi/3) + vsc * sin(ttg - 4*pi/3));
.
.
.
yp(1) = (vsd - Rs*isd + (wge)*fsq);
yp(2) = (vsq - Rs*isq - (wge)*fsd);
yp(3) = ( - Rr*ird + (wge-p*wm)*frq);
yp(4) = ( - Rr*irq - (wge-p*wm)*frd);
yp(5) = (tm - (TL + KD*wm)) / J;
yp(6) = wge;

yp = yp';

I'd like to save vsd and vsq values of every round in a matrix or in someway!
 
Physics news on Phys.org
You could always write you own one-line (fixed step-size) RK4 code.
 
Ok, now I created an index inside the subfunction in this way:

i=0;
if t ~= 0
load('i');
end
i=i+1;
save('i');

Now there is another problem:

I'm wondering if this procedure could affects the simulation time returning me wrong values
 
Hey i need help in ODE45 too

i have the following code

>>for i=1:5
>>tspan=[0 30]
>>h0=Hv(i)
>>[t,h]=ode45['a ODEfunction',tspan,h0]
>>plot(t,h)
>>end

in this loop how can i save 5 values of [t,h],
as t, h produces each loop run like follows
t=
1
2
3
4
.
.
.
h=
5
6
7
8..

also i need to plot all of them n i could view the 5 graphs them..pls help..
 
Back
Top