Está en la página 1de 14

LAGRANGE

function[C,L]=lagrange(X,Y)
%DATOS
%X es un vector que contiene la lista de las abscisas
%Y es un vector que contiene la lista de las ordenadas
%RESULTADOS
%C es una matriz que contiene los coeficientes del
%polinomio interpolador 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);
%FORMACIN DE LOS POLINOMIOS COEFICIENTES DE LAGRANGE (Lk)
for k =1:n+1
V=1;
for r=1:n+1
if k~=r
V=conv(V,poly(X(r)))/(X(k)-X(r));
end
end
L(k,:)=V;
end
%CALCULO DE LOS COEFICIENTES DEL POLINOMIO
%INTERPOLADOR DE LAGRANGE
C=Y*L

>> X=[300:100:900];
>> Y=[0.025 0.030 0.045 0.055 0.067 0.083 0.097];
>> [C,L]=lagrange(X,Y)

C=

Columns 1 through 4

0.000000000000000 -0.000000000000132 0.000000000213750 -0.000000178625000

Columns 5 through 7

0.000081359166667 -0.018990500000000 1.788999999999990

C=

Columns 1 through 4

0.000000000000000 -0.000000000000132 0.000000000213750 -0.000000178625000

Columns 5 through 7

0.000081359166667 -0.018990500000000 1.788999999999990

L=

1.0e+002 *

Columns 1 through 4

0.000000000000000 -0.000000000000054 0.000000000086806 -0.000000073125000


-0.000000000000000 0.000000000000317 -0.000000000491667 0.000000398333333
0.000000000000000 -0.000000000000771 0.000000001160417 -0.000000907291667
-0.000000000000000 0.000000000001000 -0.000000001461111 0.000001106666667
0.000000000000000 -0.000000000000729 0.000000001035417 -0.000000762708333
-0.000000000000000 0.000000000000283 -0.000000000391667 0.000000281666667

0.000000000000000 -0.000000000000046 0.000000000061806 -0.000000043541667

Columns 5 through 7

0.000034130555556 -0.008363333333333 0.840000000000000


-0.000177075000000 0.040785000000000 -3.780000000000000
0.000387375000000 -0.085350000000000 7.560000000000000
-0.000457361111111 0.097633333333333 -8.400000000000000
0.000307125000000 -0.064050000000000 5.400000000000000
-0.000111075000000 0.022755000000000 -1.890000000000000
0.000016880555556 -0.003410000000000 0.280000000000000

>> v=300:900;
>> y=polyval(C,v);
>> plot(v,y)
>> a=polyval(C,350)

a=

0.023222656249942

>> b=polyval(C,660)

b=

0.061573235199702

>> x=0:4;
>> y=(1+x)./(1+2*x+3*x.^2);
>> [C,L]=lagrange(X,Y)

C=

Columns 1 through 4

0.000000000000000 -0.000000000000132 0.000000000213750 -0.000000178625000

Columns 5 through 7

0.000081359166667 -0.018990500000000 1.788999999999990

C=

Columns 1 through 4

0.000000000000000 -0.000000000000132 0.000000000213750 -0.000000178625000

Columns 5 through 7

0.000081359166667 -0.018990500000000 1.788999999999990

L=

1.0e+002 *

Columns 1 through 4

0.000000000000000 -0.000000000000054 0.000000000086806 -0.000000073125000


-0.000000000000000 0.000000000000317 -0.000000000491667 0.000000398333333
0.000000000000000 -0.000000000000771 0.000000001160417 -0.000000907291667
-0.000000000000000 0.000000000001000 -0.000000001461111 0.000001106666667
0.000000000000000 -0.000000000000729 0.000000001035417 -0.000000762708333
-0.000000000000000 0.000000000000283 -0.000000000391667 0.000000281666667
0.000000000000000 -0.000000000000046 0.000000000061806 -0.000000043541667

Columns 5 through 7

0.000034130555556 -0.008363333333333 0.840000000000000


-0.000177075000000 0.040785000000000 -3.780000000000000
0.000387375000000 -0.085350000000000 7.560000000000000
-0.000457361111111 0.097633333333333 -8.400000000000000

0.000307125000000 -0.064050000000000 5.400000000000000


-0.000111075000000 0.022755000000000 -1.890000000000000
0.000016880555556 -0.003410000000000 0.280000000000000

>> u=0:0.1:4;
>> f=(1+u)./(1+2*u+3*u.^2);
>> plot(u,f,'r')
>> hold on
>> p=polyval(C,u);
>> plot(u,p,'b')
>>

BISECCION
function c=biseccion(g,a,b,tol)
%Datos
%g es la funcion introducida como una cadena de caracteres
%a y b son los extremos del intervalo
%tol es la tolerancia para el error
%RESULTADOS
%c es la aproximacion al cero de f
k=0;
ya=feval(g,a);
yb=feval(g,b);
if ya*yb<=0
while abs(a-b)/2>tol
c=(a+b)/2;
yc=feval(g,c);
fprintf('%7d%14.9f%14.9f%14.9f%14.9f\n',k,a,b,c,yc)
k=k+1;
if ya*yc<=0
b=c; yb=yc;
else
a=c; ya=yc;
end
end
else
fprintf ('CAMBIAR LIMITES');
end

function y=g(x)
y=sin(x)-2*cos(x);
end

c=biseccion('g',a,b,tol)

SIMPSON
function s=simpson(f,a,b,M)
%DATOS
% f es el integrado dado como una
%cadena de caracteres
%a y b son los extremos inferior y
%superior del intervalo de integracin
%M es el nmero de subintervalos
%RESULTADOS
%S es la aproximacin obtenida
%con la regla compuesta 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

NEWTON
function pi=newton(f,df,po,tol,N)
%Datos
%f es la funcion de dos veces diferenciable
%df es la variable de f
%po es la aproximacion inicial al cero de f
%N es el numero maximo de iteraciones
%RESULTADOS
%p1 es la aproximacion al cero de f
for k=1:N
p1=po-feval(f,po)/feval(df,po);
fprintf('%5d%12.7f\n',k,p1);
if (abs(p1-po)<tol | k==N),break
end
po=p1
end

function y=f(x)
y=x^2-38;
end

function y=df(x)
y=2*x;
end

>> po=7, tol=10^(-6), N=50


>> newton('f','df',po,tol,N)

TRAPECIO
function s=trapeciocomp(f,a,b,M)
%DATOS
%f es el integrante, dado como una
%cadena de caracteres
%a y b son los extremos inferior y
%superior del intervalo de integracion
%M es el numero de subintervalos
%Resultado
%S es la aproximacion obtenida
%con la regla compuesta del
%trapecio
h=(b-a)/M;
s=0
for k=1:M-1
x=a+k*h;
s=s+feval(f,x);
end
s=h*(feval(f,a)+ feval(f,b))/2+ h*s;

function y=t(x)
y=1/(1+x^2);
end

>> a=-1, b=1, M=60


>> s=trapeciocomp('t',a,b,M)

GAUSS (por matriz)


function x = gaussseidel(A,b,x0,tol, max)
%DATOS
% A es una matriz invertible nxn
% b es una matriz nx1
% x0 es la matriz nx1 (aproximacion inicial)
% tol es la tolerancia para la aproximacion
% max es el nmero maximo de iteraciones
% RESULTADOS
% x es una matriz nx1 y
% es la aproximaciona a la solucion de Ax=b
% generada por el mtodo de gauss
n = length(b);
for k = 1:max
for r=1:n
if r==1
x(1)=(b(1)-A(1,2:n)*x0(2:n))/A(1,1);
elseif r==n
x(n)=(b(n)-A(n,1:n-1)*x(1:n-1)')/A(n,n);
else
x(r)=(b(r)-A(r,1:r-1)*x(1,r-1)'-A(r,r+1:n)*x0(r+1:n))/A(r,r);
end
end
k
x
errorabs = norm(x'- x0);
x0=x';
if errorabs < tol
break
end
end
k
x=x';

JACOBI
function x = jacobi(A,b,x0,tol, max)
%DATOS
% A es una matriz invertible nxn
% b es una matriz nx1
% x0 es la matriz nx1 (aproximacion inicial)
% tol es la tolerancia para la aproximacion
% max es el nmero maximo de iteraciones
% RESULTADOS
% x es una matriz nx1
% es la aproximaciona a la solucion de Ax=b
% generada por el mtodo de jacobi
n = length(b);
for k = 1:max
for r=1:n
x(r) = (b(r) - A(r,[1:r-1, r+1:n])*x0([1:r-1,r+1:n]))/A(r,r);
end
k
x
errorabs = norm(x'- x0);
x0=x';
if errorabs < tol
break
end
end
>> A=[3 1 0; -1 3 1; 0 2 3]
A =
3
1
0
-1
3
1
0
2
3
>> b=[1 -1 0]'
b =
1
-1
0
>> solexacta=inv(A)*b
solexacta =
0.4167
-0.2500
0.1667
>> x0=[5 4 8]'
x0 =
5
4
8
>> tol=10^(-6)
tol =
1.0000e-006
>> max=50
max =
50
>> x=jacobi(A,b,x0,tol,max)

También podría gustarte