Está en la página 1de 2

function [alpha2,alpha3] =

newtonrhapace(Roa,Rab,Rbc,theta1,theta2,theta3,omega1,omega2,omega3,al
pha1,alpha20,alpha30)
%Parámetros del método de Newton-Rhapson
tol = 0.00001;
nitermax = 20;

% Declaración de las variables incógnitas


syms alpha2
syms alpha3

% Declaración de las funciones no-lineales que componen el sistema


f1name = @(alpha2,alpha3)
alpha1*Roa*sin(theta1)+alpha2*Rab*sin(theta2)+alpha3*Rbc*sin(theta3)..
.

+omega1*omega1*Roa*cos(theta1)+omega2*omega2*Rab*cos(theta2)+omega3*om
ega3*Rbc*cos(theta3);
f2name = @(alpha2,alpha3) -alpha1*Roa*cos(theta1)-
alpha2*Rab*cos(theta2)-alpha3*Rbc*cos(theta3)...

+omega1*omega1*Roa*sin(theta1)+omega2*omega2*Rab*sin(theta2)+omega3*om
ega3*Rbc*sin(theta3);

% Declaración del Jacobiano de las funciones no-lineales que componen


el sistema
gradf1 = [diff(f1name,alpha2) diff(f1name,alpha3)] ;
gradf2 = [diff(f2name,alpha2) diff(f2name,alpha3)] ;

%Primera estimación con base en los argumentos ingresados


w = [alpha20, alpha30];
v = w';
alpha2 = alpha20;
alpha3 = alpha30;

fv1 = f1name(alpha2,alpha3);
fv2 = f2name(alpha2,alpha3);
fxo = [fv1;fv2];

f1pv = eval(gradf1);
f2pv = eval(gradf2);
fpxo =[f1pv;f2pv];

if det(fpxo)==0
disp('Error: el determinante del Jacobiano es cero, intente otra
estimación inicial ')
else
iter = 0;
s1 = sprintf('%3.0f %- 10.4f %- 10.4f',iter,v(1),v(2));
s2 = sprintf(' %- 14.4f %- 14.4f',fv1,fv2);
disp([s1 s2]);
%Ciclo iterativo hasta encontrar la raíz
while (norm(fxo)>tol) & (det(fpxo)~=0) & (iter<nitermax)
iter = iter + 1;
%Nueva estimación de la solución
vn = v - inv(fpxo)*fxo;
v = vn;
alpha2 = v(1);
alpha3 = v(2);
%Evaluación de las funciones no lineales con la nueva estimación
de
%la solución
fv1 = f1name(alpha2,alpha3);
fv2 = f2name(alpha2,alpha3);
%Organización en forma de matrices y vectores
fxo = [fv1;fv2];
f1pv = eval(gradf1);
f2pv = eval(gradf2);
%Organización en forma de matrices y vectores
fpxo =[f1pv;f2pv];
if det(fpxo)==0
disp('Error: el determinante del Jacobiano es cero, intente
otra estimación inicial')
end
s1 = sprintf('%3.0f %- 10.4f %- 10.4f',iter,v(1),v(2));
s2 = sprintf(' %- 14.4f %-
14.4f',fv1,fv2);
disp([s1 s2])
end
root = v;
disp(sprintf('\n La raíz encontrada es: alpha2 = %- 8.4f, alpha3 =
%- 8.4f',v(1),v(2)));
%Solución finalmente encontrada por el método numérico
alpha2 = v(1);
alpha3 = v(2);
end

También podría gustarte