Matlab - Problema Newton Raphson modificado

 
Vista:

Problema Newton Raphson modificado

Publicado por Beatriz (6 intervenciones) el 29/01/2017 16:58:05
Hola, tengo un problema con el metodo de newton raphson modificado, es para la resolucion de un problema de estructuras en el que se aplica una carga y se calcula un residuo. La carga se aplica en pasos de carga, siendo la maxima 60 y el paso de 30. Aplica el primer paso de carga (30) pero el segundo realiza la tangente hacia abajo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function [ui,niter] = newtonraphsonm(r,u0)
 
syms u real
KT = diff(r,u);
ui = u0;
r0 = subs(r,ui);
ri = r0;
TOL = 10e-6;
niter = 0;
KT0 = double(subs(KT,0));
 
while  max(norm(ri/r0),norm(ri)) > TOL
    Au=-KT0\ri;
    ui=ui+Au;
    ri = double(subs(r,ui));
    niter = niter+1;
end

Este es el archivo que ejecuta

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
29
30
31
32
33
a = 2500;                   %Unidades en mm
h = 25;                     %Unidades en mm
A = 400;                    %Unidades en mm2
E = 200e3;                 %Unidades en N/mm2
l0 = sqrt(a^2 + h^2);       %Unidades en mm
u0 = 0;
 
syms u
pg = E*A/l0*((h/l0)^2*u-3/2*h*u^2/l0^2+1/2*u^3/l0^2);
Pa=60;
Pc=30;
%Pc=5;                                                 
P=0;
 
solu = zeros(Pa/Pc,1);
nitera = zeros(Pa/Pc,1);
i = 1;
while P < Pa
    P = P+Pc;
    r = pg - P;
      [ui,niter]=newtonraphsonm(r,u0);
    u0 = ui;
    solu(i) = u0;
    nitera(i) = niter;
    i = i+1;
end
u=linspace(0,65);
plot(u,subs(pg,u),'g',solu,subs(pg,solu),'-b')
hold on
grid on
xlabel('u (mm)')
ylabel('P (N)')
title('Respuesta P-u')
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Problema Newton Raphson modificado

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 30/01/2017 00:32:10
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
function newtonrapson
%Este es el archivo que ejecuta
a = 2500; %Unidades en mm
h = 25; %Unidades en mm
A = 400; %Unidades en mm2
E = 200e3; %Unidades en N/mm2
l0 = sqrt(a^2 + h^2); %Unidades en mm
u0 = 0;
syms u
pg = E*A/l0*((h/l0)^2*u-3/2*h*u^2/l0^2+1/2*u^3/l0^2);
Pa=60;
Pc=30;
%Pc=5; 
P=0;
solu = zeros(Pa/Pc,1);
nitera = zeros(Pa/Pc,1);
i = 1;
while P < Pa
P = P+Pc
r = pg - P;
[ui,niter]=newtonraphsonm(r,u0);
u0 = ui;
solu(i) = u0;
nitera(i) = niter;
i = i+1;
end
u=linspace(0,65);
plot(u,subs(pg,u),'g',solu,subs(pg,solu),'-b')
hold on
grid on
xlabel('u (mm)')
ylabel('P (N)')
title('Respuesta P-u')
end
 
function [ui,niter] = newtonraphsonm(r,u0)
syms u real
KT = diff(r,u);
ui = u0;
r0 = subs(r,ui);
ri = r0;
TOL = 10e-6;
niter = 0;
KT0 = double(subs(KT,u,u0));
 
while max(norm(ri/r0),norm(ri)) > TOL
%rand
Au=-KT0\ri;
ui=ui+Au;
ri = double(subs(r,ui));
niter = niter+1;
end
end

1
2
3
4
5
6
7
8
9
10
>> newtonrapson
 
P =
 
    30
 
 
P =
 
    60

newton


Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar