Borrar filtros
Borrar filtros

Error using eval with a differential equation

2 visualizaciones (últimos 30 días)
jose luis guillan suarez
jose luis guillan suarez el 19 de Mayo de 2018
Comentada: Walter Roberson el 21 de Mayo de 2018
when i do this i get this error:
>> t=0:0.01:10;
>> dsolve('D3x + 6*D2x + 11*Dx + 6*x=6*square(2*pi*t),D2x(0)=0,Dx(0)=0,x(0)=0')
ans =
exp(-t)*int(3*exp(x)*square(2*pi*x), x, 0, t, 'IgnoreSpecialCases', true, 'IgnoreAnalyticConstraints', true) + exp(-3*t)*int(3*exp(3*x)*square(2*pi*x), x, 0, t, 'IgnoreSpecialCases', true, 'IgnoreAnalyticConstraints', true) + exp(-2*t)*int(-6*exp(2*x)*square(2*pi*x), x, 0, t, 'IgnoreSpecialCases', true, 'IgnoreAnalyticConstraints', true)
>> y=eval(vectorize(ans))
Error using eval
Undefined function or variable 'x'.
what's happening? (i suppose is the square function because if i substitute it for sin(t) it works right.
  1 comentario
Stephen23
Stephen23 el 19 de Mayo de 2018
Editada: Stephen23 el 20 de Mayo de 2018
What do you hope to obtain by evaluating the output of dsolve? eval is not the right tool to use:
Is there a reason why you are using the very outdated char input to dsolve ?

Iniciar sesión para comentar.

Respuestas (2)

Walter Roberson
Walter Roberson el 20 de Mayo de 2018
Never eval() a symbolic expression. Symbolic expressions are not in the MATLAB language, just in something that is close to the MATLAB language.
But more immediately you need to
syms x
  5 comentarios
jose luis guillan suarez
jose luis guillan suarez el 20 de Mayo de 2018
and how i plot the equation?
Walter Roberson
Walter Roberson el 21 de Mayo de 2018
This is difficult to solve analytically, probably because the differentiation is not all that well defined right at the boundary conditions.
But you can get "good enough" this way:
syms t
Square(t) = piecewise(t - floor(t) < 1/2, 1, -1)
sol_plus = dsolve('D3x + 6*D2x + 11*Dx + 6*x=6*1,D2x(0)=0,Dx(0)=0,x(0)=0');
sol = Square(t) * sol_plus;
This works because solving for =6*-1 gives the negative of sol_plus.
Once you have the above you can plot with
T = 0:0.01:10;
solt = double( subs(sol, t, T) );
plot(T, solt);

Iniciar sesión para comentar.


jose luis guillan suarez
jose luis guillan suarez el 20 de Mayo de 2018
i'm using R2017a

Categorías

Más información sobre Function Creation en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by