Simplifying output in Matlab
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
If you get an expression like this as output
syms x
fx = -(1.0*(1.82e+39*x^2 + 1.81e+32*x - 3.04e+39))/(6.35e+41*x + 4.27e+37)
How do you simplify the output and use smaller numbers, for example
fx = -(1.0*(1.82e+7*x^2 + 1.81*x - 3.04e+7))/(6.35e+9*x + 4.27e+5)
6 Commenti
Star Strider
il 7 Nov 2021
The integration proceeded very quickly, running it in Input argument for ode45 function type error (running R2021b), however the coefficient magnitudes are large, although not so different between them that this could be regarded as a ‘stiff’ system. It could be worth experimenting with ode15s or other stiff solvers to see if the speed increases significantly.
Jan
il 7 Nov 2021
The computation of smaller numbers is easier for human, but does not change the speed when performing the calculations on a computer.
Risposta accettata
Jan
il 7 Nov 2021
The magnitude of the variables does not matter. For a computer, the addition of pi + 1.23456789, pi + 1.0 and pi+ 1.23456789e37 takes exactly the same time. Therefore the simplification does not accelerate the evaluation. And by the way, this is very fast in Matlab at all:
x = rand;
tic;
for k = 1:1e9
fx = -(1.0*(1.82e+39*x^2 + 1.81e+32*x - 3.04e+39))/(6.35e+41*x + 4.27e+37);
end
toc
tic;
for k = 1:1e9
fx = -(1.0*(1.82e+7*x^2 + 1.81*x - 3.04e+7))/(6.35e+9*x + 4.27e+5);
end
toc
Both take about 0.4 seconds on my i5-mobile Matlab R2018b. A tiny acceleration is measurable, if you omit the meaningless multiplication by 1.0.
The slow computation has another cause: ODE45 is a solver for non-stiff equations. Use a stiff solver for this equation instead:
tic
tspan = [0 10];
x0 = 0;
[t,x] = ode23s(@(t,x) -(1.0*(6.84e+45*x^2 + 5.24e+32*x - 2.49e+42))/(2.47e+39*x + 7.12e+37), tspan, x0);
plot(t,x,'b');
toc
There is a very sharp knee at the start. ODE45 struggles massively with it, because the stepsize controller drives crazy.
0 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Ordinary Differential Equations in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!