Matlab - Método de la Interpolación lineal

   
Vista:

Método de la Interpolación lineal

Publicado por Jaime Martínez (4 intervenciones) el 22/11/2014 13:00:57
Hola.
Tengo un problema a la hora de programar distintos métodos para el cálculo de raíces de una función.
En un procedimiento concreto llamado método de la biseccción me gustaría que la función me devolviese el número de iteraciones, así como poder dibujar las sucesivas gráficas en cada iteración.
Mi código es el siguiente:

function [x,it]=bisecc(f,a,b)
%Cómo expresar el número de iteraciones it y la utilización del fprint
tol=input('Tolerancia:');
fa=feval(f,a);
fb=feval(f,b);
if fa*fb>=0
disp('No se puede encontrar raíz con este método')
else
c=(a+b)/2;
fc=feval(f,c);
it=0;
while abs(fc)>tol
if fa*fc<0
b=c;
fb=fc;
else
a=c;
fa=fc;
end
it=it+1;
fprintf('\n %i %f %f',it,c,fc);
c=(a+b)/2;
fc=feval(f,c);
end
x=c;
end





Gracias y un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Método de la Interpolación lineal

Publicado por Jose (1 intervención) el 22/11/2014 22:01:42
Puedes hacerle las siguientes modificaciones a tu código.

function [x,it]=bisecc(f,a,b,tol)
%Cómo expresar el número de iteraciones it y la utilización del fprint
%[x,it]=bisecc(f,a,b,tol)
%tol=input('Tolerancia:');
close all
figure(gcf)
fplot(f,[a,b]);
grid on
hold on
f=inline(f);
fa=feval(f,a);
fb=feval(f,b);
if fa*fb>0
disp('No se puede encontrar raíz con este método')
else
c=(a+b)/2;
fc=feval(f,c);
% plot(c,fc,'*r')
it=0;
text(c,fc,num2str(it));
while abs(fc)>tol
if fa*fc<0
b=c;
fb=fc;
else
a=c;
fa=fc;
end
it=it+1;
fprintf('\n %3d %9.6f %9.6f',it,c,fc); %d es entero
c=(a+b)/2;
fc=feval(f,c);
text(c,fc,num2str(it));
pause(3)
end
x=c;
end

Saludos
José
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Método de la Interpolación lineal

Publicado por Jaime Martínez (4 intervenciones) el 24/11/2014 16:57:25
Muchas gracias por la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar