Derivacion hacia atraza
Enviado por Albert • 20 de Octubre de 2017 • 1.660 Palabras (7 Páginas) • 362 Visitas
...
a=input('Ingrese el valor inicial en x: ');
b=input('Ingrese el valor final de x: ');
n=input('Ingrese el numero de subintervalos: ');
h=(b-a)/n;
funcion=inline(funcion1);
ejex=zeros(1,n+1);
ejey=zeros(1,n+1);
ejex=a:h:b;
funder=diff(funcion1);
funder=inline(funder);
tic;
for j=1:n
ejex1(j)=ejex(j)+h;
ejex2(j)=ejex(j)-h;
res(j)=(feval(funcion,ejex1(j))-feval(funcion,ejex2(j)))/(2*h);
resfun(j)=feval(funder,ejex(j));
Error(j)=((resfun(j)-res(j))/resfun(j))*100;
Error(j)=abs(Error(j));
end
Tiempo=toc;
mm=length(res);
fprintf('x(aproximado)\t\t x(teórico)\t\t Error \n')
for h=1:mm
fprintf('%f\t\t\t %f\t\t\t %f\t\t\n',res(h),resfun(h),Error(h))
end
ezplot(funcion1,[a-5,b+5])
hold on
for m=1:n
title('Comparacion con Valor Real (Derivacion Centrada)')
hold on
plot(ejex(m),res(m),'ro')
hold on
plot(ejex(m),resfun(m),'k+')
legend('FUNCION','APROXIMADO','REAL')
end
case 2
syms x
m=input('Ingrese el número de puntos a evaluar: '); %Almacenamos el numero de puntos en los que será evaluada la función
%Declaramos un bucle para almacenar los valores ingresados
i=1;
while i
fprintf('Ingrese el valor para x%d', i)
q(i)=input(': '); %Ingresamos valores para cada posición de x
aux=0;
for j=1:i
if q(j)==q(i)
aux=aux+1;
end
end
fprintf('Ingrese el valor para f(x%d)',i)
f(i)=input(': '); %Ingresamos valores para cada posición de x
i=i+1;
end
%Declaramos un bucle para ordenar los numeros en forma creciente
for i=1:m
for j=1:m-i
if q(j)>q(j+1)
aux=q(j);
aux2=f(j);
q(j)=q(j+1);
f(j)=f(j+1);
q(j+1)=aux;
f(j+1)=aux2;
end
end
end
fprintf('\n')
disp('TABLA') %Mostramos una tabla con los valores ingresados y evaluados
fprintf('\tx\t\t\t\tf(x)\n')
for i=1:m
fprintf('%f\t\t\t',q(i))
disp(vpa(f(i),5))
end
%realizamos la interpolación de los pntos ingresados con el método
%de lagrange
%declaramos las variables
yi=0;
pol='0';
%bucle que realiza la suma de los coeficientes
for k=1:m
%inicializamos variables
producto=f(k);
termino=num2str(f(k));
%bucle que encuentra los coeficientes de lagrange
for r=1:m
if k~=r
producto=producto*(x-q(r))/(q(k)-q(r));
termino=strcat(termino,'*(x-',num2str(q(r)),')/(',num2str(q(k)),'-',num2str(q(r)),')');
end
end
%sumamos los resultados obtenidos
yi=yi+producto;
pol=strcat(pol,'+',termino);
end
pol=sym(pol); %convertimos a simbolico
funcion1=simplify(pol); %simplificamos el polinomio
funcion=inline(funcion1); %realizamos inline de la funcion
xinicial=q(1);
...