Líneas+de+código

2
MÉTODO BISECCIÓN function [raiz]=biseccion(def,x0,x1,tol) f=inline(def); % para poder declarar f(x0), f(x1)... if f(x0)*f(x1)<0 % para asegurarnos que existe la raíz x=x0; while abs(f(x))>tol % comienza el bucle x=(x0+x1)/2; % fórmula bisección(punto medio del intervalo es "x") if f(x0)*f(x)<0 % si cambia de signo entre el punto medio y x0 x1=x; % cambio el punto medio por x1 else % de lo contrario cambio x0 por el punto medio x0=x; end end raiz=x; % la raíz es el último punto medio else raiz=0; disp('no hay cambio de signo'); end MÉTODO RÉGULA FALSI / FALSA POSICIÓN function [y]=falsap(h,a,b,tol) f=inline(h); % para poder escribir f(a) f(b) c=(a*f(b)-b*f(a))/(f(b)-f(a)); %formula regula falsi, primer valor de c % el contador error=abs(f(c)); % el error es la ordenada en c while (error>tol) % mientras que el valor de f(c) sea mayor que la tolerancia se repetite el bucle c=(a*f(b)-b*f(a))/(f(b)-f(a)); if f(a)*f(c)<0 b=c; else a=c; end error=(f(c)); % el error es la última ordenada en c end y=c; % la solución es “y”, así que el último c se iguala a y MÉTODO DE NEWTON function[raiz]=newton(def,x0,c,tol) % c = número de ciclos syms x % al tener que derivar, tengo que declarar "x" f=sym(def); df=diff(f); % creo la función derivada de la anterior para escribir dfx(x) fx=inline(char(f)); % creo la función “fx” para poder escribir “fx(x0)” dfx=inline(char(df)); k=1; % variable para contar ciclos

Transcript of Líneas+de+código

Page 1: Líneas+de+código

MÉTODO BISECCIÓN

function [raiz]=biseccion(def,x0,x1,tol)f=inline(def); % para poder declarar f(x0), f(x1)...if f(x0)*f(x1)<0 % para asegurarnos que existe la raíz x=x0; while abs(f(x))>tol % comienza el bucle x=(x0+x1)/2; % fórmula bisección(punto medio del intervalo es "x") if f(x0)*f(x)<0 % si cambia de signo entre el punto medio y x0 x1=x; % cambio el punto medio por x1 else % de lo contrario cambio x0 por el punto medio x0=x; end end raiz=x; % la raíz es el último punto medioelse raiz=0; disp('no hay cambio de signo');end

MÉTODO RÉGULA FALSI / FALSA POSICIÓN

function [y]=falsap(h,a,b,tol)f=inline(h); % para poder escribir f(a) f(b)c=(a*f(b)-b*f(a))/(f(b)-f(a)); %formula regula falsi, primer valor de c % el contador error=abs(f(c)); % el error es la ordenada en cwhile (error>tol) % mientras que el valor de f(c) sea mayor que la tolerancia se repetite el bucle c=(a*f(b)-b*f(a))/(f(b)-f(a)); if f(a)*f(c)<0 b=c; else a=c; end error=(f(c)); % el error es la última ordenada en c endy=c; % la solución es “y”, así que el último c se iguala a y

MÉTODO DE NEWTON

function[raiz]=newton(def,x0,c,tol) % c = número de ciclossyms x % al tener que derivar, tengo que declarar "x"f=sym(def); df=diff(f); % creo la función derivada de la anterior para escribir dfx(x)fx=inline(char(f)); % creo la función “fx” para poder escribir “fx(x0)”dfx=inline(char(df));k=1; % variable para contar cicloswhile abs(fx(x0))>tol || k>c %dos criterios de parada, tolerancia o ciclos x0=x0-fx(x0)/dfx(x0); k=k+1; % incremento el cicloendif k>c % si el número de ciclos "k" supera al que he impuesto "c" raiz = 'no converge'; % no se llega a ningún resultadoelse raiz=x0; % si los ciclos "k" no superan a los "c", solución x0end