Está en la página 1de 6

PROGRAMAS DE INTERPOLACION

Byron Astudillo 1, Pedro Rojas2, Omar Carrillo3, Docente: Mgt.


Paul Álvarez4
Universidad de Cuenca, Facultad de Ciencias Químicas, Carrera de Ingeniería Industrial
Asignatura: Métodos Numéricos, Cuenca – Ecuador, Fecha de entrega: 03-05- 2018

MÉTODO INTERPOLACIÓN LINEAL


clc
close all
clear all
disp('JOSUE ASTUDILLO, OMAR CARRILLO, PEDRO ROJAS')
disp('los valores deben ser ingresados de la forma entre corchetes')
xi=input('INGRESE LOS VALORES DE X: '); %ingreso de los datos en x
yi=input('INGRESE lOS VALORES DE Y: '); %ingreso de los datos en y
x=input('INGRESE X A INTERPOLAR: '); % dato a interpolar
y_x=yi(1,1)+((x-xi(1,1))./(xi(1,2)-xi(1,1)))*(yi(1,2)-yi(1,1))% ecuación de
interpolación

MÉTODO INTERPOLACIÓN DE LAGRANGE

clc %permite borrar el área de trabajo


clear %permite borrar las variables almacenadas
format long %permite utilizar la máxima capacidad de la maquina
disp('JOSUE ASTUDILLO, OMAR CARRILLO, PEDRO ROJAS')
disp('INTERPOLACIÓN "POLINIMIO DE LAGRANGE"');
%fprintf permite ingresar comentarios de manera textual que pueden
%orientar al usuario en el uso del programa

xi=input('Ingrese los puntos pertenecientes a las x: ');


yi=input('Ingrese los puntos pertenecientes a las y: ');
%input es un comando de solicitud de entrada de datos del usuario.
n=length(xi);
x=sym('x'); %esta función nos permite dejar la variable 'x' como simbólica
% y así poder trabajar con ella, sin tener que asignarle un valor.
for j=1:n
producto=1;
for i=1:j-1
producto=producto*(x-xi(i)); %cálculo del producto 1 superior de L
end
producto2=1;
for i=j+1:n
producto2=producto2*(x-xi(i)); %cálculo del producto 2 superior de L
end
producto3=1;
for i=1:j-1
producto3=producto3*(xi(j)-xi(i)); %cálculo del producto 3 inferior de L
end
producto4=1;
for i=j+1:n
producto4=producto4*(xi(j)-xi(i)); %cálculo del producto 4 inferior de L
end
L(j)=(producto*producto2)/(producto3*producto4); %cálculos de las L para
fprintf('\n L%d:\n',j-1) %poder hallar el polinomio
disp(L(j)) %la función disp nos permite visualizar variables o texto

1
% en el workspace
end
pn=0;
for j=1:n
pn=pn+L(j)*yi(j); %cálculo del polinomio interpolante
end
fprintf('\n POLINOMIO INTERPOLANTE: \n')
%disp(pn) % esta ejecución la podemos utilizar cuando no necesitamos
%simplicar la expresión
pn = simple(pn); %este comando nos permite simplificar toda la expresión
disp(pn)

opc=input('\nDesea aproximar un valor (si/no): ','s');


%este comando nos permite saber si el usuario quiere obtener una
%aproximacion de un punto dado, en el polinomio que se acaba de obtener
if opc=='si'
x=input('\nIngrese el punto a aproximar: ');
y=eval(pn); %evaluar el punto en el polinomio
disp('\nLa aproximación a f(x) es:')
disp(y)
end

MÉTODO INTERPOLACIÓN DE NEWTON HACIA ADELANTE

lear all
clc
disp('JOSUE ASTUDILLO, OMAR CARRILLO, PEDRO ROJAS')
n=input('Ingrese el valor de n: ');%requerimientos de datos de entrada
fprintf('Se necesitan %.0f puntos: \n',n+1);% usamos fprintf para dar saltos de
línea e ingresar strings y números
disp('los valores deben ser ingresados entre corchetes')
x=input('ingrese los valores de x:');% datos de entrada de x
y=input('ingrese los valores de y:');% datos de entrada de x

M=zeros(n+1);% creamos una matriz de ceros de nxn


M(:,1)=y; %llenamos la matriz en todas las filas en la columna 1
m=n+1; %número de datos
for i=2:m %ciclo for para el calculo de la tabla
for j=2:m
M(j-1,i)=(M(j,i-1)-M(j-1,i-1))
end
m=m-1;
end
disp('matriz de diferencias divididas');
disp(M);
disp('El polinomio de newton es');
syms x;
NA=M(1,1)+(x/0.4)*M(1,2)+0.5*(x/0.4)*((x/0.4)-
1)*M(1,3)+(1/6)*M(1,4)*(x/0.4)*((x/0.4)-1)*((x/0.4)-2)

MÉTODO DE RAÍCES POR BISECCIÓN

clc
close all
clear all
disp('JOSUE ASTUDILLO, OMAR CARRILLO, PEDRO ROJAS')

2
f=input('Ingrese la función: ','s'); %requerimiento de la función a evaluar
x1=input('Ingrese mínimo del intervalo: '); % intervalo menor en X
x2=input('Ingrese máximo del intervalo: '); % intervalo mayor en Y
e=input('Ingrese el nivel de error: '); % nivel de error
f=inline(f); %desarrollar analíticamente de una o más entradas

if (f(x1))*(f(x2))>0 % comparación del intervalo si es mayor a cero se descarta


el intervalo a b
fprintf('No existe raíz, ingrese otro intervalo')
return
end

n=ceil(log((x2-x1)/e)/log(2)); % el comando ceil nos sirve para redondear al


entero más grande
for i=1:n; % bucle for para trabajar en el nuevo intervalo
b= (x1+x2)/2;
if f(x1)*f(b)<0 % comparación del intervalo en caso que cumpla se asigna el
valor de x2 a b
x2=b;
else x1=b; % de no ser así, asigna al intervalo a
end
end
fprintf('la raiz es %d',b); % impresión de la raíz
ezplot(f);

MÉTODO DE RAÍCES POR FALSA POSICIÓN MODIFICADA

clc
close all
clear all
disp('JOSUÉ ASTUDILLO, OMAR CARRILLO, PEDRO ROJAS')
f=input('Ingrese la función f(x): ','s');
a=input('Ingrese el valor mínimo del intervalo: ');
c=input('Ingrese el valor máximo del intervalo: ');
e=input('Ingrese el nivel de error esperado: ');
f=inline(f);
if f(a)*f(c)>0 %Si no se cumple el cambio de signo, no hay raíces
fprintf('No existen raíces en el intervalo dado')
return
end
n=ceil((log((c-a)/e)/log(2))); %Devuelve el inmediato superior del resultado
for i=1:n %Iteraciones irán de 1 a n
b=((a*f(c))-(c*f(a)))/(f(c)-f(a)); %Fórmula de punto de corte de la recta
if f(a)*f(b)<0 %Comprobación de cambio de signo
c=b;
else
a=b;
end
end

ezplot(f)
fprintf('La raíz buscada es: %d',b)

MÉTODO DE RAÍCES POR NEWTON RHAPSON

clc

3
close all
clear all
disp('JOSUÉ ASTUDILLO, OMAR CARRILLO, PEDRO ROJAS')
syms x
%Introducimos la función, el punto de inicio y el porcentaje de error
f=input('Introduzca la función f(x):');
Xn=input('Introduzca el punto de inicio:');
e=input('Porcentaje de error:');
%Calculamos la derivada de la función
d=diff(f);
d=inline(d);
f=inline(f);
ea=100;
i=0;
while ea>e
%Aproximamos la raíz con la fórmula correspondiente
Xi=Xn-(f(Xn)/d(Xn));
%Calculamos el porcentaje de error
ea=abs(((Xi-Xn)/Xi)*100);
Xn=Xi;
i=i+1;
end
fprintf('La raíz es: %d',Xn)
%Graficamos la función
ezplot(f)
grid on

MÉTODO DE RAÍCES POR SECANTE

clc
close all
clear all
disp('JOSUÉ ASTUDILLO, OMAR CARRILLO, PEDRO ROJAS')
syms x
%Introducimos la función,los puntos xi-1,xi,así como el error
f=input('Ingrese la función f(x):');
x1=input('Ingrese el punto xi-1:');
x2=input('Ingrese el punto xi:');
e=input('Error deseado:');
f=inline(f);
ea=100;
i=0;
%Imprimiremos en pantalla una tabla con las raices aproximadas por cada
%iteración fprintf('Iteración: Raiz\n')
while ea>e
%Aproximamos la raiz con la fórmula correspondiente
xi=x2-f(x2)*((x1-x2)/(f(x1)-f(x2)));
%Calculamos el porcentaje de error
ea=abs(((xi-x2)/xi)*100);
x1=x2;
x2=xi;
i=i+1;
end
fprintf('La raíz buscada es: %d',xi)
%Graficamos la función
ezplot(f)
grid on

4
5
6

También podría gustarte