Demo entry 6353536

inv

   

Submitted by anonymous on Apr 01, 2017 at 22:37
Language: TeX. Code size: 1.7 kB.

function [ x ] = interp_cuad_inv( f,a,b,nmax,tol )
%INTERPOLACIÓN CUADRÁTICA INVERSA
%   ENTRADA_________________
% - f: Función igualada a 0
% - [a,b]: Intervalo de búsqueda de raices
% - nmax: número máximo de iteraciones
% - tol: Tolerancia
%   SALIDA_________________
% - x: aproximación a la raiz alpha de f en el intervalo [a,b]
%   FUNCIONES DEL PROBLEMA Y SUS INTERVALOS [F(x) = 0]
% - F1 = 'sqrt(x)*sin(x)-x^3+2' [0,50]
% - F2 = '(cos(2*x))^2-x^2' [0,50]
% - F3 = '2*x^4+4*x^2+7*x+2' [-50,0]
%_______________________________________________________________

f = inline( f ); fx = tol + 1; iter = 1;

fprintf('  n       a           x           b         |f(x)|\n');
fprintf('-------------------------------------------------\n');

while( abs( fx ) > tol && iter <= nmax ) %Condición de parada de iteraciones
c=(a+b)/2; 
xp=[f(a),f(b),f(c)]; yp=[a,b,c];
p=ifN(xp,yp);p=inline(p); x=p(0); fx=f(x);
fprintf(' %2d % .8f % .8f % .8f % .1e\n',iter, a, x, b, abs(f(x)) ); iter = iter + 1;

%Bucle principal de posiciones, primero distingo la posibilidad de que x
%sea mayor o menor que el punto medio c. Dentro de esas dos opciones
%distingo también si el cambio de signo está entre c y x o entre x y un
%extremo (a ó b dependiendo de si x<c o x>c)
    if x<c
        if f(x)*f(a)<0
        b=x;
        elseif f(x)*f(c)<0
        a=x; b=c;
        else    %------------>  CONDICIÓN MUY PARTICULAR (x<c pero alpha>c)
            a=x; %b=b
        end;
    end
    
    if x>c
        if f(x)*f(c)<0
        a=c; b=x;
        elseif f(x)*f(b)<0
        a=x;
        else      %---------------> CONDICIÓN MUY PARTICULAR (x>c pero alpha<c)
        x=b; %a=a
        end
    end
end
    
end

This snippet took 0.00 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).