Skip to content

Instantly share code, notes, and snippets.

@jorgeteixe
Created November 18, 2020 12:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jorgeteixe/891bc8890aecc22d02391a6d8ee68442 to your computer and use it in GitHub Desktop.
Save jorgeteixe/891bc8890aecc22d02391a6d8ee68442 to your computer and use it in GitHub Desktop.
## Copyright (C) 2020 Jorge Teixeira Crespo
##
## dicotomia(función, intervalo, error, información)
##
## Uso:
##
## función: puntero a la función a analizar.
##
## intervalo: intervalo a analizar de la función. [izq drcha]
##
## error: margen de error con el que parar.
##
## información: 1 o 0, mostrar información del proceso. Default: 0
##
##
## Ejemplos:
##
## dicotomia(@func, [0 10], 1/1000, 1)
## Analiza el intervalo de 0 a 10 con dicotomía, aproximando las milésimas,
## mostrando el proceso, de la función "func"
##
## dicotomia(@func, [-10 10], 1/10)
## Analiza el intervalo de -10 a 10 con dicotomía, aproximando 0.1,
## sólo mostrando el resultado, de la función "func".
##
##
## Author: jorge.teixeira <jorge.teixeira@udc.es>
## Created: 2020-11-16
function y = dicotomia (f, int, maxerr, v = 0)
i = 0;
do
i++;
m = (int(1)+int(2))/2;
if(feval(f, int(1))*feval(f, m)<0)
if(v)
printf("---------------------%d--------------------\n", i)
printf("Intervalo analizado: [%.4f %.4f]\n", int(1),int(2))
printf("Punto medio: %.4f\n",m)
printf("Raíz en: [ X | ]\n")
printf("Error: %.4f\n", abs(int(1)-int(2))/2)
endif
int = [int(1),m];
endif
if(feval(f, int(2))*feval(f, m)<0)
if(v)
printf("---------------------%d--------------------\n", i)
printf("Intervalo analizado: [%.4f %.4f]\n", int(1),int(2))
printf("Punto medio: %.4f\n",m)
printf("Raíz en: [ | X ]\n")
printf("Error: %.4f\n", abs(int(1)-int(2))/2)
endif
int = [m,int(2)];
endif
until(abs(int(1)-int(2))/2<maxerr)
m = (int(1)+int(2))/2;
if(v)
printf("------------------------------------------\n")
endif
printf("Intervalo final: [%.4f %.4f]\n", int(1),int(2))
printf("Resultado aproximado: %.4f\n",m)
printf("Iteraciones realizadas: %d\n",i+1)
endfunction
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment