Está en la página 1de 9

 METODO DE EULER

--FUNCION

function dydx=f(x,y)

dydx=y.*(x*x-1);

--CODIGO

function euler(f,a,b,n,y0)

%datos

%f=el nombre de la función como string

%a =limite inferior

%b =limite superior%h =longitud del segmento

%y0 =f(a)

%x =es el vector x

%n =numero de segmentos

%resultados

%y =es el vector f(x)

h=(b-a)/n;

n=n+1;

y=zeros(n,1);

x=zeros(n,1);

x(1)=a;

y(1)=y0;

fprintf(' x y \n');

fprintf('===================\n');

fprintf('%10.6f%10.6f\n',x(1),y(1));

for i=1:n-1

x(i+1)=a+h*i;

y(i+1)=y(i)+h*feval('f',x(i),y(i));

fprintf('%10.6f%10.6f\n',x(i+1),y(i+1));

end
//RESULTADO

>> euler('x^2',0,1,10,0.1)

x y

===================

0.000000 0.100000

0.100000 0.090000

0.200000 0.081090

0.300000 0.073305

0.400000 0.066635

0.500000 0.061037

0.600000 0.056459

0.700000 0.052846

0.800000 0.050151

0.900000 0.048345

1.000000 0.047427

 METODO DE RK4
--CODIGO

function RK4(f,a,b,n,y0)

%datos

%f =el nombre de la función como string

%a =limite inferior

%b =limite superior

%h =longitud del segmento

%y0 =f(a)

%x =es el vector x

%n =numero de segmentos

%resultados

%y =es el vector f(x)

h=(b-a)/n;

n=n+1;

y=zeros(n,1);
x=zeros(n,1);

x(1)=a;

y(1)=y0;

fprintf(' x y \n');

fprintf('====================\n');

fprintf('%10.6f%10.6f\n',x(1),y(1));

for i=1:n-1

k1=feval('f',x(i),y(i));

k2=feval('f',x(i)+h/2,y(i)+h*k1/2);

k3=feval('f',x(i)+h/2,y(i)+h*k2/2);

k4=feval('f',x(i)+h,y(i)+h*k3);

x(i+1)=a+h*i;

y(i+1)=y(i)+h*(k1+2*k2+2*k3+k4)/6;

fprintf('%10.6f%10.6f\n',x(i+1),y(i+1));

end

--RESULTADO

>> RK4('4*exp(0.8*x)-0.5*y',0,2,4,0.2)

x y

====================

0.000000 0.200000

0.500000 0.126468

1.000000 0.102669

1.500000 0.137399

2.000000 0.386643
 METODO DE HEUN
--CODIGO

function heun(f,a,b,n,y0)

%datos

%f =el nombre de la función como string

%a =limite inferior

%b =limite superior

%h =longitud del segmento

%y0 =f(a)

%x =es el vector x

%n =numero de segmentos

%resultados

%y =es el vector f(x)

h=(b-a)/n;

n=n+1;

y=zeros(n,1);

x=zeros(n,1);

x(1)=a;

y(1)=y0;

p(1)=0;

fprintf(' x p y \n');

fprintf('===============================\n');

fprintf('%10.6f%10.6f%10.6f\n',x(1),p(1),y(1));

for i=1:n-1

p(i+1)=y(i)+h*feval('f',x(i),y(i));

x(i+1)=a+h*i;

y(i+1)=y(i)+0.5*h*(feval('f',x(i),y(i))+feval('f',x(i+1),p(i+1)));

fprintf('%10.6f%10.6f%10.6f\n',x(i+1),p(i+1),y(i+1));

end

--RESULTADO
>> heun('x^2',0,1,10,0.1)

x p y

===============================

0.000000 0.000000 0.100000

0.100000 0.090000 0.090545

0.200000 0.081581 0.082147

0.300000 0.074261 0.074825

0.400000 0.068016 0.068564

0.500000 0.062805 0.063329

0.600000 0.058579 0.059080

0.700000 0.055299 0.055779

0.800000 0.052934 0.053404

0.900000 0.051481 0.051954

1.000000 0.050966 0.051460

 APLICACION 01

--FUNCION 01

% p.m

function f=p(t)

f=1;

end

--FUNCION 02

% q.m

function f=q(t)

f=0;

end

--FUNCION 03
% r.m

function f=r(t)

f=t*(t-1);

end

--CODIGO 01

function [T,X] = findiff(p,q,r,a,b,alpha,beta,n)

% Solucion del problema de valor de frontera usando diferencias finitas

% x(t)‟‟ = p(t)x‟(t)+q(t)x(t)+r(t)

% x(a) = alpha, x(b) = beta

% Entradas

% p, q, r Nombres de las funciones

% a,b Limites del intervalo [a,b]

% alpha Valor frontera izquierdo …. beta Valor frontera derecho

% n numero de pasos

% Salida

% T Vector de abscisas X Vector de ordenadas

T = zeros(1,n+1); X = zeros(1,n-1);

Va = zeros(1,n-2); Vb = zeros(1,n-1);

Vc = zeros(1,n-2); Vd = zeros(1,n-1);

h = (b - a)/n;

for j=1:n-1,

Vt(j) = a + h*j;

end

for j=1:n-1,

Vb(j) = -h^2*feval(r,Vt(j));

end

Vb(1) = Vb(1) + (1 + h/2*feval(p,Vt(1)))*alpha;

Vb(n-1) = Vb(n-1) + (1 - h/2*feval(p,Vt(n-1)))*beta;

for j=1:n-1,

Vd(j) = 2 + h^2*feval(q,Vt(j));

end
for j=1:n-2,

Va(j) = -1 - h/2*feval(p,Vt(j+1));

end

for j=1:n-2,

Vc(j) = -1 + h/2*feval(p,Vt(j));

end

X = trisys(Va,Vd,Vc,Vb);

T = [a,Vt,b];

X = [alpha,X,beta];

--CODIGO 02

% trisys.m

function X = trisys(A,D,C,B)

%---------------------------------------------------------

% Solucion del sistema tridiagonal

% Entradas

% A vector sub diagonal

% D vector diagonal

% C vector super diagonal

% B vector del lado derecho

% Salida

% X vector solucion

%---------------------------------------------------------

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

end

X(n) = B(n)/D(n);

for k = (n-1):-1:1,

X(k) = (B(k) - C(k)*X(k+1))/D(k);


end

--RESULTADO

>> [T, X] = findiff ('p', 'q', 'r', 0,1,0, 0,4)

T=

Columns 1 through 4

0 0.2500 0.5000 0.7500

Column 5

1.0000

X=

Columns 1 through 4

0 0.0176 0.0269 0.0210

Column 5

 PROPUESTO 03

y=dsolve('Dy=(y-x-1)^2+2','y(0)=1','x');

>> simplify(y)

ans =

x + tan(x) + 1

>>ezplot('x + tan(x) + 1')


 PROPUESTO 04

>> y=dsolve('D2y-19.62*y=0','y(0)=0','Dy(0)=0.25','x');

>> simplify(y)

ans =

(5*218^(1/2)*sinh((3*218^(1/2)*x)/10))/1308

>> ezplot('(5*218^(1/2)*sinh((3*218^(1/2)*x)/10))/1308',[-1,1])

También podría gustarte