Você está na página 1de 12

a=[6 -2 2 4 12; 12 -8 6 10 34; 3 -13 9 3 27; -6 4 1 -18 -38];

[n m]=size(a);

%eliminacion gaussiana

for k=1:n-1

for i=k+1:n

r=-a(i,k)/a(k,k);

for j=k+1:n+1

a(i,j)=a(i,j)+r*a(k,j);

end

end

end

%resuelve el sistema

X(n)=a(n,n+1)/a(n,n);

for i=n-1:-1:1

c=a(i,n+1);

for j=i+1:n

c=c-a(i,j)*x(j);

end

x(i)=c/a(i,i)

end

x’

_____________________________________________________________________________

a=[6 -2 2 4 12; 12 -8 6 10 34; 3 -13 9 3 27; -6 4 1 -18 -38];

[n m]=size(a);

%eliminacion gaussiana

for k=1:n-1

a(k+1:n,k+1:n+1)=a(k+1:n,k+1:n+1)+(-a(k+1:n,k)/a(k,k))*a(k,k+1:n+1);

end

%resuelve el Sistema

X(n)=a(n,n+1)/a(n,n)

for i=n-1:-1:1
a(i,n+1)=a(i,n+1)-a(i,i+1:n)*x(i+1:n)’;

x(i)=a(i,n+1)/a(i,i);

end

x’

programa1

x=1:10;

y=[8 2.5 -2 0 5 2 4 7 4.5 2];

hold on

x2=1:0.5:10;

y2=interp1(x,y,x2,'spline');

disp(y2)

programa2

function [a,b,c,d]=splineCubico

n=lenght(x(1,:));

for i=1:n;

a(i)=x(2,i);

end

for i=1:n-1;

h(i)=x(1,i+1)-x(1,i);

end

for i=2:n-1;

alfa(i)=3/h(i)*(a(i+1)-a(i))-3/h(i-1)*(a(i)-a(i-1));

end

l(1)=1;

mu(1)=0;

z(1)=0;

for i=2:n-1;

l(i)=2*(x(1,i+1)-x(1,i-1))-h(i-1)*mu(i-1);

mu(i)=h(i)/l(i);
z(i)=(alfa(i)-h(i-1)*z(i-1))/l(i);

end

l(n)=1;

z(n)=0;

c(n)=0;

for i=n-1:-1:1;

c(i)=z(i)-mu(i)*c(i+1);

b(i)=(a(i+1)-a(i))/h(i)-h(i)*(c(i+1)+2*c(i))/3;

d(i)=(c(i+1)-c(i))/(3*h(i));

end

for i=1:n-1;

x=x(1,i):0.5:x(1,i+1);

m=length(x);

fprintf('siguientes %1.of nodos de x\n',m);

disp(x)

y=a(i)+b(i)*(x-x(1,i))+c(i)*(x-x(1,i)).^2+d(i)*(x-x(1,i)).^3;

fprintf('imagenes de los %1.of nodos de x\n',m);

disp(y)

end

METODO DE SIMPSON (scilab)

//METODO DE SIMPSON
function y=f(x)
y=exp(x)/x
endfunction
a=1;
b=2,
n=20; //numero de subintervalos
h=(b-a)/n;
s0=f(a)+f(b)
s1=0;
s2=0;
for i=1:n-1
x=a+i*h;
if modulo(i,2)==0 then
s2=s2+f(x);
else
s1=s1+f(x);
end
end
s=h*(s0+2*s2+4*s1)/3;
disp(s)

________________________________________________________________________-

//REGLA COMPUESTA DE SIMPSON(Pseudocódigo)1


function y=f(x)
y=exp(x)/x
endfunction
a=input('ingrese el límite inferior: ') //a=1
b=input('ingrese el valor del límite superior: ') //b=2
n=input('ingrese el numero de subintervalos: ') //n=20
h=(b-a)/n

S0=f(a)+f(b)
S1=0
S2=0
i=0
for i=1:n-1
x=a+i*h
if modulo(i,2)==0 then
S2=S2+f(x)
else
S1=S1+f(x)
end

end
S=h*(S0+2*S2+4*S1)/3
disp(S,'valor aproxinmado de la integral según la regla compuesta de simpson es:')

__________________________________________________________________-

METODO DE SIMPSON (fortran)

Se grabó como f.f90

real function f(x)

real x

f=exp(x)/x

end
se grabó como Simpson.f90

program simpson

integer i,n

real a,b,s,s0,s1,s2,h,x,f

a=1

b=2

n=20 ! numero de subintervalos

h=(b-a)/n

s0=f(a)+f(b)

s1=0

s2=0

do i=1,n-1

x=a+i*h

if (mod(i,2)==0) then

s2=s2+f(x)

else

s1=s1+f(x)

end if

end do

s=h*(s0+2*s2+4*s1)/3

print*,'la solucion aproximada de la integral es:'

print*,s

end

________________________________________________________________________-

METODO DEL TRAPECIO (fortran)

Programa1

real function f(x)

real x

f=exp(x)/x
end

programa2

program trapecio

integer i,n

real a,b,s,s0,s1,h,x,f

a=1;

b=2;

n=20; !numero de subintervalos

h=(b-a)/n;

s0=f(a)+f(b)

s1=0;

do i=1,n-1

x=a+i*h;

s1=s1+f(x);

end do

s=h*(s0+2*s1)/2;

print*,'la solucion aproximada de la integral es:'

print*,s

end

METODO DEL TRAPECIO (scilab)

//METODO DE TRAPECIO
function y=f(x)
y=exp(x)/x
endfunction
a=1;
b=2,
n=20; //numero de subintervalos
h=(b-a)/n;
s0=f(a)+f(b)
s1=0;
for i=1:n-1
x=a+i*h;
s1=s1+f(x)
end
s=h*(s0+2*s1)/2;
disp(s)
SPLINE FRONTERA SUJETA (matlab)

function [a, b, c, d]=trazadorsujeto(x, y, u, v, z)


%u,v son las pendientes en los extremos
%z es opcional:es el vector de puntos para evaluarse al trazador

n=length(x);
clear A B C D;
if n<4
return
end
for i=1:n-1
h(i)=x(i+1)-x(i);
end
B(1)=-2*h(1)/6;
c(1)=-h(1)/6;
D(1)=u-(y(2)-y(1))/h(1);
for i=2:n-1
A(i)=h(i-1);
B(i)=2*(h(i-1+h(i));
C(i)=h(i);
D(i)=6*((y(i+1)-y(i))/h(i)-(y(i)-y(i-1))/h(i-1));
end
A(n)=h(n-1)/6;
B(n)=h(n-1)/3;
D(n)=v-(y(n)-y(n-1))/h(n-1);
s=tridiagonal(A,B,C,D);
for i=1:n-1
a(i)=(s(i+1)-s(i))/(6*h(i));
b(i)=s(i)/2;
c(i)=(y(i+1)-y(i))/h(i)-(2*h(i)*s(i)+h(i)*s(i+1))/6;
d(i)=y(i);
end
if nargin==5 % puntos del trazador cubico sujeto
p=[];
m=length(z);
for k=1:m
t=z(k);
for i=1:n-1
if t>=x(i) & t<=x(i+1)
p(k)=a(i)*(t-x(i))^3+b(i)*(t-x(i))^2+c(i)*(t-x(i))+d(i);
end
end
end
if m>1
k=m;i=n-1;
p(k)=a(i)*(t-x(i))^3+b(i)*(t-x(i))^2+c(i)*(t-x(i))+d(i);

end
clear a b c d;
a=p;
end
SPLINE CUBICO NATURAL (fortran)

program splineCubicoNatural

!Numero de puntos: n

!Numero de ecuaciones para resolver el sistema: n-2

!Define las subroutines: intercambio,gaussPivote, en archivos independientes

integer, parameter::n=9

integer,parameter::m=n-2;

integer k,i,j

real, dimension(n-2,n-1)::e

real,dimension(n-2)::z

real,dimension(n)::x,y,a,c

real,dimension(n-1)::b,d,h

!Coordenadas de los puntos

x(:)=[1,2,5,6,7,8,10,13,17]

!y(:)=[3,5,3,4,7,6,8,9,1]

y(:)=[3.0,3.7,3.9,4.2,5.7,6.6,7.1,6.7,4.5]

!Inicializacion de la matriz ampliada

do i=1,n-2

do j=1,n-1

e(i,j)=0.0

end do

end do

do j=1,n-1

h(j)=x(j+1)-x(j)

end do

do j=1,n

a(j)=y(j)
end do

!Ingreso de los elementos de la matriz ampliada

do i=1,n-2

e(i,i)=2*(h(i)+h(i+1))

end do

do i=1,n-3

e(i+1,i)=h(i+1)

end do

do i=1,n-3

e(i,i+1)=h(i+1)

end do

do i=1,n-2

e(i,n-1)=3*(a(i+2)-a(i+1))/h(i+1)-3*(a(i+1)-a(i))/h(i)

end do

!Resolvue el sistema

!call gaussPivote(e,n-2,z)

!Triangulacion con pivoteo maximo de columna

do k=1,n-3

do i=k+1,n-2

r=-e(i,k)/e(k,k)

do j=k,n-1

e(i,j)=e(i,j)+r*e(k,j)

end do

end do

end do

!Resuelve el sistema hacia atras

z(n-2)=e(n-2,n-1)/e(n-2,n-2)

do i=n-3,1,-1

s=0
do j=i+1,n-2

s=s+e(i,j)*z(j)

end do

z(i)=(e(i,n-1)-s)/e(i,i)

end do

!Calculo de los coeficientes de los splines

c(1)=0

do j=1,n-2

c(j+1)=z(j)

end do

c(n)=0

do j=1,n-1

b(j)=(a(j+1)-a(j))/h(j)-h(j)*(2*c(j)+c(j+1))/3

d(j)=(c(j+1)-c(j))/(3*h(j))

end do

!Imprime de los coeficentes

print*,'ai bi ci di'

do i=1,n-1

!print "(f10.3)",a(i),b(i),c(i),d(i)

write(*,100) a(i),b(i),c(i),d(i)

100 format(f4.1,3f8.3)

end do

print*,' zi'

do i=1,n-2

print*,z(i)

end do

!pause

End
Spline cubico(matlab)

function [a,b,c,d]=spline3(X)

%Pasos básicos del algoritmo obtenidos del libro Análisis Numérico de


%Richard Burden, 2a. Edición, Grupo Editorial Iberoamérica.

n=length(X(1,:));

for i=1:n;
a(i)=X(2,i);
end

for i=1:n-1;
h(i)=X(1,i+1)-X(1,i);
end

for i=2:n-1;
alfa(i)=3/h(i)*(a(i+1)-a(i))-3/h(i-1)*(a(i)-a(i-1));
end

l(1)=1;
mu(1)=0;
z(1)=0;

for i=2:n-1;
l(i)=2*(X(1,i+1)-X(1,i-1))-h(i-1)*mu(i-1);
mu(i)=h(i)/l(i);
z(i)=(alfa(i)-h(i-1)*z(i-1))/l(i);
end

l(n)=1;
z(n)=0;
c(n)=0;

for i=n-1:-1:1;
c(i)=z(i)-mu(i)*c(i+1);
b(i)=(a(i+1)-a(i))/h(i)-h(i)*(c(i+1)+2*c(i))/3;
d(i)=(c(i+1)-c(i))/(3*h(i));
end

for i=1:n-1;
x=X(1,i):0.1:X(1,i+1);
y=a(i)+b(i)*(x-X(1,i))+c(i)*(x-X(1,i)).^2+d(i)*(x-X(1,i)).^3;
hold on;
plot(x,y,'b');
end

for i=1:n;
hold on;
plot (X(1,i),X(2,i),'*','MarkerEdgeColor','r','LineWidth',1);
title('Interpolación por "splines" de orden 3.');
end

Por ejemplo, para los datos {(1,0),(2,3),(3,4),(4,-6),(5,2),(6,4),(7,0),(8,4),(9,3)},


se escribe en el Command Window:

>>X=[1 2 3 4 5 6 7 8 9; 0 3 4 -6 2 4 0 4 3];
>>[m,b]=spline3(X)

Você também pode gostar