BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
Líneas+de+código
1. 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
while abs(fx(x0))>tol || k>c %dos criterios de parada, tolerancia o ciclos
x0=x0-fx(x0)/dfx(x0);
k=k+1; % incremento el ciclo
end
if k>c % si el número de ciclos "k" supera al que he impuesto "c"
raiz = 'no converge'; % no se llega a ningún resultado
else
raiz=x0; % si los ciclos "k" no superan a los "c", solución x0
end