function [C,L]=lagran(X,Y)
%Datos
% -X es un vector que contiene las listas de las absisas
% -Y es un vector que contiene las listas de las ordenadas
%Resultados
% -C es la matriz que contiene los coeficientes del
polinomio interpolar
% de lagrange
% -L es la matriz que contiene los coeficientes de los
polinomios
% coeficientes de lagrange
w=length(X);
n=w-1;
L=zeros(w,w);
%Formacion de los polinomios coeficienes de lagrange
for k=1:n+1
V=1;
for j=1:n+1
if k~=j
V=conv(V,poly(X(j)))/(X(k)-X(j));
end
end
L(k,:)=V;
end
%Calculo de los coeficientes del polinomio
% interpolador de lagrange
C=Y*L;
Luego usamos la funcin lagranf
function P = lagranf(f,X)
syms x
Y=eval(f,X);
[C L]=lagran(X,Y);
P=poly2sym(L);
Finalmente ejecutamos problemaaa1
X=[0 1 2 3];
P=lagranf('exp(x)',X)
>> problemaaa1
P =
- x^15/6 + x^14/2 - x^13/2 + x^12/6 + x^11 - (5*x^10)/2 +
2*x^9 - x^8/2 - (11*x^7)/6 + 3*x^6 - (3*x^5)/2 + x^4/3 + x^3
Problema 2
a) Polinomio de interpolacin de lagrange
function [C,L]=lagran(X,Y)
%Datos
% -X es un vector que contiene las listas de las absisas
% -Y es un vector que contiene las listas de las ordenadas
%Resultados
% -C es la matriz que contiene los coeficientes del polinomio interpolar
% de lagrange
% -L es la matriz que contiene los coeficientes de los polinomios
% coeficientes de lagrange
w=length(X);
n=w-1;
L=zeros(w,w);
%Formacion de los polinomios coeficienes de lagrange
for k=1:n+1
V=1;
for j=1:n+1
if k~=j
V=conv(V,poly(X(j)))/(X(k)-X(j));
end
end
L(k,:)=V;
end
%Calculo de los coeficientes del polinomio
% interpolador de lagrange
C=Y*L;
Luego ejecuto problemaaa2 cuyo cdigo es
X=[0 1 2 3];
Y=[-1 6 31 98];
[C L]=lagran(X,Y)
P=poly2sym(C)
>> problemaaa2
C =
4.0000 -3.0000 6.0000 -1.0000
L =
-0.1667 1.0000 -1.8333 1.0000
0.5000 -2.5000 3.0000 0
-0.5000 2.0000 -1.5000 0
0.1667 -0.5000 0.3333 0
P =
4*x^3 - 3*x^2 + 6*x 1
b) Mtodo de diferencias divididas de Newton.
function acum=internewton(x,y)
%Cuerpo del programa
xa=x;ya=y;
% Formacion de las diferencias divididas
d=zeros(length(y));
d(:,1)=y';
for k=2:length(x)
for j=1:length(x)+1-k
d(j,k)=(d(j+1,k-1)-d(j,k-1))/(x(j+k-1)-x(j));
end
end
% Formacion del polinomio
for w=1:length(x)
ds=num2str(abs(d(1,w)));
if w>1
if x(w-1)<0
sg1='+';
else
sg1='-';
end
end
if d(1,w)<0
sg2='-';
else
sg2='+';
end
if w==1
acum=num2str(d(1,1));
elseif w==2
polact=['(x' sg1 num2str(abs(x(w-1))) ')' ];
actual=[ds '*' polact];
acum=[acum sg2 actual];
else
polact=[polact '.*' '(x' sg1 num2str(abs(x(w-1))) ')' ];
actual=[ds '*' polact];
acum=[acum sg2 actual];
end
end
Luego ejecuto problemaaa2b cuyo cdigo es
x=[0 1 2 3];
y=[-1 6 31 98];
polinomio=internewton(x,y)
>> problemaaa2b
Polinomio =
-1+7*(x-0)+9*(x-0).*(x-1)+4*(x-0).*(x-1).*(x-2)
Problema 3
a) Calcular exactamente
Usando los comandos de matlab
>> syms x;
>> I=int('(1-x^2)/(1+x^2)',x,0,1)
I =
pi/2 1
>> I= pi/2 - 1
I=
0.5708
b) Calcular por la formula compuesta de simpson de 11 sumandos
function s=simprl(f,a,b,M)
f=inline(f)
%Datos
% -f es el integrado, dado como una cadena de caracteres 'f'
% -a y b son los extremos inferior y superior del intervalo de
% integracion
% -M es el numero de subintervalos
%Resultados
% -S es la aproximacion obtenida con la regla de simpson
h=(b-a)/(2*M);
s1=0;
s2=0;
for k=1:M
x=a+h*(2*k-1);
s1=s1+feval(f,x);
end
for k=1:(M-1)
x=a+h*2*k;
s2=s2+feval(f,x);
end
s=h*(feval(f,a)+feval(f,b)+4*s1+2*s2)/3;
>> simprl('(1-x^2)/(1+x^2)',0,1,11)
f =
Inline function:
f(x) = (1-x^2)/(1+x^2)
ans =
0.5708
Problema 4
a) Con el mtodo clsico RK de cuarto orden, integrar
(x, y) = 2x
3
+ 12x
2
20x + 8.5
Usando un tamao de paso h = 0.5 y la condicin inicial y = 1 en x = 0;
function [T,Y] = RK4(f,h,a,ya,m)
%--------------------------------------------------------------------------
%Este programa resuelve el PVI
% y' = f(t,y)
% y(a) = ya.
% donde t se encuentra en el intervalo [a,b] usando el Mtodo de Runge
% Kutta de orden 4
%--------------------------------------------------------------------------
% ENTRADAS
% f : Funcin
% a : Extremo izquierdo
% b : Extremo derecho
% ya : Valor inicial
% m : Nmero de pasos
% SALIDAS
% T : Vector solucin (absisas)
% Y : Vector solucin (ordenadas)
%--------------------------------------------------------------------------
% MATLAB: Un software para Ciencia e Ingeniera
% Daniel Gutierrez
% Miguel Cutipa
% EDITORIAL MACRO
%--------------------------------------------------------------------------
f=inline(f,'t','y')
b=h*m-a;
T = zeros(1,m+1);
Y = zeros(1,m+1);
T(1) = a;
Y(1) = ya;
for j=1:m,
tj = T(j);
yj = Y(j);
k1 = h*feval(f,tj,yj);
k2 = h*feval(f,tj+h/2,yj+k1/2);
k3 = h*feval(f,tj+h/2,yj+k2/2);
k4 = h*feval(f,tj+h,yj+k3);
Y(j+1) = yj + (k1 + 2*k2 + 2*k3 + k4)/6;
T(j+1) = a + h*j;
end
T;
Y;
Luego ejecuto problemaaa4 cuyo cdigo es
[X,Y1 ]=RK4('-2*t^3+12*t^2-20*t+8.5+y',0.5,0,1,5);
X
Y1
>> problemaaa4
f =
Inline function:
f(t,y) = -2*t^3+12*t^2-20*t+8.5
X =
0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000
4.0000 4.5000 5.0000 5.5000 6.0000
Y1 =
1.0000 3.2188 3.0000 2.2188 2.0000 2.7188 4.0000 4.7188
3.0000 -3.7813 -19.0000 -46.7813 -92.0000
>>
b) De manera similar integre
(x, y) = 4e
0.8x
0.5y
Utilizando h = 0.5 con y(0) = 2 desde x = 0 hasta 0.5.
function [T,Y] = RRK4(f,a,b,ya,m)
%--------------------------------------------------------------------------
%Este programa resuelve el PVI
% y' = f(t,y)
% y(a) = ya.
% donde t se encuentra en el intervalo [a,b] usando el Mtodo de
Runge
% Kutta de orden 4
%--------------------------------------------------------------------------
% ENTRADAS
% f : Funcin
% a : Extremo izquierdo
% b : Extremo derecho
% ya : Valor inicial
% m : Nmero de pasos
% SALIDAS
% T : Vector solucin (absisas)
% Y : Vector solucin (ordenadas)
%--------------------------------------------------------------------------
% MATLAB: Un software para Ciencia e Ingeniera
% Daniel Gutierrez
% Miguel Cutipa
% EDITORIAL MACRO
%--------------------------------------------------------------------------
f=inline(f,'y','t')
h=(b-a)/m;
T = zeros(1,m+1);
Y = zeros(1,m+1);
T(1) = a;
Y(1) = ya;
for j=1:m,
tj = T(j);
yj = Y(j);
k1 = h*feval(f,tj,yj);
k2 = h*feval(f,tj+h/2,yj+k1/2);
k3 = h*feval(f,tj+h/2,yj+k2/2);
k4 = h*feval(f,tj+h,yj+k3);
Y(j+1) = yj + (k1 + 2*k2 + 2*k3 + k4)/6;
T(j+1) = a + h*j;
end
T;
Y;
Luego ejecuto problemaaa4b cuyo cdigo es
[X,Y1 ]=RRK4('4*exp(0.8*t)-0.5*y',0,5,2,12);
X
Y1
>> problemaaa4b
f =
Inline function:
f(y,t) = 4*exp(0.8*t)-0.5*y
X =
0 0.4167 0.8333 1.2500 1.6667 2.0833 2.5000 2.9167 3.3333 3.7500
4.1667 4.5833 5.0000
Y1 =
2