I am having trouble multiplying my main ode function with an external function NS which is supposed to be multiplied on the RHS. Thanks for the great help.
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
tspan = [0 20];
y0 = [0 0.01];
[z,y] = ode45(@odefcn, tspan, y0);
plot(z,y(:,1),'-o',z,y(:,2),'-.')
function dydt = odefcn(z,y)
dydt1 = y(2);
dydt2 = NS*z.*y(1);
dydt=[dydt1;dydt2];
end
function M = NS(z)
z = [2 3 5 7 10 15 20 ];
r =[3.5 3.7 4 6 7.2 8 9];
n=length(z);
% Calculation of differentiation from the above datas
for i=1:n-1
M=zeros();
M(i)=(r(i+1)-r(i))./(z(i+1)-z(i));
end
end
3 commentaires
Réponse acceptée
Torsten
le 30 Nov 2017
zr = [2 3 5 7 10 15 20];
r = [3.5 3.7 4 6 7.2 8 9];
y0 = [0 ; 0.01];
zsol = [];
y1sol = [];
y2sol = [];
for i=1:numel(r)-1
zspan = [zr(i) zr(i+1)];
NS = (r(i+1)-r(i))/(zr(i+1)-zr(i));
[z,y] = ode45(@(z,y)odefcn(z,y,NS), zspan, y0);
y0 = [y(end,1) ; y(end,2)];
zsol = [zsol;z];
y1sol = [y1sol;y(:,1)];
y2sol = [y2sol;y(:,2)];
end
plot(zsol,y1sol,zsol,y2sol)
function dydt = odefcn(z,y,NS)
dydt1 = y(2);
dydt2 = NS*z*y(1);
dydt=[dydt1;dydt2];
end
Best wishes
Torsten.
10 commentaires
Torsten
le 1 Déc 2017
Using ode15s instead of ode45 might reduce the computation time.
Best wishes
Torsten.
Plus de réponses (0)
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!