Aide matlab

mansour -  
 victor -
Bonjour,
Pouvez-vous svp, me dire pourquoi le second cas ne marche
dans le petit programme matlab ci-joint.

Merci. ---------------

syms t x
syms x0 v0
syms m c k

fprintf(' -------: 1st case --- \n ')
equ = '2*D2x + 6*Dx + 17*x = 0';
ic1 = 'x(0) = 2';
ic2 = 'Dx(0) = 5';
x1 = dsolve(equ,ic1,ic2)

fprintf('\n')
fprintf(' -------: 2nd case --- \n ')
syms t x
syms x0 v0
syms m c k
equ = 'm*D2x + c*Dx + k*x = 0';
ic1 = 'x(0) = x0';
ic2 = 'Dx(0) = v0';

equ = subs(equ,{m,c,k},{2,6,17})
ic1 = subs(ic1,{x0},{2})
ic2 = subs(ic2,{v0},{5})
x2 = dsolve(equ,ic1,ic2)


A voir également:

1 réponse

victor
 
Les arguments à passer à dsolve sont des strings, non pas des syms.
Tu peux résoudre l'équation et faire la substitution ensuite, ce qui n'est pas la meilleure solution je pense
equ = 'm*D2x + c*Dx + k*x = 0';
ic1 = 'x(0) = x0';
ic2 = 'Dx(0) = v0';
x2 = dsolve(equ,ic1,ic2);
syms m c k x0 v0;
x2=subs(x2,{m,c,k,x0,v0},{2,6,17,2,5});
Sinon, tu passes les paramètres directement en argument
ic1=@(x0)(['x(0)=',num2str(x0)]);
ic2=@(v0)(['Dx(0)=',num2str(v0)]);
equ=@(m,c,k)([num2str(m),'*D2x+',num2str(c),'*Dx+',num2str(k),'*x=0']);
x2=dsolve(equ(2,6,17),ic1(2),ic2(5));
Dans tous les cas, quand tu as une question, demande sur un site ou il y a des gens compétents fin supprimée.
0