
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:
NEWTON
APARTADOE1:

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));
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)

Valora esta pregunta


0