Azzera filtri
Azzera filtri

Share data between two functions

5 visualizzazioni (ultimi 30 giorni)
Califfo
Califfo il 27 Mag 2020
Commentato: Califfo il 28 Mag 2020
Hi,
I need to update and share a variable between two functions to solve a system of ODEs. These functions are, respectively, odefun - the function that ode45 accepts as input - and myOutputFcn - that is the custom output function that ode45 accepts as option.
function dsol_dt = odefun(t, sol, hyspar, L, M)
dsol_dt = zeros(2,1);
u = sol(1,1);
y = sol(2,1);
fri = hyspar.fri;
ud = y;
yd = - L(y,fri) / M ;
dsol_dt = [ud; yd];
end
function status = myOutputFcn(t,sol,flag,hyspar)
switch flag
case 'init'
case ''
hyspar.fri = RestoringForce(sol(1),sol(2),ecc,hyspar);
case 'done'
assignin('base','hyspar.fri',fri);
end
status = 0;
end
I would share and update the variable that is hyspar.fri (fri). When it updates in myOutputFcn through the function RestoringForce, I am only changing the local copy. So, in odefun will not be taken the updated value of the variable fri.
I read the main techniques to share variables between workspaces
but I didn't find any examples that suit me, I guess...
I would like to specify that I can't call RestoringForce in odefun for several different reasons.
Kind regards
Califfo

Risposte (1)

darova
darova il 27 Mag 2020
What abuo this?
function [hyspar1,status] = myOutputFcn(t,sol,flag,hyspar)
switch flag
case 'init'
case ''
hyspar.fri = RestoringForce(sol(1),sol(2),ecc,hyspar);
case 'done'
hyspar1 = hyspar;
hyspar1.fri = fri;
end
status = 0;
end
  1 Commento
Califfo
Califfo il 28 Mag 2020
Thank you darova. However, I must update and share the variable after each integration step. Additionally, the variable hyspar.fri(fri) still does not update even if you add the output hyspar to the function myOutputFcn

Accedi per commentare.

Prodotti


Release

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by