Algoritmos de EDO
Algoritmos de EDO
Algoritmos de EDO
17 DE AGOSTO DE 2022
INFORME SOBRE LOS ALGORITMOS DE MÉTODOS NUMÉRICOS PARA LA
SOLUCIÓN DE ECUACIONES DIFERENCIALES
REDACTADO POR
Octave
Calculadora Científica
Libro de MNPSED
COMPETENCIA ESPECIFICA
OBJETIVOS GENERALES
MÉTODO DE EULER
euler_20220425a22.m
Algoritmo:
ff=@(t,y) t-y;
h=(b-a)/n;
for i=1:n
y1=y0+h*ff(t,y0);
printf('%d t=%f y=%f\n',i,t+h,y1);
y0=y1;
t=t+h;
end;
%Aumentando Datos 1
printf('-------------')
ff=@(t,y) t-y;
h=(b-a)/n; yt(1)=y0
for i=1:n
y1=y0+h*ff(t,y0); yt(i+1)=y1;
printf('%d t=%f y=%f\n',i,t+h,y1);
y0=y1;
t=t+h;
end;
tx=[0 1/2 1 3/2 2];
plot(tx,yt)
%Aumentando Datos 2
printf('-------------')
ff=@(t,y) t-y;
h=(b-a)/n; yt(1)=y0
for i=1:n
y1=y0+h*ff(t,y0); yt(i+1)=y1;
printf('%d t=%f y=%f\n',i,t+h,y1);
y0=y1;
t=t+h;
end;
tx=[0 1/2 1 3/2 2]; t=0:.01:2;y=t-1+exp(-t);
plot(tx,yt,t,y)
euler_20220425a55.m
Algoritmo:
ff=@(t,y) sqrt(t.^2+y.^(3/2));
h=(b-a)/n; yt(1)=y0
for i=1:n
y1=y0+h*ff(t,y0); yt(i+1)=y1;
printf('%d t=%f y=%f\n',i,t+h,y1);
y0=y1;
t=t+h;
3
end;
tx=0:h:2;
plot(tx,yt)
euler_20220425compuesto11.m
Algoritmo:
ff=@(t,y) t-y;
h=(b-a)/n; yk=y0;
for i=1:n
for j=1:10
y1=y0+h/2*(ff(t,y0)+ff(t+h,yk));
if abs(y1-yk)<0.001
break;
end;
yk=y1;
end,
y0=y1; t=t+h;
printf('%d t=%f y=%f\n',i,t,y1);
end;
euler_20220425compuesto22.m
Algoritmo:
%arregos de compuesto11
ff=@(t,y) t-y;
h=(b-a)/n;
yt=[]; %ojo
yk=y0; yt(1)=y0;
for i=1:n
for j=1:10
y1=y0+h/2*(ff(t,y0)+ff(t+h,yk));
if abs(y1-yk)<0.001
break;
end;
yk=y1;
end,
y0=y1; t=t+h; yt(i+1)=y1;
printf('%d t=%f y=%f\n',i,t,y1);
4
end;
tx=0:h:2;
%para comparar
t=0:0.01:2; y=t-1+exp(-t); plot(tx,yt,t,y);
printf('------------')
ff=@(t,y) t-y;
h=(b-a)/n;
yt=[]; %ojo
yk=y0; yt(1)=y0;
for i=1:n
for j=1:10
y1=y0+h/2*(ff(t,y0)+ff(t+h,yk));
if abs(y1-yk)<0.001
break;
end;
yk=y1;
end,
y0=y1; t=t+h; yt(i+1)=y1;
printf('%d t=%f y=%f\n',i,t,y1);
end;
tx=0:h:2;
%para comparar
t=0:0.01:2; y=t-1+exp(-t); plot(tx,yt,t,y);
5
MÉTODO DE ADAMS MOULTON
ecuacionesss.m
Algoritmo:
%20220516
f1=@(t,x,y) 2*x-3*y;
f2=@(t,x,y) x+y;
a=0; b=2; y0=1; x0=0; n=20; h=(b-a)/n;
t=a;
yp1(1)=x0;
%yp1=[];
yp2(1)=y0;
%yp2=[];
for i=1:n
k11=h*f1(t,x0,y0); k12=h*f2(t,x0,y0);
k21=h*f1(t+h/2, x0+k11/2, y0+k12/2); k22=h*f2(t+h/2, x0+k11/2, y0+k12/2);
6
k31=h*f1(t+h/2, x0+k21/2, y0+k22/2); k32=h*f2(t+h/2, x0+k21/2, y0+k22/2);
k41=h*f1(t+h , x0+k31 , y0+k32) ; k42=h*f2(t+h , x0+k31 , y0+k32) ;
x1 = x0 + (k11 + 2*(k21+k31)+k41)/6;
y1 = y0 + (k12 + 2*(k22+k32)+k42)/6;
yp1(i+1)=x1;
x0=x1;
yp2(i+1)=y1;
y0=y1;
t=t+h;
end;
xt=0:h:2;
yt=0:h:2;
%xt=[];
%yt=[];
plot(xt,yp1, 'r', 'linewidth', 1);
grid on
hold on
plot(yt,yp2, 'b', 'linewidth', 1);
grid on
hold on
plot(y=0, 's', 'linewidth', 1)
hold off
adamsa_Moulton_11.m
Algoritmo:
%20220516
% Adams- moulton
% formula
% yn+1 = yn + (h/12)*(5*f(tn, yn+1)8*f(tn, yn)-f(tn-1, yn-1))
%
function adamsa_Moulton_11
clear all;
ff=@(t,y) t-y;
a=0; b=2; y0=0; n=8; h=(b-a)/n;
y1=runge_kutta_a1(a,1*h, y0, 1)
tt=2*h; yp=y1; y2=y1; yn1=y1(2);y1(3)=yn1;
for i=1:n-1
y1(3)=yn1;
for j=1:10 % circular 2 pasos
yn1=(5*ff(tt, y1(3))+8*ff(tt-h, y1(2))-ff(tt-2*h, y1(1)));
yn1=(yn1)*h/12+y1(2);
yr=abs(y1(3)-yn1);
y1(3)=yn1;
7
if yr<.0001 break; end;
end;
%y1(3)=y2(4);
y1(2)=yn1;r22=y1(2)
y1(1)=y2(2); tt=tt+h;
y2=y1;yp(i+2)=yn1;
end;
x=0:h:2; t=0:.01:2; yw=exp(-t)+t-1;
plot(x,yp, t, yw);
grid;
end;%function moulton;
%%%%% funcion Runge Kutta
%runge_kutta_a
function yw=ff(t,y) yw=t-y; end;
for i=1:n
k1=h*ff(t,y0);
k2=h*ff(t+h/2, y0+k1/2);
k3=h*ff(t+h/2, y0+k2/2);
k4=h*ff(t+h, y0+k3);
y1=y0+(k1+2*(k2+k3)+k4)/6;
k=k+1; y(k+1)=y1; y0=y1;
t=t+h;
end;
yt1=y;
endfunction;
adamsa_Moulton_22.m
Algoritmo:
%MULTON DE 3 PASOS
%20220516
function adamsa_Moulton_22
clear all;
ff=@(t,y) t-y;
a=0; b=2; y0=0; n=4; h=(b-a)/n;
y1=runge_kutta_a1(a,2*h, y0, 2)
tt=3*h;
yp=y1;
y2=y1;
yn1=y1(3);
y1(4)=yn1;
for i=2:n-1
y1(4)=yn1;
for j=1:10 % circular 3 pasos
8
yn1=(9*ff(tt, y1(4))+19*ff(tt-h, y1(3))-5*ff(tt-2*h, y1(2))+ff(tt-3*h,
y1(1)));
yn1=(yn1)*h/24+y1(3);
yr=abs(y1(4)-yn1);
y1(4)=yn1;
if yr<.0001 break; end;
end;
%y1(3)=y2(4);
y1(3)=yn1;
r22=y1(3)
y1(2)=y2(3);
y1(1)=y2(2);
tt=tt+h;
y2=y1;
yp(i+2)=yn1;
end;
x=0:h:2; t=0:.01:2; yw=exp(-t)+t-1;
plot(x,yp, t, yw);
%xlabel('x');
%ylabel('y');
%title('Gráfica Adams - bashfort de dos pasos');
grid;
end;%function moulton;
%%%%% funcion Runge Kutta
%runge_kutta_a
function yw=ff(t,y) yw=t-y; end;
for i=1:n
k1=h*ff(t,y0);
k2=h*ff(t+h/2, y0+k1/2);
k3=h*ff(t+h/2, y0+k2/2);
k4=h*ff(t+h, y0+k3);
y1=y0+(k1+2*(k2+k3)+k4)/6;
k=k+1; y(k+1)=y1; y0=y1;
t=t+h;
end;
yt1=y;
endfunction;
ecuaciones.m
Algoritmo:
%clc
f1=@(t,x,y) 2*x-3*y;
f2=@(t,x,y) x+y;
a=0; b=2; y0=1; x0=0; n=20; h=(b-a)/n;
9
t=a;
yp1(1)=x0;
yp2(1)=y0;
for i=1:n
k11=h*f1(t,x0,y0); k12=h*f2(t,x0,y0);
k21=h*f1(t+h/2, x0+k11/2, y0+k12/2); k22=h*f2(t+h/2, x0+k11/2, y0+k12/2);
k31=h*f1(t+h/2, x0+k21/2, y0+k22/2); k32=h*f2(t+h/2, x0+k21/2, y0+k22/2);
k41=h*f1(t+h , x0+k31 , y0+k32) ; k42=h*f2(t+h , x0+k31 , y0+k32) ;
x1 = x0 + (k11 + 2*(k21+k31)+k41)/6;
y1 = y0 + (k12 + 2*(k22+k32)+k42)/6;
yp1(i+1)=x1;
x0=x1;
yp2(i+1)=y1;
y0=y1;
t=t+h;
end;
tx=0:h:2;
ty=0:h:2;
%ty=[];
%tx=[];
plot(tx,yp1)
hold on
plot(ty,yp2)
hold off
adamsa_Moulton_tres.m
Algoritmo:
% Adams- moulton
% formula
% yn+1 = yn + (h/24)*(9*f(tn, yn+1)+19*f(tn, yn)
% -5f(tn-1, yn-1) + f(tn-2, yn-2) )
%
function adamsa_Moulton_tres
clear all;
ff=@(t,y) t-y;
a=0; b=2; y0=0; n=4; h=(b-a)/n;
y1=runge_kutta_a1(a,2*h, y0, 2)
tt=3*h; yp=y1; y2=y1; yn1=y1(3);y1(4)=yn1;
for i=2:n-1
y1(4)=yn1;
for j=1:10 % circular 2 pasos
yn1=(9*ff(tt, y1(4))+19*ff(tt-h, y1(3))-5*ff(tt-2*h, y1(2)));
10
yn1=(yn1+ff(tt-3*h, y1(1)))*h/24+y1(3);
yr=abs(y1(4)-yn1);
y1(4)=yn1;
if yr<.0001 break; end;
end;
%y1(3)=y2(4);
y1(3)=yn1;r22=y1(3)
y1(2)=y2(3); y1(1)=y2(2); tt=tt+h;
y2=y1;yp(i+2)=yn1;
end;
x=0:h:2; t=0:.01:2; yw=exp(-t)+t-1;
plot(x,yp, t, yw);
grid;
end;%function moulton;
%%%%% funcion Runge Kutta
%runge_kutta_a
function yw=ff(t,y) yw=t-y; end;
11
12
MÉTODO DE RUNGE KUTTA
Y es sumamente útil para casos en los que la solución no puede hallarse por los
métodos convencionales (como separación de variables). Hay variaciones en el
método de Runge-Kutta de cuarto orden pero el más utilizado es el método en el cual
se elige un tamaño de paso h y un número máximo de iteraciones n tal que
y se realiza la iteración Para i = 0,…, n-1. La solución se da a lo largo del intervalo (to,
to+ hn).
Runge_kuttaxx.m
Algoritmo:
13
function ww1=Runge_kuttaxx(a,b,ya, yp,n)
% Runge_kuttayy(a,b,ya_front, yp_penditne,ya_deriv, yp_deriv, n_pasos)
f1=@(t,x,y) 2*x-3*y; f2=@(t,x,y) x+y;
a=0; b=2; n=20; h=(b-a)/n; ya=0; yp=1;t=a;
h=(b-a)/n;
t=a;ww1=[];
ww1(1,1)=ya; ww1(2,1)=yp;
for ii=0:n-1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
k11=h*f1(t,ya,yp);
k21=h*f2(t,ya,yp);
k12=h*f1(t+h/2,ya+1/2*k11,yp+1/2*k21);
k22=h*f2(t+h/2,ya+1/2*k11,yp+1/2*k21);
k13=h*f1(t+h/2,ya+1/2*k12,yp+1/2*k22);
k23=h*f2(t+h/2,ya+1/2*k12,yp+1/2*k22);
k14=h*f1(t+h,ya+k13,yp+k23);
k24=h*f2(t+h,ya+k13,yp+k23);
ya1=ya+(k11+2*k12+2*k13+k14)/6;
y11=yp+(k21+2*k22+2*k23+k24)/6;
ww1(1,ii+2)=ya1;ww1(2,ii+2)=y11;
t=t+h;ya=ya1; yp=y11;
end;
[ww1']
t=0:h:2;
plot(t, ww1(1,:), t, ww1(2,:));
runge_kutta_a.m
Algoritmo:
%runge_kutta_a
for i=1:n
k1=h*ff(t,y0);
k2=h*ff(t+h/2, y0+k1/2);
k3=h*ff(t+h/2, y0+k2/2);
k4=h*ff(t+h, y0+k3);
y1=y0+(k1+2*(k2+k3)+k4)/6;
k=k+1; y(k+1)=y1; y0=y1;
t=t+h;
end;
yt1=y;
14
15
MÉTODO DE DIFERENCIAS FINITAS
Una diferencia finita es una expresión matemática de la forma f(x + b) − f(x +a). Si
una diferencia finita se divide por b − a se obtiene una expresión similar
al cociente diferencial, que difiere en que se emplean cantidades finitas en lugar
de infinitesimales. La aproximación de las derivadas por diferencias finitas
desempeña un papel central en los métodos de diferencias finitas del análisis
numérico para la resolución de ecuaciones diferenciales.
16
diferencias_finitas_11_20220602.m
Algoritmo:
B=[-(10/4)^2*exp(-2.5/5)/2-1; -(10/4)^2*exp(-5/5)/2; -
(10/4)^2*exp(-7.5/5)/2-4];
c=A\B
Difere_finita1.m
Algoritmo:
function t1=pp(x)
%t1=0;
t1=-2/x;
end;
function t2=qq(x)
%t2=1/2;
t2=2/x^2;
end;
function t3=rr(x)
%t3=-exp(-0.2*x)/2;
t3=sin( log(x) ) / x^2;
end;
Difere_finita33.m
Algoritmo:
Difere_finita22.m
Algoritmo:
end;
function t3=rr(x)
t3=0;
%t3=-exp(-0.2*x)/2;
%t3=sin( log(x) ) / x^2;
end;
20
21
MÉTODO DEL DISPARO LINEAL
El método del disparo para EDO lineales, consiste en sustuir el problema lineal con
valor de frontera por dos problemas de valor inicial. Por lo tanto se resolverán los
siguientes problemas de valor inicial:
disparo_lineal_11.m
Algoritmo:
function yy1=disparo_lineal_11
a=0; b=1; n=2; h=(b-a)/n;
yA=0;yB=1;
22
MÉTODO DEL DISPARO NO LINEAL
(1)
para varios valores del parámetros hasta obtener una solución que
satisfaga .
Primero definamos la función:
23
notar que esta función es positiva cuando se está sobreestimando el borde y es
negativa cuando el valor de es menor que .
Cuando encontramos dos valores para digamos y que cumplen lo
siguiente:
entonces podemos decir que podemos encontrar un valor tal que que
está entre e .
disparo_no_lineal_secante11_20220530.m
Algoritmo:
% DISPARO NO LINEAL
function y1 = disparo_no_lineal_secante11_20220530
a=0; b=2; ya=0; wa=1; n=10; p=1; p1=0; yb=1; % varia
function y2=f1(t, y, w)
y2=w;
end;
function y2=f2(t, y, w)
y2=t+y*y/10;
end;
%runge
function yt1 = rungekuttageneral(a, b, ya, wa, n)
h = (b-a)/n;
t=a; k=0; %y(1)=y0;
for i=1:n
ky1 = h*f1(t,ya,wa);
kw1 = h*f2(t,ya,wa);
ky2 = h*f1(t+h/2,ya+ky1/2, wa+kw1/2);
kw2 = h*f2(t+h/2,ya+ky1/2, wa+kw1/2);
ky3 = h*f1(t+h/2,ya+ky2/2, wa+kw2/2);
kw3 = h*f2(t+h/2,ya+ky2/2, wa+kw2/2);
ky4 = h*f1(t+h,ya + ky3, wa+kw3);
kw4 = h*f2(t+h,ya + ky3, wa+kw3);
25
MÉTODO DE RAYLEIGH-RITZ
26
Se utiliza en todas las aplicaciones que implican la aproximación de valores propios y
vectores propios , a menudo con nombres diferentes. En la mecánica cuántica , donde
se describe un sistema de partículas mediante un hamiltoniano , el método de
Ritz utiliza funciones de onda de prueba para aproximar la función propia del estado
fundamental con la energía más baja. En el contexto del método de elementos finitos ,
matemáticamente el mismo algoritmo se denomina comúnmente método Ritz-
Galerkin . El método Rayleigh-Ritz o la terminología del método Ritz es típica en
ingeniería mecánica y estructural para aproximar los modos propios y las frecuencias
resonantes.de una estructura.
Rayleigh_20220630_11_frontera__.m
Algoritmo:
h=x(2)-x(1);
Ip1=@(x)p(x); Ip1=quad(Ip1,x(1),x(2))/h^2;
Iq1=@(z)(z-x(1)).^2*q(z); Iq1=quad(Iq1,x(1),x(2))/h^2;
for i=1:n-1
h=x(i+2)-x(i+1);
IpN=@(z)p(z); IpN=quad(IpN,x(i+1),x(i+2))/h^2;
IqN=@(z)(z-x(i+2)).^2*q(z); IqN=quad(IqN,x(i+1),x(i+2))/h^2;
Ia=@(z)(x(i+2)-z).^2*q(z); Ia= quad(Ia,x(i+1),x(i+2))/h^2;
Ib=@(z)(x(i+2)-z).*(z-x(i+1)).*q(z); Ib= quad(Ib,x(i+1),x(i+2))/h^2;
h1=h;
h=x(i+1)-x(i);
Ic=@(z)(z-x(i)).*f(z); Ic= quad(Ic,x(i),x(i+1))/h;
Id=@(z)(x(i+2)-z).*f(z); Id= quad(Id,x(i+1),x(i+2))/h1;
A(i,i)=Ip1+IpN+Iq1+Ia;
A(i,i+1)=-IpN+Ib;
A(i+1,i)=A(i,i+1);
27
b(i)=Ic+Id;
Ip1=IpN; Iq1=IqN;
endfor
i=n;
h=x(i+2)-x(i+1);
IpN=@(z)p(z); IpN=quad(IpN,x(i+1),x(i+2))/h^2;
%IqN=@(z)(z-x(i+2)).^2*q(z); IqN=quad(IqN,x(i+1),x(i+2))/h^2;
Ia=@(z)(x(i+2)-z).^2*q(z); Ia= quad(Ia,x(i+1),x(i+2))/h^2;
Ib=@(z)(x(i+2)-z).*(z-x(i+1)).*q(z); Ib= quad(Ib,x(i+1),x(i+2))/h^2;
h1=h;
h=x(i+1)-x(i);
Ic=@(z)(z-x(i)).*f(z); Ic= quad(Ic,x(i),x(i+1))/h;
Id=@(z)(x(i+2)-z).*f(z); Id= quad(Id,x(i+1),x(i+2))/h1;
A(i,i)=Ip1+IpN+Iq1+Ia;
b(i)=Ic+Id;
A
b
c=A\b'
c=[0 c' 0];
% prporcion de la x =5*x-2;
x =5*x-2;
t=-2:.01:3;
%y=sinh(2*t)/(4*sinh(2))-t/4;
%c2=(2-exp(2))/(4*(exp(-4)-1)); c1=1/4*e^-2-c2*e^-4;
c1=(2*e^-10+3)/(4*(e^6-e^-14));
c2=-2/4*e^-4 -c1*e^-8;
y=c1*e.^(2*t)+c2*e.^(-2*t)-t/4;
plot(x, c, t, y); grid;
MetodoRayleighRitz23062022.m
Algoritmo:
%y''-4y=x; -(1y')'+4y=-x;
p=@(x) 1; q=@(x) 4; r=@(x)-x;
x=[0, 1/3, 2/3, 1]; n=2;
Ip1=@(z) p(z); h=x(2)- x(1); Ip1=quad(Ip1,x(1),x(2))/h^2
Iq1=@(z) (z-x(1)).^2.*q(z); Iq1=quad(Iq1,x(1),x(2))/h^2
for i=1:n-1
IpN=@(z) p(z);h=x(i+2)-x(i+1);IpN=quad(IpN,x(i+1),x(i+2))/h^2;
IqN=@(z) (z-x(i+2)).^2.*q(z);IqN=quad(IqN,x(i+1),x(i+2))/h^2;
Ia=@(z) (x(i+2)-z).^2.*q(z);Ia=quad(Ia,x(i+1),x(i+2))/h^2;
Ib=@(z) (x(i+2)-z).*(z-x(i+1));Ib=quad(Ib,x(i+1),x(i+2))/h^2;h1=h;
Ic=@(z) (z-x(i)).*r(z);h=x(i+1)-x(i);Ic=quad(Ic,x(i),x(i+1))/h;
Id=@(z) (x(i+2)-z).*r(z);Id=quad(Id,x(i+1),x(i+2))/h1;
A(i,i)=Ip1+IpN+Iq1+Ia; A(i,i+1)=-IpN+Ib; A(i+1,i)=A(i,i+1);
28
b(i)=Ic+Id; Ip1=IpN;Iq1=IqN;
end;
i=n+1;
IpN=@(z) p(z);h=x(i)-x(i+1);IpN=quad(IpN,x(i-1),x(i))/h^2;
Ia=@(z) (x(i)-z).^2.*q(z);Ia=quad(Ia,x(i-1),x(i))/h^2;
Ib=@(z) (x(i)-z).*(z-x(i-1)).*q(z);Ib=quad(Ib,x(i-1),x(i))/h^2;
Ic=@(z) (z-x(i-1)).*r(z);h1=x(i-1)-x(i-2);Ic=quad(Ic,x(i-2),x(i-1))/h;
Id=@(z) (x(i)-z).*r(z);Id=quad(Id,x(i-1),x(i))/h;
A(n,n)=Ip1+IpN+Iq1+Ia;
b(n)=Ic+Id
A
b
c=A\b'
raleygth22_1.m
Algoritmo:
Ip1s=[pp];Ip1f=inline(Ip1s);
Ip1=quad(Ip1f, x(1),x(2)).*(b1=1/(x(2)-x(1))^2);
Iq1s=['(' qq ').*(x-' mat2str(x(1)) ').^2'];Iq1f=inline(Iq1s);
Iq1=quad(Iq1f, x(1),x(2)).*b1;
end;
i=n;
IpN=quad(Ip1f, x(i),x(i+1)).*(b1=1/(x(i+1)-x(i))^2);
Ias=['(' qq ').*(' mat2str(x(i+1)) '-x).^2'];Iaf=inline(Ias);
Ia=quad(Iaf, x(i),x(i+1)).*b1;
%Ibs=['2*(' mat2str(x(i+1)) '-x).*(x-' mat2str(x(i)) ')'];Ibf=inline(Ibs);
%Ib=quad(Ibf, x(i),x(i+1)).*b1
Ics=['(' ff ').*(x-' mat2str(x(i-1)) ')'];Icf=inline(Ics);
Ic=quad(Icf, x(i-1),x(i))/(x(i)-x(i-1));
Ids=['(' ff ').*(' mat2str(x(i+1)) '-x)'];Idf=inline(Ids);
Id=quad(Idf, x(i),x(i+1))/(x(i+1)-x(i));
A(i-1,i-1)=Ip1+IpN+Iq1+Ia
b(i-1)=Ic+Id
c=A\b'; c'
y=[0 c' 0];
t=0:.01:1; yt=-sinh(2^.5*t)/sinh(2.^.5)/2 +t/2;
plot(t,yt,'linewidth',2, x, y,'linewidth',2);
grid;
rayleigh-ritz.m
Algoritmo:
% -(p(x)*y')'+q(x)*y=f(x)
% y''-4y=x ; -(1*y')'+4y=-x;
clear
p=@(x)1; q=@(x)4; f=@(x)(-x);
x=[0 1/3 2/3 1]; n=2;
h=x(2)-x(1);
Ip1=@(x)p(x); Ip1=quad(Ip1,x(1),x(2))/h^2;
Iq1=@(z)(z-x(1)).^2*q(z); Iq1=quad(Iq1,x(1),x(2))/h^2;
for i=1:n-1
h=x(i+2)-x(i+1);
IpN=@(z)p(z); IpN=quad(IpN,x(i+1),x(i+2))/h^2;
IqN=@(z)(z-x(i+2)).^2*q(z); IqN=quad(IqN,x(i+1),x(i+2))/h^2;
Ia=@(z)(x(i+2)-z).^2*q(z); Ia= quad(Ia,x(i+1),x(i+2))/h^2;
Ib=@(z)(x(i+2)-z).*(z-x(i+1)); Ib= quad(Ib,x(i+1),x(i+2))/h^2;
h1=h;
h=x(i+1)-x(i);
Ic=@(z)(z-x(i)).*f(z); Ic= quad(Ic,x(i),x(i+1))/h;
Id=@(z)(x(i+2)-z).*f(z); Id= quad(Id,x(i+1),x(i+2))/h1;
A(i,i)=Ip1+IpN+Iq1+Ia;
A(i,i+1)=-IpN+Ib;
30
A(i+1,i)=A(i,i+1);
b(i)=Ic+Id;
Ip1=IpN; Iq1=IqN;
endfor
i=n;
31
32
33
MÉTODO DE FIBONACCI
metodoFibonacci.m
Algoritmo:
function [alpha1]=metodoFibonacci(f,x0,Fgrad,bk,Max)
lamda=ak+(Fib(end-2)/Fib(end))*(bk-ak); % lamda
miu=ak+(Fib(end-1)/Fib(end))*(bk-ak); % miu
fl=f(x0(1,1)+lamda*Fgrad(1,1),x0(2,1)+lamda*Fgrad(2,1));
% se evalua lamda en la función
fm=f(x0(1,1)+miu*Fgrad(1,1),x0(2,1)+miu*Fgrad(2,1)); %
se evalua miu en la función
iter=0;
while size(Fib,2)>2
34
if Max==0
if fl>fm % si la función en lamda es mayor que la
función de miu
ak=lamda; % actualizar el límite ak con lamda
lamda=miu; % actualizar lamda con el valor antiguo de
miu
fl=fm; % actualizar la evaluación de fl con el
valor de fm
miu=ak+(Fib(end-1)/Fib(end))*(bk-ak); % definir el nuevo valor de miu
fm=f(x0(1,1)+miu*Fgrad(1,1),x0(2,1)+miu*Fgrad(2,1));
% se evalua miu en la función
elseif fl<fm % si la función en miu es mayor que la
función de lamda
bk=miu % actualizar el límite bk con miu
miu=lamda; % actualizar miu con el valor antiguo de lamda
fm=fl; % actualizar la evaluación de fm con el
valor de fl
lamda=ak+(Fib(end-2)/Fib(end))*(bk-ak); % definir el nuevo valor de lamda
fl=f(x0(1,1)+lamda*Fgrad(1,1),x0(2,1)+lamda*Fgrad(2,1));
% se evalua lamda en la función
end
end
if Max==1
if fl>fm % si la función en lamda es mayor que la
función de miu
bk=miu % actualizar el límite bk con miu
miu=lamda; % actualizar miu con el valor antiguo de lamda
fm=fl; % actualizar la evaluación de fm con el
valor de fl
lamda=ak+(Fib(end-2)/Fib(end))*(bk-ak); % definir el nuevo valor de lamda
fl=f(x0(1,1)+lamda*Fgrad(1,1),x0(2,1)+lamda*Fgrad(2,1));
% se evalua lamda en la función
elseif fl<fm % si la función en miu es mayor que la
función de lamda
ak=lamda; % actualizar el límite ak con lamda
lamda=miu; % actualizar lamda con el valor antiguo de
miu
fl=fm; % actualizar la evaluación de fl con el
valor de fm
miu=ak+(Fib(end-1)/Fib(end))*(bk-ak); % definir el nuevo valor de miu
fm=f(x0(1,1)+miu*Fgrad(1,1),x0(2,1)+miu*Fgrad(2,1));
% se evalua miu en la función
end
end
Fib(end)=[];
end
35
alpha1=(lamda+miu)/2;
NewtonMultidimensional.m
Algoritmo:
clear all
clc
%% datos que deben ser agregados por el usuario
36
grad{2}(x0(1,1),x0(2,1))];
Fhess=[Hess{1,1}(x0(1,1),x0(2,1)) Hess{1,2}(x0(1,1),x0(2,1));
Hess{2,1}(x0(1,1),x0(2,1)) Hess{2,2}(x0(1,1),x0(2,1))];
iter=1;
D(iter,:)={iter,x0,Fgrad,Fhess}
while norm(Fgrad)>=Tol && iter<=MaxIter
iter=iter+1;
D(iter,:)={iter,x0,Fgrad,Fhess}
end
% f=[1 -1]
% A=[-16 8]
% B=25;
% lb=[-2;-2]
% ub=[2;2]
% linprog(f,A,B,[],[],lb,ub)
base_segunco11.m
Algoritmo:
function ya=base_segunco11
a=0; b=1; n=5; h=(b-a)/n;
37
x1=a:h:b
A=[]; b=[];
% construcion de la matriz A
for i=1:n+1
A(1,i)=x_x(x1(1),i-1);
A(n+1,i)=dx_x(x1(1),i-1);
b(i)=rr(x1(i));
end;
for i=2:n
for j=1:n+1
k = ddx_x( x1(i),j-1);
A(i,j)=k+0*dx_x(x1(i),j-1)-4*x_x(x1(i),j-1);
end;
end;
A
b
% cosntruimos b esta arriba
format rat;
c=A\b'
format;
x=0:.1:1; ys=[];
%ys=c(1)+c(2)*x+c(3)*x.^2+c(4)*x.^3;
for i=1:length(x)
k=0;
for j=1:length(c)
k=k+c(j)*x(i).^(j-1);
endfor;
ys(i)=k;
end;
yt=5*sinh(2*x)/8-x/4;
function v=dx_x(t,m)
if m<=0 v=0;
elseif m==1 v=1;
else v=m*t.^(m-1);
38
endif
function v=ddx_x(t,m)
if m<=1 v=0;
elseif m==2 v=2;
else v=m*(m-1)*t.^(m-2);
end;
function v=rr(t)
v=t;
en la cual la matriz:
hiperbolica11.m
Algoritmo:
% Ecuacion HIPRBOLICA
%
%
% necesitamos crear el vector inicial w0={w(1,0) w(2,0) w(3,0) ... w(n-1,0) }
% tambien Ut(i,0) i=1 2 ... n-1
% w (i,0) =f(xi ), i=1 2 ... n-1
%
% w(i,1) = u(i,0) + kkg(xi), i=1 2 ... n-1
%
% para matriz A = [ λ*λ*w(i?ˆ’1,j) + 2(1?ˆ’λ*λ)w(i,j) + λ*λ*w(i+1,j)]
% λ = a*kk/hh ;
39
% w(i,j+1) = 2(1?ˆ’λ*λ)w(i,j) + λ*λ*( w(i+1,j)+w(i?ˆ’1,j))-w(i,j-1)
% i=1 2 ... n-1
%
clear all;
tt=1;
n=10; % numero de psrticiones para x
a=0; b=1;
hh=(b-a)/n; % el h para x
kk=.01; % Ojo es para llegar a t>0; t=1.0.
m=tt/kk;
if floor(m)<m m=floor(m+1); end;
kk=tt/m;
% necesitamos crear el vector inicial w0={w(1,0) w(2,0) w(3,0) ... w(n-1,0) }
% tambien Ut(i,0) i=1 2 ... n-1
% w (i,0) =f(xi ), i=1 2 ... n-1
%
% w(i,1) = u(i,0) + kkg(xi), i=1 2 ... n-1
%
% para matriz A = [ λ*λ*w(i?ˆ’1,j) + 2(1?ˆ’λ*λ)w(i,j) + λ*λ*w(i+1,j)]
% λ = a*kk/hh ;
% w(i,j+1) = 2(1?ˆ’λ*λ)w(i,j) + λ*λ*( w(i+1,j)+w(i?ˆ’1,j))-w(i,j-1)
% i=1 2 ... n-1
aa=4;
x=a+hh:hh:b-hh;
ff=inline('sin(pi*x)'); % condicion inicial
w00=ff(x);
gg=inline('x*0'); % codicion de primera derivada de U
w11=w00+kk*gg(x); % es la precision muy pobre (tu reprograma para el otro)
w11=w11';w00=w00';
lamd=(aa*kk/hh)^2; % calculo ppara lambda
B=AA=[]; B(:,1)=w00; B(:, 2)=w11;
AA(1,1)=2*(1-lamd); AA(1,2)=lamd;
for i=2:n-2
%for j=1:3
AA(i,i-1)=lamd;AA(i,i)=2*(1-lamd);AA(i,i+1)=lamd;
end
AA(n-1,n-2)=lamd; AA(n-1,n-1)=2*(1-lamd);
AA;
% Ahora ya se pude ir al algorimo
% wj+1 = A * wj - wj-1
w22=[]; % se contruye la matri A por AA
for i=1:m-1+1
w22=AA*w11-w00; % wj+1 = A * wj - wj-1
w00=w11;
B(:, i+2)=w11=w22;
end
a1(1)=tt;
dd=@(x) sin(pi*x).*cos(2*pi*a1(1)); % Solucion exacta
wyy=dd(x);
fprintf(' x exacto calculado error\n');
disp([x' wyy' w22 abs(w22-wyy')]);
40
ECUACIÓN ELÍPTICA PARA UNA EDP
elipticas2.m
Algoritmo:
clear
%E.D.P. Elíptica
a=0; b=0.5; c=0; d=0.5; n=4; m=4; a1=1^2;
h=(b-a)/n; k=(d-c)/m;
%Definimos las fronteras del rectángulo
fh_inferior_c=inline('0*x'); % horizontal inferior
fv_izquierda_a=inline('0*y'); % vertical izquierda
fh_superior_d=inline('200*x'); % horizontal superior
fv_derecha_b=inline('200*y'); % vertical derecha
for j=1:m-1
kn=m-j;
for i=1:n-1
ki=ki+1; b111=0; % contador y vector de recursos b
l=i+(m-1-kn)*(n-1); % numerador de P (P_l)
A(l,l)=2*(1+r*a1); % valores de la diagonal
p=l+1; % % - w i-1,j
p=l-1; % % - w i+1,j
41
if ((p>0) && (p<kp+1))
A(l,p)=-r*a1;
endif
if (i-1)==0
% fv_izquierda_a=inline('0*y') o sea en la vertical x=a
y=kn*k; b111=b111 + fv_izquierda_a(y);
endif
if (kn-1)==0
% fh_inferior_c=inline('0*x') o sea en la horizontal y=c
x=i*h; b111=b111 + fh_inferior_c(x)*r*a1;
endif
if (i+1)==n
% fv_derecha_b=inline('200*y') o sea vertical derecha
y=kn*k; b111=b111+ fv_derecha_b(y);%%%%%%%%%%%%%%%%%
endif
if (kn+1)==m
% fh_superior_d=inline('200*x') o sea horizontal de arriba
x=i*h; b111=b111 + fh_superior_d(x)*r*a1;
endif
b1(l)=b111;
endfor
endfor
A;
b1;
zz=A\b1';
zz';
k=1;
for j=1:m-1
for i=1:n-1
uu(j,i)=zz(k);
k=k+1;
endfor
endfor
for i=1:n+1
x(i)=(i-1)*b/n;
42
xi(i)=fh_inferior_c(x(i));
xf(i)=fh_superior_d(x(i));
endfor
for j=1:m+1
y(j)=(j-1)*d/m;
yi(m+2-j)=fv_izquierda_a(y(j));
yf(m+2-j)=fv_derecha_b(y(j));
endfor
for i=1:n-1
for j=1:m-1
vv(i+1,j+1)=uu(i,j);
endfor
for k=1:n+1
vv(m+1,k)=0;
endfor
vv(m+1,:)=xi;
vv(1,:)=xf;
vv(:,1)=yi';
vv(:,n+1)=yf';
endfor
mesh(vv)
43
44
45
46
BIBLIOGRAFÍA ADICIONAL
Dr. Ángel
Sangiacomo Manual de Métodos 2005
Tercera
Carazas, Mg. Numéricos para la Solución (Reimpresión
edición
Francis Antoine de Ecuaciones Diferenciales 2006)
Souche
Richard L. Burden,
Décima
Douglas J. Faires, Análisis Numérico 2017
edición
Annette M. Burden
Pearson-
SHOlCHlRO Métodos Numéricos Educación,
1992
NAKAMURA Aplicados en Software Primera
edición
47