Borrar filtros
Borrar filtros

Simplifying output in Matlab

5 visualizaciones (últimos 30 días)
Aleem Andrew
Aleem Andrew el 7 de Nov. de 2021
Respondida: Jan el 7 de Nov. de 2021
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 comentarios
Star Strider
Star Strider el 7 de Nov. de 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
Jan el 7 de Nov. de 2021
The computation of smaller numbers is easier for human, but does not change the speed when performing the calculations on a computer.

Iniciar sesión para comentar.

Respuesta aceptada

Jan
Jan el 7 de Nov. de 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
Elapsed time is 0.777027 seconds.
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
Elapsed time is 0.706243 seconds.
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
Elapsed time is 0.207868 seconds.
There is a very sharp knee at the start. ODE45 struggles massively with it, because the stepsize controller drives crazy.

Más respuestas (0)

Categorías

Más información sobre Ordinary Differential Equations en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by