b)
>> F=@(V) 8 + V(1) - 2*V(2).^2 + V(2).*V(3) - V(1).*V(2).*V(3) - V(1).^2.*V(3).^3+V(1).*2;
>> DF=@(V) JACOB_APROX(F,V)';
>> pc=NR_MULTI(DF,[1;-1;1],10);
>> DF(pc)
ans =
-4.1589
-0.1374
-5.9782
>> pc=NR_MULTI(DF,[1;-1;1],20);
>> DF(pc)
ans =
8.8966
0.1357
-8.9916
>> pc=NR_MULTI(DF,[1;-1;1],30);
>> DF(pc)
ans =
1.0e-005 *
0.1262
0.1362
0.1197
(RESPUESTA)
>> pc
pc =
0.1743
0.3859
1.8696
>>
otro parcial: ej 2 t 1
armar A=[exp.... modelo del problema]
X=[...]';
Y=[...]';
cf= pinv(A)*Y;
Yx=@ (X) cf(1)*exp(....)
es una de dos ecuaciones y dos incognitas
>>H=@(V) [integra (Yx,V(1),V(2)
<<sol=NR_multi(H,[0................................4;0.45],10]
Monday, October 30, 2017
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)
- 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
______________________________________________________________________________
Subscribe to:
Posts (Atom)
