Está en la página 1de 8

Guía 2

Análisis numérico para Bioingeniería.

Nota: Las soluciones son las que se desarrollaron en clases complementadas con las soluciones que poponen los profesores para las guías.
Lab. 6
Interpolación.

Funciones: polyfit, polyval, spline.

Lab. 7
Métodos de integración numérica.

Integrales vistas en el laboratorio: Trapecios y Simpsons.

Funciones para integrar en matlab: quad y quadl (existen otras pero vimos solo esas)

Sintaxis:

>> f=inline('exp(-x.^2)')

f=

Inline function:
f(x) = exp(-x.^2)

>> quad(f,-1,1)

ans =

1.4936
Lab. 8
Método de la Bisección.

Solución desarrollada en clases:


function y=bisec(f,a,b,tol)

x=a:0.01:b;
fx=feval(f,x);
plot(x,fx) ;%hasta aquí es solo saber donde mas o menos están las soluciones (graficamente)

fa=feval(f,a);
fb=feval(f,b);

if (fa*fb)>0;%Con esto aseguramos que es un método de convergencia garantizada… Entonces


%¿Con que orden puede usted asegurar la convergencia de las raíces de una función?
error_con_la_funcion
end

fxr=1;%pillería, Básicamente se coloca esto porque el ciclo while comienza evaluando la


condición (en este caso es fxr sea mayor que la tolerancia) si la condición es verdadera, el
programa realizará la rutina, si es falsa, se saldrá automáticamente y continuará con las
instrucciones de abajo que están fuera del ciclo. Entonces fxr=1 implica una condición
verdadera porque 1 es mayor que la tolerancia (con tol un numero pequeño) por lo tanto
aseguramos que el ciclo while por lo menos se realizará una vez.

while abs(fxr)>tol

xr=(a+b)/2; %calcula xr
fxr=feval(f,xr); %evalua f(xr)

if fxr==0 %analiza que el actual xr no sea raíz


y=xr;
end

fxaxr=fa*fxr;

if fxaxr<0 %por qué se puede analizar solo una condición y no es necesario


%analizar las 2? Es porque son estrictamente excluyentes una de la
%otra (se cumple una o la otra, puesto que esto se aseguró desde un
%comienzo al pedir que haya por lo menos un cruce con el eje… ¿con
%qué eje? averiguelo)
b=xr;
else
a=xr;
end

fa=feval(f,a);
fb=feval(f,b);
%se re evalúa la función en el nuevo intervalo y se vuelve al comienzo
% del ciclo while

end

y=xr %Cuando se termina con el ciclo, se entrega la solucion.


Método de Newton-Raphson.

Revisar diapositivas del curso, se dio una explicación detallada del algoritmo en clases.
Método de Newton.

Código propuesto como solución:

function raiz=newton2b(f,Df,x0,tol,maxit)
k=0;
raiz=x0;
corr=tol+1;
while (k<=maxit) & (norm(corr,inf)>tol)
k=k+1;
xk=raiz;
fxk=feval(f,xk);
Dfxk=feval(Df,xk);
if (rank(Dfxk)<length(Dfxk))
error('La diferencial de la funcion es singular.')
end
corr=Dfxk\fxk;
raiz=xk-corr;
end
if (norm(corr,inf)>tol)
error('Se excedio el numero maximo de iteraciones.')
end

Como el código fue arreglado para resolver un sistema de ecuaciones, se pueden ingresar
matrices de ecuaciones de la forma F(x)=0, en donde F es una matríz de funciones.

Ej lab8, 2b)

x 2 + xy + y 2 = 1
Sistema de ecuaciones: 
 y = x2

 x 2 + xy + y 2 − 1
Matríz de funciones F(x,y)=0  
 y − x 2 
 

Tambien se debe obtener una matríz de derivadas…

Sintaxis de lo anterior
clc
close all
clear all

%para despejar una función como la del 1° sistema del lab 8, 2c)-> a)
%se escribe lo siguiente en matlab
%>>syms x y
%>>solve('x^2+x*y+y^2=1',y)
% esto arrojará 2 soluciones las cuales se escribieron como en y1 e y2
%Esto no es obligación hacerlo, pero sirve para visualizar mas o menos
%donde se encuentran las soluciones
%Nota: Recordar que solve estrega las solucones suponiendo que x es un
solo
%elemento, entonces para poder trabajar con un x de forma de vector, es
%necesario que donde aparesca el signo "^" modificarlo y dejarlo como".^"

x=-2:0.01:2;

y1= - x/2 - (4 - 3*x.^2).^(1/2)/2;


y2= (4 - 3*x.^2).^(1/2)/2-x/2;
y3=x.^2;
plot(x,y2,x,y1,x,y3)

f1=inline('[x(1)^2+x(1)*x(2)+x(2)^2-1; x(2)-x(1)^2]'); %Fijarse que se


%hace un cambio de
%variable x=x(1) e
%y=x(2)
Df1=inline('[2*x(1)+x(2) x(1)+2*x(2); -2*x(1) 1]');

tol=1.e-12;
maxit=10;
x0=[1;1];
raiz1_1=newton2b(f1,Df1,x0,tol,maxit)
x0=[-1;1];
raiz1_2=newton2b(f1,Df1,x0,tol,maxit)

Se resolverá otro sistema:


Ej. Ejercicio 4 lab 8.

 y = e x − x
2
2

 ⇒ ecuacion ⇒ e x − x = arctan( x 2 )
Sistema:  y = arctan( x )
2

2
⇒ e x − x − arctan( x 2 ) = 0
Y luego se trabaja como se ha hecho anteriormente
%solucion ejercicio 4 letra a
%Para este sistema, se pueden igualar las ecuaciones
%quedando como se mostró anteriormente, y luego se sigue con la misma
sintaxis

x=-2:.01:3;
plot(x,exp(x-x.^2),x,atan(x.^2))
f=inline('exp(x-x.^2)-atan(x.^2)');
a=fzero(f,-.5)
b=fzero(f,1)
integ=quad(f,a,b)

Ahora bien, deben saber cuando conviene despejar de una u otra forma…
Pista: Cuando alguna de las funciones no sea inyectiva se resuelve como en el 1° ejemplo,
de lo contrario, se utiliza el 2° método.

Lab. 9
Resolución de ecuaciones diferenciales.

Pasos:
1) Se escribe la ecuación diferencial en un programa tipo function (haciendo el
respectivo cambio de variable)
2) Se resuelve utilizando uno de los tantos ode

Nota: ¿Qué diferencia hay entre usar una u otra función (ode)? Pregunta de certamen creo,
como dicen los pokemones “xD”.

Ej: Resolución del modelo del resorte.

Modelo:
mu "+ u '+
b ku = f
u (0) = u 0; u ' (0) =v0

(recordar la cantidad de condiciones iniciales que debe haber según el orden de la ecuación diferencial).
Reordenamiento del modelo, se despega la variable de mayor orden:


bu '−
ku +f
u" =
m …….(*)

Cambio de variable:

u1 =
u
u 2 =
u' =
u1'

R
e e
s
c
r
it
u
r
a d
e

b
u 2 −k
u 1 +
u" =
m


u1 ' 0
 =

u
 2 '−
k
 / m −

Desarrollo de la escritura matricial:

 u1'   u2 
u 2' =  − bu 2 − ku1 + f
   m 

Finalmente, se pasa a matlab:

Programa function:

function Z=F1a(t,Y)
m=1.2;
b=0.3;
k=15;
Z=[Y(2);(-k*Y(1)-b*Y(2))/m];

Programa rutero:

clc,close…..
…..

[t,Y]=ode45('F1a',[0 60],[1;0]);
plot(t,Y(:,1))

También podría gustarte