Matlab - Newton Raphson

 
Vista:
sin imagen de perfil

Newton Raphson

Publicado por Nuria (3 intervenciones) el 08/10/2017 15:00:34
Hola! Estoy haciendo una práctica en que tengo que encontrar el punto de impacto entre dos funciones en función de un ángulo(el apartado e del pdf que incluyo).
Para encontrar el punto de corte hay que aplicar el mátodo de Newton Raphson.
Para determinar el punto de impacto, he hecho un Newton para cada ángulo de 5 a 80, y he guardado los resultados en un vector. El método de Newton si me ha funcionado para algunos ángulos(como los del primer apartado, 67.5), el problema es que no converge para ángulos más pequeños. Adjunto el pdf con los datos, y las tres funciones (apartadoa es la resta de las dos funciones que tienen que impactar)

APARTADOA:
1
2
function out=apartadoa(x, v ,alfa)
out= (tand(alfa).*x-4.9.*(x/(v.*cosd(alfa))) .^2)-(0.15.*x .^2 .* exp(-0.04.*x));
NEWTON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function [out1, out2]= newton2(a,tol,itmax,v,alfa)
newton=[a];
error=[];
dx=10e-6;
funcio=apartadoa(a, v, alfa);
fdx=apartadoa((a+dx),v, alfa);
fx=apartadoa(a,v, alfa);
derivada=(fdx-fx)/dx;
%EL paso siguiente es para que haya dos valores guardados en el vector y
%así se pueda iniciar el while
x2= a-(fx/derivada);
    newton=[newton, x2];
    a=x2;
    fdx=apartadoa((a+dx),v, alfa);
    fx=apartadoa(a,v, alfa);
    derivada=(fdx-fx)/dx;
while abs(newton(end)-newton(end-1))>tol & length(newton)<itmax
    xn= a-(fx/derivada);
    newton=[newton, xn];
    a=newton(end);
    fdx=apartadoa((a+dx),v, alfa);
    fx=apartadoa(a,v, alfa);
    derivada=(fdx-fx)/dx;
 
end
   out1=newton(end);
   out2=length(newton)-1;
% out1 es el punto de impacto y out2 el numerlo de iteración


APARTADOE1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a=50;
itmax=1000;
v=37;
alfa=5;
tol=10e-10;
xdealfa=[];
itdealfa=[];
for alfa=5:80
[impacte,iteracions]=newton2(a,tol,itmax,v,alfa);
alfa=alfa+1;
xdealfa=[xdealfa, impacte];
itdealfa=[itdealfa, iteracions];
 
 end
angle=[5:80];
plot(angle,xdealfa)





Captura-de-pantalla-2017-10-08-a-las-15.06.59
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder