MAtLab Con Ecuaciones Diferenciales
MAtLab Con Ecuaciones Diferenciales
MAtLab Con Ecuaciones Diferenciales
Prcticas de Matlab
Prctica 3
1.
1.1.
Bucles
Los bucles son una herramienta fundamental en programacin. Veamos cmo se utilizan en Matlab.
1.1.1.
Bucles simples
1.1.2.
Bucles condicionales
<"
function n=Epsilon(eps)
n=1;
h=2^(-n);
while h>=eps
n=n+1;
h=2^(-n);
end
Ejercicio 3 Usando el comando while escribir un programa para calcular n!.
Ejercicio para casa: Escribir un programa (usando el comando while) que calcule
la parte entera de un nmero x 0:
1.2.
Los valores de una variable, ya sea un escalar, un vector, una funcin o una matriz
pueden introducirse a travs del teclado usando el comando input. Por ejemplo
x = input(`Introduzca valores de x entre corchetes:`);
solicita la introduccin de un vector.
Si terminamos con ; despus de introducir los valores de x no los escribir en pantalla,
sin embargo si no ponemos ; despus de introducir los valores lo volver a imprimir en
pantalla.
Exhibicin de texto y valores
El comando disp permite escribir texto encerrado entre apstrofes y el valor actual
de una variable. Por ejemplo, si en el progama escribimos:
2
a=2;
disp(a);
disp(unidades);
obtenemos en pantalla
2
unidades
Si queremos tener un mayor control en la salida de datos o de texto , es decir, darles
con un formato determinado utilizaremos el comando fprintf. La forma general de este
formato es:
f printf (f ormato; matrices):
Dentro del formato se utilizan los especicadores %e, %f, %g, %d, %s para especicar
donde se escribirn los valores de la matriz:
%e: notacin exponencial.
%f: punto jo o decimal.
%d: variables enteras.
%g: formato %e, %d o %f, el que sea ms corto.
%s: cadenas de caracteres.
Por ejemplo:
a=2;
fprintf(El valor obtenido es nn %g unidades nn, a)
La salida correspondiente es:
El valor obtenido es
2 unidades
Nota: nn nos indica retorno de carro.
Los especicadores tambin pueden contener informacin sobre el nmero de posiciones decimales que aparecern y el nmero de posiciones que se destinarn al valor
correspondiente. Es decir, si ponemos %4.1f el valor correspondiente aparecer usando
cuatro dgitos, uno de los cuales es decimal.
Ejemplo. Calcular el valor de n 2 N ms pequeo tal que 2 n < ". El valor de epsilon
se solicitar al usuario. Al nal del programa se imprimir el valor de n con formato de
nmros enteros con algn comentario explicativo.
function n=Epsilon
eps=input(Introduzca el valor de epsilon:);
n=1;
h=2^(-n);
3
while h>=eps
n=n+1;
h=2^(-n);
end
fprintf(El valor de n es %d,n);
Si ejecutamos, por ejemplo, el comando
Epsilon
el valor de n se imprimir dos veces:
El valor de n es 10
ans =
10
En cambio, si escribimos
Epsilon;
slo se imprimir una vez.
1.3.
Ejercicio 4 Modicar el programa del ejercicio 3 de forme que si el nmero de argumentos de entrada es menor que 1 se solicite esta informacin mediante el comando input.
Adems, utilizar el comando fprintf para imprimir la siguiente frase: El factorial de n
es f . Imprimir n y f en formato de enteros. Poner al nal un salto de lnea.
1.4.
rdenes de ruptura
2.
2.1.
(1)
h T]
El resultado de los clculos son los vectores t e y, que contienen los momentos del
tiempo
t = [t (1) t (2) ::: t (N ) t (N + 1)]
= [t0 t0 + h t0 + 2h ::: T h T ]
y los valores aproximados de la solucin
y = [y (1) y (2) ::: y (N ) y (N + 1)]
= [y0 y1 ::: yN ] :
6
Es importante tener en cuenta que la numeracin del ndice i no es la misma que en las
frmulas (1). Esto es debido a que en Matlab no podemos utilizar el subndice i = 0 (los
vectores empiezan siempre con i = 1).
El cdigo del programa quedara de la siguiente manera:
function [t,y]=Euler(f,N,t0,T,y0)
g=inline(f,t,y);
h=(T-t0)/N;
t=t0:h:T;
y(1)=y0;
for i=1:N
y(i+1)=y(i)+h*g(t(i),y(i));
end
Ejercicio 5 Escribir el programa en un archivo *.m. Dado el problema
dy
= y + t; y (0) = 2; t 2 [0; 4];
dt
probar que funciona con N = 1000:
Abrir un script y efectuar los siguientes pasos:
1. Usando el programa con N = 1000 calcular el valor aproximado de la solucin en
t = 4: Mostrar el resultado con el comando f printf , indicando en la frase qu N se
utiliza. Utilizar el retorno de carro al nal.
2. Repetir los mismos pasos con N = 2000:
3. Resolver el problema con el comando dsolve y calcular el valor exacto de la solucin
en t = 4: Mostrar el resultado con el comando f printf:
4. Calcular el error de la solucin en ambos casos. Mostrar ambos resultados con el
comando f printf:
5. Calcular el cociente de los dos errores y ver si al doblar el nmero de intervalos el
error se reduce a la mitad, aproximadamente. Mostrar el cociente con el comando
f printf:
Ejercicio 6 Escribir un programa que resuelva una ecuacin diferencial para varias condiciones iniciales. Efectuar los siguientes pasos:
1. Las variables de entrada del programa son: f; N; t0 ; T; y0 ; donde y0 = [y01 ::::y0m ] es
un vector de condiciones iniciales.
2. Detectar en el programa el tamao del vector m con el comando length;
7
3) ; y (0) = y0 ; t 2 [t0 ; T ];
1) (y + 2) (y
T; 3;5
4:
3. Modicar el archivo 5 de forma que se obtenga tambin el grco de las dos soluciones aproximadas, una en azul y otra con cruces rojas.
4. Modicar el programa de Euler de forma que si el nmero de variables de entrada que
introduce el usuario es inferior a 5, el programa solicite los datos (usar el comando
input).