Manual Matlab

Page 98

Aprenda Matlab 7.0 como si estuviera en Primero

página 90

32 successful steps 0 failed attempts 58 function evaluations 1 partial derivatives 9 LU decompositions 51 solutions of linear systems

Una tercera y más sofisticada forma de llamar a los integradores de MATLAB podría ser la que se muestra a continuación. Aunque se trata de un ejemplo muy sencillo, se han incluido en él muchas de las características más avanzadas de los integradores de MATLAB, de aplicación en casos mucho más complicados. Los lectores interesados en las técnicas de simulación deben estudiar con atención el programa que sigue y los comentarios que se acompañan. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.

% fichero tiroparMain3.m function tiroparMain3 % Intervalo de integracion t0=0; tf=12; npoints=51; tspan=[t0:(tf-t0)/(npoints-1):tf]; % condiciones iniciales y0=[100*cos(pi/6),100*sin(pi/6),0,-10]'; % elementos ~=0 en la Jacobiana de f() en la ec. dif. M(t,y)*yp=f(t,y) Jp=sparse([1 1 0 0; 1 1 0 0; 1 0 0 0; 0 1 0 0]); options = odeset('RelTol',1e-06, 'AbsTol',1e-06, 'Mass',@tiropar3Masa, ... 'MStateDep','none', 'OutputFcn',@tiropar3Salida, 'OutputSel',[3,4], ... 'JPattern',Jp, 'Vectorized','on', 'Events',@tiropar3Eventos, 'Stats','on'); sol=ode15s(@tiropar3,tspan,y0,options,1,0.001); % forma alternativa de llamar al integrador % [T,Y, tEv, yEv, ev]=ode15s(@tiropar3,tspan,y0,options,1,0.001); % resultados del cálculo de eventos % sol.xe tiempos en los que se ha producido el evento disp('Tiempos de corte con y(4)=0: '), disp(num2str(sol.xe)); % sol.ye vector de estado en los instantes del evento disp('Valores del vector de estado en los eventos: '), disp(num2str(sol.ye));; % sol.ie n´umero del evento que se ha producido disp('Eventos que se han producido: '), disp(num2str(sol.ie)); T=tspan(find(tspan<sol.xe(2))); % la funcion deval calcula la solucion en los tiempos deseados Y=deval(sol,T); % forma alternativa de llamar al integrador disp('Ya he terminado!') % calculo de la matriz de masas function M=tiropar3Masa(t,m,c) M=diag([m,m,1,1]); % función para controlar la salida de resultados function status=tiropar3Salida(t,y,flag,m,c) % se llama a tiropar3Salida() en cada punto de salida y % esta función se encarga de llamar a odeplot status=0; switch flag case 'init' disp(['Entrando en salidaTiropar3 por primera vez']); odeplot(t,y,'init'); case 'done' disp(['Entrando en salidaTiropar3 por última vez']); odeplot([],[],'done'); case '' % puede haber resultados para más de un tiempo de salida for i=1:length(t) disp(['Entrando en salidaTiropar4 para t=',num2str(t(i))]); odeplot(t(i),y(:,i)); end end


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.