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)
- Con bisección (sugerencia ver que fun(-2)>0 y fun(0)>0)
- ¿Cuanto tarda?
- ¿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)
- 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)
>> 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
______________________________________________________________________________
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
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