Download - programas basicos en matlab

Transcript

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

ESCUELA PROFESIONAL DE INGENIERIA CIVIL

METODOS NUMERICOS Y PROGRAMACION

RAICES DE ECUACIONES SISTEMAS DE ECUACIONES LINEALES Y NO

LINEALES INTERPOLACION, INTEGRACION Y

DIFERENCIACION NUMERICA

PROFESOR:

ALUMNO: LUCIO FUTURI MOSCOSO

HORARIO:

GRUPO: B

AREQUIPA – PERU

2014RAICES DE ECUACIONES

PROBLEMA 1

Resolver la siguiente ecuación: 0=1/X.^0.5+2*log10(E/(3.7*D)+2.51/(RE*X.^0.5)), donde E es la rugosidad, D el diámetro, RE el numero de Reynolds, RO es la densidad del fluido, V es la velocidad, y MU la viscosidad dinámica.

METODO DEL PUNTO FIJO:

function Y = G1(X)E=0.0000015;D=0.005;RO=1.23;V=40;MU=1.79*10.^-5;RE=RO*V*D/MU;Y =0.25/(log10(E/(3.7*D)+2.51/(RE*X.^0.5))).^2;return;

PROGRAMA

function [Xp, ITER, FLAG] = puntofijo(G, X0, EPS1, MAXIT)% Sintaxis% [Xp, ITER, FLAG] = PUNTOFIJO(G, X0, EPS1, MAXIT)% Entrada% - G es la función, almacenada como un archivo G.m% - X0 es el valor inicial% - EPS1 es el criterio de convergencia% - MAXIT es el número máximo de iteraciones% Salida% - Xp es el valor de la raíz aproximada% - ITER es el número de iteraciones realizadasfor K = 1 : MAXIT X = feval(G, X0); if (abs(X - X0)) < EPS1 Xp = X; ITER = K; return; end X0 = X;end disp('Se ha excedido el máximo número de iteraciones...'); ITER = MAXIT; end

SOLUCION :

>> [Xp, ITER, FLAG] = puntofijo('G1', 3, 1e-6, 25)Xp = 0.0290ITER = 7

METODO DE NEWTON

function Y = f(X)

E=0.0000015;D=0.005;RO=1.23;V=40;MU=1.79*10.^-5;RE=RO*V*D/MU;Y =1/X.^0.5+2*log10(E/(3.7*D)+2.51/(RE*X.^0.5));return;

function y =df(x)h=0.0000001;y=(f(x+h)-f(x))/h;end

PROGRAMA

function [x,k]=newton(x,t1,t2)% Sintaxis% [x,k] = newton(x,t1,t2)% Entrada% - f es la función, almacenada como un archivo f.m% - df es la derivada de de la función, almacenada como un archivo df.m% - X es el valor inicial% - t1 es el criterio de tolerancia% - t2 es el criterio de tolerancia% - x es el valor de la raíz aproximada

k=0; y=x+1;while abs(f(x))>=t1 && abs(y-x)>=t2 y=x; x=x-f(x)/df(x); k=k+1;end

Notese que al usar newton se debe graficar la ecuación previamente para visualizar un punto adecuado a partir del cual se comenzara la iteración:

>> [ x k]= newton(1,10^-6,10^-7)x = Inf - Infik = 7

>> [ x k]= newton(0.03,10^-6,10^-7)x = 0.0290k = 3

>> [ x k]= newton(0.001,10^-6,10^-7)x = 0.0290k = 8

>> fplot('f',[-10 20])Warning: Imaginary parts of complex X and/or Y arguments ignored

-10 -5 0 5 10 15 20-10

-8

-6

-4

-2

0

2

PROBLEMA 2La velocidad de un paracaidista que cae esta dada por: v =(g*x/c)*(1-exp(-(c/x)*t),donde g=9.81m/s2 .Para un paracaidista con coeficiente de arrastre de c=15kg/s, calcule la masa de modo que la velocidad sea v=35m/s en t=9seg.

METODO DE LA BISECCION

function y = f(x)g=9.81;c=15;v=35;t=9;y=(g*x/c)*(1-exp(-(c/x)*t))-v;

return;

Antes de aplicar la iteración es recomendable graficar la ecuación para tener puntos de inicialización y no caer en intervalos inútiles.

0 10 20 30 40 50 60 70 80 90 100-35

-30

-25

-20

-15

-10

-5

0

5

10

15

PROGRAMA

function [c,k]=biseccion(a,b,e)% Sintaxis% [c,k] = biseccion(a, b, e )% Entrada% - f es la función, almacenada como un archivo f.m% - a, b son los extremos del intervalo inicial% e es el criterio de exactitud o tolerancia% Salida% - c es el valor de la raíz aproximadak=0;while b-a>=e c=(a+b)/2; if f(a)*f(c)<0 b=c; else a=c; end k=k+1;end

SOLUCIONLa_masa_del_individuo_es= biseccion(50,70,10^-3)La_masa_del_individuo_es = 59.7577

METODO DE LA SECANTE

PROGRAMA

function [Xp, ITER, FLAG] = SECANTE(f, X0, X1, EPS1, EPS2, MAXIT)% Sintaxis% [Xp, ITER, FLAG] = SECANTE(f, X0, X1, EPS1, EPS2, MAXIT)% Entrada% - f es la función, almacenada como un archivo f.m

% - X0, X1 son los valores iniciales% - EPS1 es el criterio de convergencia% - EPS2 es el criterio de exactitud% - MAXIT es el número máximo de iteraciones% Salida% - Xp es el valor de la raíz aproximada% - ITER es el número de iteraciones realizadasfor K = 1 : MAXIT Xp = X0 - (X1 - X0) * feval(f, X0) / (feval(f, X1) - feval(f, X0)); if (abs(Xp - X1) <= EPS1) || (abs(feval(f, Xp)) <= EPS2) ITER = K; return; end X0 = X1; X1 = Xp;enddisp('Se ha excedido el máximo número de iteraciones..');ITER = MAXIT;

SOLUCION

>> [Xp, ITER, FLAG] = SECANTE('f', 65, 75, 1e-6, 1e-6, 10)Xp = 59.7582ITER = 4

SISTEMA DE ECUACIONES LINEALES

PROBLEMA3

Resolver el sistema lineal:

>> A=[3 -.1 -.2;0.1 7 -0.3;0.3 -0.2 10]

A =

3.0000 -0.1000 -0.2000 0.1000 7.0000 -0.3000

0.3000 -0.2000 10.0000>> b=[7.85;-19.3;71.4]

b =

7.8500 -19.3000 71.4000

METODO GAUSS

PROGRAMA

function X =gauss(A,b)% ENTRADAS% A : Matriz nxn% B : Vector nx1% SALIDAS% X : Vector solución[~,n]=size(A);X=zeros(n,1);

for k=1:1:n-1 for i=k+1:1:n m=A(i,k)/A(k,k); A(i,k)=0; for j=k+1:1:n A(i,j)=A(i,j)-m*A(k,j); end b(i)=b(i)-m*b(k); endendX(n)=b(n)/A(n,n);for k=n-1:-1:1 S=0; for j=k+1:1:n S=S+A(k,j)*X(j); end X(k)=(b(k)-S)/A(k,k);endend

SOLUCION

>> EL_VECTOR_SOLUCION_ES = gauss(A,b)EL_VECTOR_SOLUCION_ES X = 3.0000 -2.5000 7.0000

METODO FACTORIZACION LU

PROGRAMAfunction descompa=input('ingrese la matriz A=');b=input('ingrese el vector b=');n=length(b);l=zeros(n);u=zeros(n);for k=1:n for j=k:n s=0; p=1; while p<=k-1 s=s+l(k,p)*u(p,j); p=p+1; end u(k,j)=a(k,j)-s; end l(k,k)=1; for i=k+1:n sum=0; q=1; while q<=k-1

sum=sum+l(i,q)*u(q,k); q=q+1; end l(i,k)=(a(i,k)-sum)/u(k,k); endendluy(1)=b(1);for i=2:n s=0; for k=1:i-1 s=s+l(i,k)*y(k); end y(i)=b(i)-s;endyx(n)=y(n)/u(n,n);for i=n-1:-1:1 s=0; for k=i+1:n s=s+u(i,k)*x(k); end x(i)=(y(i)-s)/u(i,i);endx

SOLUCION

>> descompingrese la matriz A=[3 -.1 -.2;0.1 7 -0.3;0.3 -0.2 10]ingrese el vector b=[7.85;-19.3;71.4]

l =

1.0000 0 0 0.0333 1.0000 0 0.1000 -0.0271 1.0000

u =

3.0000 -0.1000 -0.2000 0 7.0033 -0.2933 0 0 10.0120

y = 7.8500 -19.5617 70.0843

x = 3.0000 -2.5000 7.0000

PARA UN SISTEMA TRIDIAGONALPROBLEMA 4

Resolver el siguiente sistema de ecuaciones: M =

2.0147 -0.0209 0 0 -0.0209 2.0147 -0.0209 0 0 -0.0209 2.0147 -0.0209 0 0 -0.0209 2.0147

B =

4.1750 0.0000 0.0000 2.0875

PROGRAMA

function X = tridiagonalsistemaA=input('ingrese EL VECTOR A=');D=input('ingrese EL VECTOR D=');C=input('ingrese EL VECTOR C=');B=input('ingrese EL VECTOR B=');%Este programa resuelve un sistema lineal MX=B donde M es una matriz%triagonal, en este caso consideraremos la matriz M compuesto por los%vectores D,C y A % ENTRADAS% A vector (n-1)*1 diagonal inferior% D vector n*1 diagonal principal% C vector (n-1)*1 diagonal superior% B vector independiente nx1% SALIDA% X vector soluciónn = length(B);for k = 2:n, mult = A(k-1)/D(k-1); D(k) = D(k) - mult*C(k-1); B(k) = B(k) - mult*B(k-1);endX(n) = B(n)/D(n);for k = (n-1):-1:1, X(k) = (B(k) - C(k)*X(k+1))/D(k);end

SOLUCION

>> tridiagonalsistemaingrese EL VECTOR A=[-0.020875 -0.020875 -0.020875 0]ingrese EL VECTOR D=[2.01475 2.01475 2.01475 2.01475]ingrese EL VECTOR C=[-0.020875 -0.020875 -0.020875 0]ingrese EL VECTOR B=[4.175; 0,;0;2.0875]

ans =

2.0724 0.0216 0.0110 1.0362

SISTEMAS DE ECUACIONES NO LINEALES

PROBLEMA 5RESOLVER EL SISTEMA:

function G = FG_2EC(X)G(1) = (4 - sqrt(X(2)))^3 / 8;G(2) = sqrt(17 - X(1)^2);return;

METODO DEL PUNTO FIJO

PROGRAMA

function [Xp, ITER, FLAG] = PUNTOFIJO_MV(G, X0, EPS, MAXIT)% Sintaxis% PUNTOFIJO_MV(G, X0, EPS, MAXIT)% Entrada% - G es el sistema de ecuaciones no lineales, almacenado como G.m% - X0 es el vector de valores iniciales% - EPS es el criterio de convergencia% - MAXIT es el número máximo de iteraciones% Salida% - Xp es el vector solución% - ITER es el número de iteraciones realizadasfor K = 1 : MAXIT X = feval(G, X0); if norm(X - X0) <= EPS Xp = real(X); ITER = K; return; end X0 = X;enddisp('Se ha excedido el máximo número de iteraciones...');ITER = MAXIT;

SOLUCION

>> [Xp, ITER, FLAG] =PUNTOFIJO_MV('FG_2EC', [0.5, 0.5], 1e-6, 25)

Xp = 1.0000 4.0000

ITER = 17

PROBLEMA 6RESOLVER EL SIGUIENTE SISTEMA:

function Y = F1_2EC(X)Y(1) = 4 - (8 * X(1))^(1/3) - X(2)^(1/2);Y(2) = 17 - X(1)^2 - X(2)^2;return;

function dY = JF1_2EC(X) dY(1) = -(8/3) * (8 * X(1))^(-2/3);dY(2) = -2 * X(2);return;

PROGRAMA

function [Xp, ITER, FLAG] = NEWTON_MODIF(F, D, X, EPS1, MAXIT)% Sintaxis% [Xp, ITER, FLAG] = NEWTON_MODIF(F, D, X, EPS1, MAXIT)% Entrada% - F es el sistema de ecuaciones no lineales, almacenado como F.m% - D son las derivadas, almacenadas como D.m% - X es el vector de valores iniciales% - EPS1 es el criterio de convergencia% - MAXIT es el número máximo de iteraciones% Salida% - Xp es el vector solución% - ITER es el número de iteraciones realizadas% - FLAG es una variable lógica, es 1 si hubo convergencia, caso% contrario es 0for K = 1 : MAXIT XAUX = X; for I = 1 : 2 FX = feval(F, X); DX = feval(D, X); X(I) = X(I) - FX(I) / DX(I); end if norm(XAUX - X) < EPS1 ITER = K; FLAG = 1; Xp = X; return;

endenddisp('Se ha excedido el máximo número de iteraciones...');ITER = MAXIT;FLAG = 0;

SOLUCION

>> [Xp, ITER, FLAG] = NEWTON_MODIF('F1_2EC', 'JF1_2EC', [4, 3], 1e-6, 25)Xp =

1.0 4.0000 2.0000

ITER = 9FLAG = 1

INTERPOLACION NUMERICA

PROBLEMA 7OBTENER LOS COEFICIENTES DE INTERPOLACION DE NEWTON DEl SIGUIENTE CONJUNTO DE PARES ORDENADOS MOSTRADOS EN LA SIGUIENTE FORMA:

X= [0 8 16 24 32 40]Y= [14.621 11.483 9.87 8.418 7.305 6.413]

METODO DE DIFERENCIAS FINITAS

PROGRAMA

function diferenciafinitasx=input('ingrese las variables independientes x= ');y=input('ingrese las variables dependientes y= ');% -----------------------------------------------------------% Este programa realiza la interpolación de un conjunto de puntos(x,y) % por el metodo de diferencias finitas.%-----------------------------------------------------------n=length(x);for i=1:n A(i,1)=y(i);endfor j=2:n for k=1:n-j+1 A(k,j)=A(k+1,j-1)-A(k,j-1); endendA

SOLUCIONPara este caso solo se obtendrá el cuadro general de dicho método:

>> diferenciafinitasingrese las variables indepedientes x= [0 8 16 24 32 40]ingrese las variables dependientes y= [14.621 11.483 9.87 8.418 7.305 6.413]

A =

14.6210 -3.1380 1.5250 -1.3640 1.5420 -1.8380 11.4830 -1.6130 0.1610 0.1780 -0.2960 0 9.8700 -1.4520 0.3390 -0.1180 0 0 8.4180 -1.1130 0.2210 0 0 0 7.3050 -0.8920 0 0 0 0 6.4130 0 0 0 0 0

METODO DE DIFERENCIAS DIVIDIDAS HACIA ARRIBA

PROGRAMA

function difdivarribaX=input('ingrese el vector X=');Y=input('ingrese el vector Y=');% -----------------------------------------------------------% Este programa realiza la interpolación de un conjunto de puntos (x,y) % por el metodo de diferencias divididas hacia arriba.%-----------------------------------------------------------% ENTRADAS% X : Conjunto de abcisas% Y : Conjunto de ordenadas% SALIDAS: % C : Coeficientes del polinómio interpolante de Newton% D :Coeficientes de la tabla por el metodo de diferencias % divididas hacia abajo%-----------------------------------------------------------n=length(X);D=zeros(n,n);D(:,1)=Y';%Formula de la tabla de diferencia divididas hacia abajo. for j=2:n for k=j:n D(k,j)=(D(k,j-1)-D(k-1,j-1))/(X(k)-X(k-j+1)); endendD

SOLUCION

>> difdivarribaingrese el vector X=[0 8 16 24 32 40]ingrese el vector Y=[14.621 11.483 9.87 8.418 7.305 6.413]

D =

14.6210 0 0 0 0 0

11.4830 -0.3922 0 0 0 0 9.8700 -0.2016 0.0119 0 0 0 8.4180 -0.1815 0.0013 -0.0004 0 0 7.3050 -0.1391 0.0026 0.0001 0.0000 0 6.4130 -0.1115 0.0017 -0.0000 -0.0000 -0.0000

A partir del cuadro obtenido se extrae los coeficientes y se compone la siguiente función:

function y = f(x) y=14.6210-0.3922*(x-0)+0.0119*(x-8)*(x-0)-0.0004*(x-0)*(x-8)*(x-16);>> f(27)ans = 7.8791

METODO DE DIFERENCIAS DIVIDIDAS HACIA ABAJO

PROGRAMA

function diferenciasdivididasx=input('ingrese el vector x=');y=input('ingrese el vector y=');n=length(x);a=zeros(n);for i=1:n a(i,1)=y(i);endfor j=2:n for k=1:n-j+1 a(k,j)=(a(k+1,j-1)-a(k,j-1))/(x(k+j-1)-x(k)); endend%a representa que contiene los coeficientes del polinómio interpolante de Newton a%C representa los coeficientes del polinómio interpolante de Newton

C=a(n,n);for k=(n-1):-1:1 C=conv(C,poly(x(k))); m=length(C); C(m)=C(m)+a(k,k);endC

SOLUCION

>> diferenciasdivididasingrese el vector x=[0 8 16 24 32 40]ingrese el vector y=[14.621 11.483 9.87 8.418 7.305 6.413]

a =

14.6210 -0.3922 0.0119 -0.0004 0.0000 -0.0000 11.4830 -0.2016 0.0013 0.0001 -0.0000 0 9.8700 -0.1815 0.0026 -0.0000 0 0 8.4180 -0.1391 0.0017 0 0 0 7.3050 -0.1115 0 0 0 0 6.4130 0 0 0 0 0

A partir de la tabla obtenida anteriormente se obtiene los coeficientes para el polinomio interpolador:

function y = f(x) y=14.6210-0.3922*(x-0)+0.0119*(x-8)*(x-0)-0.0004*(x-0)*(x-8)*(x-16);>> f(27)ans = 7.8791

METODO DE LAGRANGE

El problema planteado es el mismo que el anterior, pero esta vez por otro método.

>> X= [0 8 16 24 32 40]X = 0 8 16 24 32 40

>> Y= [14.621 11.483 9.87 8.418 7.305 6.413]Y = 14.6210 11.4830 9.8700 8.4180 7.3050

6.4130

PROGRAMA

function LAGRANGE1X=input('ingrese el vector X=');Y=input('ingrese el vector Y=');XINT=input('ingrese el vector XINT=');% Sintaxis% YINT = LAGRANGE1(X, Y, XINT)% Entrada% - X es un vector que contiene la lista de abscisas% - Y es un vector que contiene la lista de ordenadas% - XINT es el valor para el que se desea la interpolación% Salida% - YINT es el valor de la función en XINTN = length(X) - 1;YINT = 0;for I = 1 : N + 1 L = 1; for J = 1 : N + 1 if I ~= J L = L * (XINT - X(J)) / (X(I) - X(J)); end endYINT = YINT + L * Y(I);endYINT

SOLUCION

>> LAGRANGE1ingrese el vector X= [0 8 16 24 32 40]ingrese el vector Y= [14.621 11.483 9.87 8.418 7.305 6.413]ingrese el vector XINT= 27

YINT = 7.9417

METODOS DE INTEGRACION NUMERICA

PROBLEMA 8Integrar la función dada en forma tabular:>> X= [0, 1, 2, 3, 4, 5, 6]; Y = [-5, 1, 9, 25, 55, 105, 181];

METODO DEL TRAPECIO

PROGRAMA

function S = TRAPECIO(X, FX)% Sintaxis% I = TRAPECIO(X, FX)% Entrada% - X es un vector que contiene la lista de variables independientes% - FX es un vector que contiene la lista de variables dependientes o% integrando% - a y b son los extremos inferior y superior del intervalo de% integración% Salida% - S es la aproximación a la integral con la regla compuesta del% trapecioN = length(X);a = X(1);b = X(N);H = (b - a) / (N - 1);S = 0;for K = 2 : (N - 1) S = S + FX(K);endS = (H / 2) * (FX(1) + 2 * S + FX(N));

>> TRAPECIO(X,Y)ans = 283

METODO DE SIMPSON 1/3

PROGRAMA

function S = SIMPSON13(X, FX)% Sintaxis% I = SIMPSON13(X, FX)% Entrada% - X es un vector que contiene la lista de variables independientes% - FX es un vector que contiene la lista de variables dependientes o integrando% - a y b son los extremos inferior y superior del intervalo de integración% Salida% - S es la aproximación a la integral con la regla compuesta del Simpson 1/3N = length(X);a = X(1);b = X(N);H = (b - a) / (N - 1);S1 = 0;S2 = 0;for K = 2 : 2 : (N - 1)S1 = S1 + FX(K);endfor K = 3 : 2 : (N - 2)S2 = S2 + FX(K);endS = (H / 3) * (FX(1) + 4 * S1 + 2 * S2 + FX(N));

SOLUCION

>> X=[0, 1, 2, 3, 4, 5, 6]; Y = [-5, 1, 9, 25, 55, 105, 181];>> SIMPSON13(X, Y)

ans = 276

METODO DE SIMPSON 3/8

PROGRAMA

function S = SIMPSON38(X, FX)% Sintaxis% I = SIMPSON38(X, FX)% Entrada% - X es un vector que contiene la lista de variables independientes% - FX es un vector que contiene la lista de variables dependientes o integrando% - a y b son los extremos inferior y superior del intervalo de integración% Salida% - S es la aproximación a la integral con la regla compuesta del Simpson 3/8N = length(X);a = X(1);b = X(N);H = (b - a) / (N - 1);

S1 = 0;S2 = 0;for K = 2 : (N - 1) if mod(K - 1, 3) == 0 S1 = S1 + FX(K); else S2 = S2 + FX(K); endendS = (3 * H / 8) * (FX(1) + 2 * S1 + 3 * S2 + FX(N));

SOLUCION

>> X=[0, 1, 2, 3, 4, 5, 6]; Y = [-5, 1, 9, 25, 55, 105, 181];>> SIMPSON38(X,Y)

ans = 276PROBLEMA 9Integrar la función en forma tabular:

x =[0 1 2 3 4 5] y = f(x)=[ -5 1 9 25 55 105]

Como el numero de subintervalos es impar (en este caso 5) aplicamos una combinacion de las formulas de Simpson 1/3 y Simpson 3/8, veamos:

>> X1 = [0, 1, 2, 3]>> Y1 = [-5, 1, 9, 25]>> X2 = [3, 4, 5]>> Y2 = [25, 55, 105]>> I = SIMPSON38(X1, Y1) + SIMPSON13(X2, Y2)

I = 135.4167

METODO DE ROMBERG

PROBLEMA 10Encontrar la integral de la función de x en el intervalo de 0 a 1.

function y = f(x) y = 4 * x^3 - 3 * x^2 + 2 * x + 1;

return;

PROGRAMA

function [R, Q, EPS, H] = ROMBERG(f, a, b, K, TOL)% Sintaxis% [R, Q, EPS, H] = ROMBERG(F, a, b, K, TOL)% Entrada% - f es la función integrando, almacenada como un archivo f.m% - a y b son los extremos inferior y superior del intervalo de% integración% - K es el número máximo de fi las de la tabla

% - TOL es la tolerancia% Salida% - R es el esquema de Romberg% - Q es la aproximación a la integral% - EPS es una estimación del error% - H es el menor de los incrementos utilizadosN = 1;H = b - a;EPS = 1;J = 0;R = zeros(4, 4);R(1, 1) = H * (feval(F, a) + feval(F, b)) / 2;while ((EPS > TOL) && (J < K)) || (J < 4) J = J + 1; H = H / 2; S = 0; for P = 1 : N X = a + H * (2 * P - 1); S = S + feval(F, X); end R(J + 1, 1) = R(J, 1) / 2 + H * S; N = 2 * N; for M = 1 : J R(J + 1, M + 1) = R(J + 1, M) + (R(J + 1, M) - R(J, M)) / (4^M - 1); end EPS = abs(R(J, J) - R(J + 1, M + 1));endQ = R(J + 1, J + 1);

SOLUCION

>> [R, I, EPS, H]= ROMBERG('f',0, 1, 4, 1e-2)

R =

2.5000 0 0 0 0 2.1250 2.0000 0 0 0 2.0313 2.0000 2.0000 0 0 2.0078 2.0000 2.0000 2.0000 0 2.0020 2.0000 2.0000 2.0000 2.0000

I = 2EPS = 0H = 0.0625

METODOS DE DIFERENCIACION NUMERICA

METODO DE EULER

PROBLEMA 11Resolver el siguiente problema de valor inicial:

function y = f(X, Y) y(0)=1y = (Y + 1) / (X - 1);return;

PROGRAMA

function [t, Y] = EULER(F, a, b, Y0, N)% Sintaxis% [t, Y] = EULER(F, a, b, Y0, N)% Entrada% - F es la función, almacenada como un archivo F.m% - a y b son los extremos del intervalo% - Y0 es la condición inicial YO = Y(a)% - N es ell número de pasos% Salida% - t es el vector de la abscisas o variable independiente% - Y es el vector de las ordenadas o variable dependienteH = (b - a) / N;t = zeros(1, N + 1);Y = zeros(1, N + 1);t = [a: H: b];Y(1) = Y0;for J = 1 : N Y(J + 1) = Y(J) + H * feval(F, t(J), Y(J));endt = t';Y = Y';

SOLUCION

>> [X, Y] = EULER('f', 0, 0.4, 1, 4)

X =

0 0.1000 0.2000 0.3000 0.4000

Y =

1.0000 0.8000 0.6000 0.4000 0.2000

METODO DE RUNGE KUTTA DE CUARTO ORDEN

PROBLEMA 12Resolver el siguiente problema de valor inicial:

function y = f(X, Y) y(0.5)=1

y = X + 2 * X * Y;return;

PROGRAMA

function [t, Y] = RK4(F, a, b, Y0, N)% Sintaxis% [t, Y] = RK4(F, a, b, Y0, N)% Entrada% - F es la función, almacenada como un archivo F.m% - a y b son los extremos del intervalo% - Y0 es la condición inicial YO = Y(a)% - N es ell número de pasos% Salida% - t es el vector de la abscisas o variable independiente% - Y es el vector de las ordenadas o variable dependienteH = (b - a) / N;t = zeros(1, N + 1);Y = zeros(1, N + 1);t = (a: H: b);Y(1) = Y0;for J = 1 : N K1 = H * feval(F, t(J), Y(J)); K2 = H * feval(F, t(J) + H/2, Y(J) + K1/2); K3 = H * feval(F, t(J) + H/2, Y(J) + K2/2); K4 = H * feval(F, t(J) + H, Y(J) + K3); Y(J + 1) = Y(J) + (K1 + 2 * K2 + 2 * K3 + K4)/6;endt = t';Y = Y';

SOLUCION

>> [t, Y] = RK4('f', 0.5, 1, 1, 5)

t =

0.5000 0.6000 0.7000 0.8000 0.9000 1.0000

Y =

1.0000 1.1744 1.4069 1.7155 2.1260 2.6755