Tuesday, October 24, 2017

19ta Clase Métodos Numéricos

Ejercicios

1)
Descargar de eva.uca.edu.ar en el tema 3: fun.m (ponerla en la carpeta de MATLAB)
Tratar de resolver fun(X)=0
(hallar X/fun(X)=0 +- 10^-12)

  1. Con bisección (sugerencia ver que fun(-2)>0 y fun(0)>0)
  2. ¿Cuanto tarda?
  3. ¿Se puede usar N-R?

2)
Buscar alguna solucion de

 |    2Z-XY^2=2XZ-3X^2
<|    XY^3-2ZY=X^2-1
 |    4Z^2X=Y^4*cos(2Z-3X)

1)
  1. Elapsed time is 129.414639 seconds.
>> sol_ap=0;
>> i=0;
>> while (abs(fun(sol_ap))>10^-12)
i=i+1;
sol_ap=biseca(@fun,-2,0,i);
end
>> fun(sol_ap)

ans =

 1.6920e-013

>> i

i =

    39

>> sol_ap

sol_ap =

  -1.9625
b)
No se puede usar la técnica de Newton y Raphson por ser imposible calcular la derivada. Basta con ver el codigo.

2)
IMG_3011(1).jpg

>> H=@(V) [2*V(3)-V(1).*V(2).^2-2*V(1)*V(3)+3*V(1).^2;V(1)*V(2)^3-2*V(3)*V(2)-V(1)^2+1;4*V(3)^2*V(1)-V(2)^4*cos(2*V(3)-3*V(1))];
Cualquiera que cargue H en matlab se dará cuenta lo facil que es cometer un error, confundir V(1) con V(2) o lo que sea.

Cargar DH sería un trabajo eterno.


Si uno se da la maña y lo hace deberia obtener:

>> sol=N_R(H,DH,[1;1;1],12)

    1.000
1.7321
1.5000


Ventajas y desventajas de N-R

Cuando converge suele hacerlo rápido
Se generaliza facil a varias variables
Puede usarse para hallar ceros aunque no haya cambio de signo
No siempre converge
No siempre es cómodo hallar DH






















Método de la secante
Sin título.png
______________________________________________________________________________
function x=secante(h,x0,x1,N)
x=x1;
xant=x0;
for k=1:N
temp=x-h(x).*(xant-x)./(h(xant)-h(x));
xant=x;
x=temp;
end
______________________________________________________________________________

>> sol=secante(@fun,-2,-1.9,8)

sol =

  NaN

>>
Cuando le doy demaciados pasos, puedo tener este problema. Es porque encontró la solución exacta y luego dividió por 0.



Para aproximar DH podemos pensar cada uno de sus terminos como por (H(X+e)-H(X-e))/2e con e muy chico.
______________________________________________________________________________

Paréntesis:

Nargin: cantidad de variables definidas en la entrada, recibidas realmente.
Por ejemplo la funcion JACOBS_APROX acepta tres terminos, si yo omito el último número, Nargin vale 2, si lo completo vale 3.

Nargout: cantidad de terminos de salida.
______________________________________________________________________________

>> F=@(X) exp(X^2)-2*X^5+X+1;
>> JACOB_APROX(F,2)

ans =

  59.3926

>> df=@(X) exp(X.^2).*2.*X-10.*X.^4+1;
>> df(2)

ans =

  59.3926

>>

Comprobado que da lo mismo (muy similar)

>> DH=@(X) JACOB_APROX(H,X);
>> sol=N_R(H,DH,[1;2;1],12)

sol =

    1.0000
    1.7321
    1.5000

>>


Para simplificar estos dos pasos anteriores en uno solo, creamos NR multi:

>> sol=NR_MULTI(H,[1;2;1],12)

sol =

    1.0000
    1.7321
    1.5000

>>
______________________________________________________________________________

function sol=NR_MULTI(H,x0,n,epsi)
if nargin==3
    epsi=sqrt(eps(1+norm(x0)));
end
sol=x0;
for k=1:n
    sol=sol-inv(JACOB_APROX(H,sol,epsi))*H(sol);
end
______________________________________________________________________________

No comments:

Post a Comment