Sei sulla pagina 1di 20

x=[0.3,0.6,0.9,1.1,1.4,1.6,1.8,2.

0] %Vector del eje x que forman el


soporte de interpolacin
f=[3.75,4.60,5.0,4.75,3.95,3.20,2.15,0.85] %Vector de valores observados
para cada punto del soporte de interpolacin
phi1=ones(1,8) %Funcin aproximante phi1
phi2=x %Funcin aproximante phi2
phi3=x.^2 %Funcin aproximante phi3
phi4=log(1+x) %Funcin aproximante phi4
v=[phi1',phi2',phi3',phi4'] %Matriz auxiliar V para calcular la matriz de
Gramm
G=v'*v %Matriz de Gramm

Los resultados que se obtienen en Matlab se muestran a continuacin:


x=
0.3000 0.6000 0.9000 1.1000 1.4000 1.6000 1.8000 2.0000
phi1 =
1

phi2 =
0.3000 0.6000 0.9000 1.1000 1.4000 1.6000 1.8000 2.0000
phi3 =
0.0900 0.3600 0.8100 1.2100 1.9600 2.5600 3.2400 4.0000
phi4 =
0.2624 0.4700 0.6419 0.7419 0.8755 0.9555 1.0296 1.0986
v=
1.0000 0.3000 0.0900 0.2624
1.0000 0.6000 0.3600 0.4700

G=

1.0000 0.9000 0.8100 0.6419


1.0000 1.1000 1.2100 0.7419

8.0000 9.7000 14.2300 6.0754

1.0000 1.4000 1.9600 0.8755

9.7000 14.2300 22.9750 8.5595

1.0000 1.6000 2.5600 0.9555

14.2300 22.9750 39.1507 13.5029

1.0000 1.8000 3.2400 1.0296

6.0754 8.5595 13.5029 5.1987

1.0000 2.0000 4.0000 1.0986

beta=v'*f' %Matriz beta

beta =
28.2500
29.8300
38.0910
19.5426

f=
3.7500 4.6000 5.0000 4.7500 3.9500 3.2000 2.1500 0.8500

z=[1,0.3,0.3^2,log(1+0.3);1,2,2^2,log(1+2)] %Matriz z de coeficientes de


las ecuaciones de las condiciones
A=[G,z';z,zeros(2,2)] %Matriz global del sistema
beta=v'*f' %Matriz beta
betah=[beta;3.75;0.85] %Matriz beta con trminos independientes de las
condiciones

A=

z=
1.0000 0.3000 0.0900 0.2624

8.0000 9.7000 14.2300 6.0754 1.0000 1.0000

1.0000 2.0000 4.0000 1.0986

9.7000 14.2300 22.9750 8.5595 0.3000 2.0000

14.2300 22.9750 39.1507 13.5029 0.0900 4.0000


beta =

betah =

6.0754 8.5595 13.5029 5.1987 0.2624 1.0986

28.2500

28.2500

1.0000 0.3000 0.0900 0.2624

29.8300

29.8300

1.0000 2.0000 4.0000 1.0986

38.0910

38.0910

19.5426

19.5426
3.7500
0.8500

Planteamos el sistema global para obtener el valor de los coeficientes alfa:


alfalanda=A\betah %Matriz alfa-landa
alfa=alfalanda(1:4) %Matriz con los valores de los coeficientes alfa

alfalanda =

alfa =

2.0661

2.0661

1.7745

1.7745

-2.6461

-2.6461

5.2970

5.2970

-0.0171
-0.0012
Por lo tanto la funcin aproximacin de los puntos anteriores y que cumple con las condiciones
impuestas es:

Queda por representar la funcin aproximante y los puntos observados para comprobar la calidad
de la aproximacin realizada y si se cumplen las condiciones impuestas. Para ello se ha realizado el
siguiente comando en Matlab:
y=v*alfa %Valores que toma la funcin aproximada en el soporte de
interpolacin

y=

f=

3.7500

3.7500

4.6678

4.6000

4.9197

5.0000

4.7463

4.7500

4.0014

3.9500

3.1926

3.2000

2.1407

2.1500

0.8500

0.8500

Se puede observar que la aproximacin es relativamente


buena y que se cumplen las condiciones impuestas

x2=[0.3:0.05:2.0]; %Nuevo soporte de interpolacin para pintar la funcin


phi1=ones(1,35);
phi2=x2;
phi3=x2.^2;
phi4=log(1+x2);
y=(alfa(1).*phi1+alfa(2).*phi2+alfa(3).*phi3+alfa(4).*phi4)'; %funcin de
interpolacin
hold on
plot(x2,y,'-r','Linewidth', 1.5)
plot(x,f,'-*g','Linewidth', 1.5)
hold off

El cdigo

empleado en Matlab para resolver el problema es el que se muestra a continuacin:


x=[0.3,0.6,0.9,1.1,1.4,1.6,1.8,2.0] %Vector del eje x que forman el
soporte de interpolacin
f=[3.75,4.60,5.0,4.75,3.95,3.20,2.15,0.85] %Vector de valores observados
para cada punto del soporte de interpolacin
phi1=ones(1,8) %Funcin aproximante phi1
phi2=x %Funcin aproximante phi2
phi3=x.^2 %Funcin aproximante phi3
phi4=log(1+x) %Funcin aproximante phi4
v=[phi1',phi2',phi3',phi4'] %Matriz auxiliar V para calcular la matriz de
Gramm
G=v'*v %Matriz de Gramm
z=[1,0.3,0.3^2,log(1+0.3);1,2,2^2,log(1+2)] %Matriz z de coeficientes de
las ecuaciones de las condiciones
A=[G,z';z,zeros(2,2)] %Matriz global del sistema
beta=v'*f' %Matriz beta
betah=[beta;3.75;0.85] %Matriz beta con trminos independientes de las
condiciones
alfalanda=A\betah %Matriz alfa-landa
alfa=alfalanda(1:4) %Matriz con los valores de los coeficientes alfa
y=v*alfa %Valores que toma la funcin aproximada en el soporte de
interpolacin
x2=[0.3:0.05:2.0]; %Nuevo soporte de interpolacin para pintar la funcin
phi1=ones(1,35);
phi2=x2;
phi3=x2.^2;
phi4=log(1+x2);
y=(alfa(1).*phi1+alfa(2).*phi2+alfa(3).*phi3+alfa(4).*phi4)'; %funcin de
interpolacin
hold on
plot(x2,y,'-r','Linewidth', 1.5)
plot(x,f,'-*g','Linewidth', 1.5)
hold off

x=[0.3,0.6,0.9,1.1,1.4,1.6,1.8,2.0] %Puntos del eje x que forman el


soporte de interpolacin
w=[0.85,0.85,0.85,1,1,1,1,1] %Vector de peso asignado a cada punto del
soporte de interpolacin
phi1=ones(1,8) %Funcin aproximante phi1
phi2=x %Funcin aproximante phi2
phi3=x.^2 %Funcin aproximante phi3
phi4=log(1+x) %Funcin aproximante phi4
W=diag(w) %Matriz diagonal con las ponderaciones de los puntos

v=[phi1',phi2',phi3',phi4'] %Matriz auxiliar V para calcular matriz Gramm


v =
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000
1.0000

0.3000
0.6000
0.9000
1.1000
1.4000
1.6000
1.8000
2.0000

0.0900
0.3600
0.8100
1.2100
1.9600
2.5600
3.2400
4.0000

0.2624
0.4700
0.6419
0.7419
0.8755
0.9555
1.0296
1.0986

G=v'*W*v %Matriz de Gramm


G =
7.5500
9.4300
14.0410
5.8692

9.4300
14.0410
22.8292
8.4188

14.0410
22.8292
39.0316
13.3960

5.8692
8.4188
13.3960
5.0934

f=[3.75,4.60,5.0,4.75,3.95,3.20,2.15,0.85] %Vector de valores observados


para cada punto del soporte de interpolacin
beta=v'*(w'.*f') %Matriz beta
beta =
26.2475
28.5723
37.1845
18.5893

alfa=G\beta %Matriz con los valores de los coeficientes alfa


alfa =
2.0115
1.3034
-2.5781
5.9580

Por lo tanto la funcin aproximacin de los puntos observados es:

Queda por representar la funcin aproximante y los puntos observados para comprobar la calidad
de la aproximacin realizada. Para ello se ha realizado el siguiente comando en Matlab:
y=v*alfa %Valores que toma la funcin aproximada en el soporte de
interpolacin

y=
3.7336

f=
3.7500

4.6657

4.6000

4.9204

5.0000

4.7462

4.7500

3.9992

3.9500

3.1899

3.2000

2.1390

2.1500

0.8514

0.8500

Se puede observar que la aproximacin es relativamente buena;


la funcin aproximacin se desva ms en los puntos del
principio al haberles asignarlo un peso menor.

x2=[0.3:0.05:2.0] %Nuevo soporte de interpolacin para pintar la funcin


phi1=ones(1,35)
phi2=x2
phi3=x2.^2
phi4=log(1+x2)
y=(alfa(1).*phi1+alfa(2).*phi2+alfa(3).*phi3+alfa(4).*phi4)' %funcin de
interpolacin
hold on
plot(x2,y,'-r','Linewidth', 1.5)
plot(x,f,'-*g','Linewidth', 1.5)
hold off

Se puede observar que la funcin aproximante se aproxima ms a los puntos correspondientes a


ya que el peso de estos puntos es de 1.0 (mientras que los puntos de
tienen un peso
de 0.85)

El cdigo empleado en Matlab para resolver el problema es el que se muestra a continuacin:


x=[0.3,0.6,0.9,1.1,1.4,1.6,1.8,2.0] %Vector del eje x que forman el
soporte de interpolacin
f=[3.75,4.60,5.0,4.75,3.95,3.20,2.15,0.85] %Vector de valores observados
para cada punto del soporte de interpolacin
w=[0.85,0.85,0.85,1,1,1,1,1] %Vector de peso asignado a cada punto del
soporte de interpolacin
phi1=ones(1,8) %Funcin aproximante phi1
phi2=x %Funcin aproximante phi2
phi3=x.^2 %Funcin aproximante phi3
phi4=log(1+x) %Funcin aproximante phi4
W=diag(w) %Matriz diagonal con las ponderaciones de los puntos
v=[phi1',phi2',phi3',phi4'] %Matriz auxiliar V para calcular la matriz de
Gramm
G=v'*W*v %Matriz de Gramm
beta=v'*(w'.*f') %Matriz beta
alfa=G\beta %Matriz con los valores de los coeficientes alfa
y=v*alfa %Valores que toma la funcin aproximada en el soporte de
interpolacin
x2=[0.3:0.05:2.0]; %Nuevo soporte de interpolacin para pintar la funcin
phi1=ones(1,35);
phi2=x2;
phi3=x2.^2;
phi4=log(1+x2);
y=(alfa(1).*phi1+alfa(2).*phi2+alfa(3).*phi3+alfa(4).*phi4)'; %funcin de
interpolacin
hold on
plot(x2,y,'-r','Linewidth', 1.5)
plot(x,f,'-*g','Linewidth', 1.5)
hold off

A continuacin se procede a comparar las soluciones obtenidas por ambas formas:

f=

y (Apartado A)=

y (Apartado B)=

3.7500

3.7500

3.7336

4.6000

4.6678

4.6657

5.0000

4.9197

4.9204

4.7500

4.7463

4.7462

3.9500

4.0014

3.9992

3.2000

3.1926

3.1899

2.1500

2.1407

2.1390

0.8500

0.8500

0.8514

A continuacin se muestra el proceso seguido en matlab para hallar la solucin pedida. En primer
lugar introducimos los factores de ponderacin (wi) y los argumentos (zi) mencionados
anteriormente:
function Factores_de_ponderacion_wi
w=[0];
if n==2
w(1) = 1;
w(2) = 1;
elseif n==3
w(1) = 0.555555555;
w(2) = 0.888888888;
w(3) = 0.555555555;
elseif n==4
w(1) = 0.347854845;
w(2) = 0.652451155;
w(3) = 0.652451155;
w(4) = 0.347854845;
elseif n==5
w(1) = 0.236926885;
w(2) = 0.478628671;
w(3) = 0.568888888;
w(4) = 0.478628671;
w(5) = 0.236926885;
elseif n==6
w(1) = 0.171324492;
w(2) = 0.360761573;
w(3) = 0.467913935;
w(4) = 0.467913935;
w(5) = 0.360761573;
w(6)= 0.171324492;
end
w;

function Argumentos_zi
z=[0];
if n==2
z(1) = -0.577350269;
z(2) = 0.577350269;
elseif n==3
z(1) = -0.774593669;
z(2) = 0;
z(3) = 0.774593669;
elseif n==4
z(1) = -0.861136312;
z(2) = -0.339981044;
z(3) = 0.339981044;
z(4) = 0.861136312;
elseif n==5
z(1) = -0.906179846;
z(2) = -0.538469310;
z(3) = 0.0;
z(4) = 0.538469310;
z(5) = 0.906179846;
elseif n==6
z(1) = -0.932469514;
z(2) = -0.661209386;
z(3) = -0.238619186;
z(4) = 0.238619186;
z(5) = 0.661209386;
z(6)= 0.932469514;
end
z;

Se crea un programa en matlab que introduciendo la funcin a integrar (fphi), el intervalo a


estudiado [a,b] y el nmero de abscisas utilizadas en la aproximacin nos da el valor de la integral
definida interpolada con el mtodo de Legendre-Gauss.
fphi0=input('Introduce la funcin fphi0 a integrar:\n');
fphi0=inline(fphi0,'x')
I1=0;
for i=[1:1:n]
I1=I1;
I1=I1+(b-a)/2*w(i)*feval(fphi0,((b-a)/2*z(i)+(a+b)/2));
end
fphi1=input('Introduce la funcin fphi1 a integrar:\n');
fphi1=inline(fphi1,'x')
I2=0;
for i=[1:1:n]
I2=I2;
I2=I2+(b-a)/2*w(i)*feval(fphi1,((b-a)/2*z(i)+(a+b)/2));
end

fphi3=input('Introduce la funcin fphi2 a integrar:\n');


fphi3=inline(fphi3,'x')
I3=0;
for i=[1:1:n]
I3=I3;
I3=I3+(b-a)/2*w(i)*feval(fphi3,((b-a)/2*z(i)+(a+b)/2));
end

Los valores de estas integrales se muestran a continuacin:


Para n=2
I =
5.8178

9.1386

19.1398

Para n=3
I =
6.2641

9.8396

19.1106

Para n=4
I =
6.2044

9.7458

19.1738

Para n=5
I =
6.2095

9.7538

19.1557

Para n=6
I =
6.2087

9.7526

19.1575

Introducimos ahora la matriz de Gramm y calculamos los coeficientes alfa que nos proporcionan la
solucin al problema planteado:
G=[pi,pi^2/2,pi^3/3;pi^2/2,pi^3/3,pi^4/4;pi^3/3,pi^4/4,pi^5/5];
alfa=G\I'

La matriz de Gramm (calculada antes) queda:


G =
3.1416
4.9348
10.3354

4.9348
10.3354
24.3523

10.3354
24.3523
61.2039

Los valores de los coeficientes alfa y la funcin aproximante para cada caso son:
Para n=2
alfa =
1.8519
0.0000
-0.0000

Para n=3
alfa =
0.5451
2.7669
-0.8807

Para n=4
alfa =
0.7773
2.2872
-0.7280

Para n=5
alfa =
0.7452
2.3516
-0.7485

Para n=6
alfa =
0.7492
2.3436
-0.7460

Por ltimo se dibuja la funcin a aproximar (


uno de los 5 casos:
Para n=2

Para n=3

y la aproximacin realizada (

para cada

Para n=4

Para n=5

Para n=6

Se muestra a continuacin todas las grficas representadas de forma conjunta:

El programa utilizado en Matlab para realizar el problema se muestra a continuacin:


a=input('Introduce el valor de "a" del intervalo de interpolacin:\n');
b=input('Introduce el valor de "b" del intervalo de interpolacin:\n');
while b<=a
disp('El intervalo de interpolacin lo ha introducido mal')
a=input('Introduce el valor de "a" del intervalo de
interpolacin:\n');
b=input('Introduce el valor de "b" del intervalo de
interpolacin:\n');
end
n=input('Introduce el nmero de puntos utilizados en la
interpolacin:\n');
while (logical (n-fix(n)~=0)+logical (n>6)+logical (n<2))~=0
disp('El valor de "n" debe ser un nemro entero y comprendido entre 2
y 6')
n=input('Introduce el nmero de puntos utilizados en la
interpolacin:\n');
end
Argumentos_zi;
Factores_de_ponderacion_wi;
fphi0=input('Introduce la funcin fphi0 a integrar:\n');
fphi0=inline(fphi0,'x')
I1=0;
for i=[1:1:n]
I1=I1;
I1=I1+(b-a)/2*w(i)*feval(fphi0,((b-a)/2*z(i)+(a+b)/2));
end
fphi1=input('Introduce la funcin fphi1 a integrar:\n');
fphi1=inline(fphi1,'x')
I2=0;
for i=[1:1:n]
I2=I2;
I2=I2+(b-a)/2*w(i)*feval(fphi1,((b-a)/2*z(i)+(a+b)/2));
end
fphi3=input('Introduce la funcin fphi2 a integrar:\n');
fphi3=inline(fphi3,'x')
I3=0;
for i=[1:1:n]
I3=I3;
I3=I3+(b-a)/2*w(i)*feval(fphi3,((b-a)/2*z(i)+(a+b)/2));
end
I=[I1,I2,I3]
G=[pi,pi^2/2,pi^3/3;pi^2/2,pi^3/3,pi^4/4;pi^3/3,pi^4/4,pi^5/5];
alfa=G\I'

x=0:0.05:pi;
y=alfa(1)+alfa(2).*x+alfa(3).*x.^2;
solucion=exp(sin(x));
hold
plot
plot
hold

on
(x,y)
(x,solucion,'g')
off

Potrebbero piacerti anche