Skip to content

Commit ec54f1b

Browse files
authored
Add files via upload
1 parent ccd5a14 commit ec54f1b

File tree

2 files changed

+151
-0
lines changed

2 files changed

+151
-0
lines changed

BusquedaPorIntervalosAUTO.m

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
function BusquedaPorIntervalosAUTO(f,Inicio,Fin,Incremento)
2+
%Autor: Rolando Valdez Guzmán
3+
%Alias: Tutoingeniero
4+
%Canal de Youtube: https://www.youtube.com/channel/UCU1pdvVscOdtLpRQBp-TbWg
5+
%Versión: 1.0
6+
%Actualizado: 17/jun/2020
7+
8+
%Búsqueda por Intervalos (versión función) ESPAÑOL
9+
%Llama a esta función desde la ventana de comandos o cualquier script para
10+
%iniciar una búsqueda por intervalos de todas las raíces de una función que
11+
%hay en un rango determinado y evalua todos los intervalos encontrados que
12+
%contengan raíces con uno de los tres métodos cerrados que cree
13+
%previamente.
14+
15+
% ESTA FUNCION PIDE LOS SIGUIENTES DATOS DE ENTRADA:
16+
17+
% f=función como un identificador de función (function handle)
18+
% ej. @(x) cos(x)
19+
% Inicio=Valor inicial del rango de búsqueda.
20+
% Fin=Valor final del rango de búsqueda.
21+
% Incremento=Valor incremental para ir de Inicio hasta Fin.
22+
23+
%NOTA: Esta función usa los códigos BiseccionFcn.m, ReglaFalsaFcn.m y
24+
%ReglaFalsaModFcn.m que hice previamente y NO funcionará sin estos códigos. Puedes
25+
%obtener todos los códigos en estos dos enlaces:
26+
%?https://github.com/RolaValdez/Metodos-numericos-Numerical-Methods
27+
%?https://www.mathworks.com/matlabcentral/fileexchange/77031-libreria-de-metodos-numericos-numerical-methods-library
28+
29+
j=1;
30+
for i=Inicio:Incremento:Fin
31+
xl=i; %Límite inferior actual.
32+
xu=i + Incremento; %Límite superior actual.
33+
fxl=f(xl); %Punto en Y para el límite inferior.
34+
fxu=f(xu); %Punto en Y para el límite superior.
35+
36+
if fxl*fxu > 0 %Esta propiedad es la que hace que éste sea un método cerrado.
37+
continue %Si no hay una raíz entre xl y xu, pasa a la siguiente iteración.
38+
else
39+
x(j,:)=[xl xu]; %Si hay una raíz, guardar ese intervalo actual en un arreglo.
40+
j=j+1;
41+
end
42+
end
43+
44+
disp(newline);
45+
fprintf('Raíces encontradas: %d \n',j-1);
46+
disp('Intervalos que contienen una raíz');
47+
x
48+
49+
a=input('Evaluar límites con Bisección (1), Regla Falsa (2) o Regla Falsa Modificada (3) : ');
50+
b=input('Número de iteraciones: ');
51+
c=input('Tolerancia para converger: ');
52+
53+
if a==1 %Evaluar todos los intervalos que contienen a una raíz con cualquiera de estos tres métodos.
54+
for i=1:size(x,1)
55+
[M,XR,ER,Iter]=BiseccionFcn(f,x(i,1),x(i,2),b,c);
56+
end
57+
elseif a==2
58+
for i=1:size(x,1)
59+
[M,XR,ER,Iter]=ReglaFalsaFcn(f,x(i,1),x(i,2),b,c);
60+
end
61+
elseif a==3
62+
for i=1:size(x,1)
63+
[M,XR,ER,Iter]=ReglaFalsaModFcn(f,x(i,1),x(i,2),b,c);
64+
end
65+
end
66+
end

BusquedaPorIntervalosMANUAL.m

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
%Autor: Rolando Valdez Guzmán
2+
%Alias: Tutoingeniero
3+
%Canal de Youtube: https://www.youtube.com/channel/UCU1pdvVscOdtLpRQBp-TbWg
4+
%Versión: 1.0
5+
%Actualizado: 17/jun/2020
6+
7+
%Búsqueda por intervalos versión interactiva ESPAÑOL
8+
%Grafica una función y desplaza la gráfica a la izquierda o derecha con las
9+
%flechas del teclado ? ? y/o acércate o aléjate con ? ?, cuando estés listo,
10+
%presiona Enter para activar la mira de francotirador y selecciona
11+
%manualmente intervalos que contengan a una raíz. Cuando termines de
12+
%seleccionar intervalos, presiona Enter de nuevo y obtendrás las
13+
%coordenadas X que contienen raíces en una sola variable.
14+
15+
%NOTA: Esta función usa los códigos BiseccionFcn.m, ReglaFalsaFcn.m y
16+
%ReglaFalsaModFcn.m que hice previamente y NO funcionará sin estos códigos. Puedes
17+
%obtener todos los códigos en estos dos enlaces:
18+
%?https://github.com/RolaValdez/Metodos-numericos-Numerical-Methods
19+
%?https://www.mathworks.com/matlabcentral/fileexchange/77031-libreria-de-metodos-numericos-numerical-methods-library
20+
21+
%% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Setup~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%
22+
23+
clc; clear all;
24+
25+
global f intervalo lims %Variables globales
26+
f=@(x) x*sin(x) - sqrt(x); %Función anónima a gráficar.
27+
intervalo=[-10 10]; %Intervalo inicial de graficación.
28+
h=figure('WindowKeyPressFcn',@DesplazarGrafica,'DeleteFcn',@Cerrar); %Funciones auxiliares.
29+
fplot(f,intervalo); %Graficar.
30+
line(intervalo,[0 0],'Color','k','LineWidth',1); %Resaltar el eje X.
31+
grid on
32+
33+
%%
34+
function DesplazarGrafica(h,event)
35+
global f intervalo lims
36+
switch event.Key
37+
case 'leftarrow' %Si presionas la flecha izquierda, desplazar la gráfica a la izquierda.
38+
intervalo=intervalo-1;
39+
case 'rightarrow' %Si presionas la flecha derecha, desplazar la gráfica a la derecha.
40+
intervalo=intervalo+1;
41+
case 'downarrow' %Si presionas la flecha abajo, alegar la gráfica.
42+
intervalo=intervalo + [-1 1];
43+
case 'uparrow' %Si presionas la flecha arriba, acercar la gráfica.
44+
intervalo=intervalo + [1 -1];
45+
end
46+
47+
fplot(f,intervalo); %Actualizar la gráfica.
48+
line(intervalo,[0 0],'Color','k','LineWidth',1);
49+
grid on
50+
51+
%Cuando termines de mover la gráfica, presiona enter.
52+
switch event.Key
53+
case 'return'
54+
[x,y]=ginput; %Activa la mira de francotirador y selecciona puntos de la gráfica.
55+
j=1;
56+
for i=1:length(x)/2 %Guarda todas las coordenadas X de los puntos elegidos en un arreglo
57+
lims(i,:)=[x(j) x(j+1)];
58+
j=j+2;
59+
end
60+
%Cuando termines de elegir puntos, presiona enter de nuevo.
61+
end
62+
end
63+
64+
function x=Cerrar(figure,event) %Cuando cierres la gráfica, evalua los intervalos elegidos con un método.
65+
global f lims
66+
x=lims
67+
a=input('Evaluar límites con Bisección (1), Regla Falsa (2) o Regla Falsa Modificada (3) : ');
68+
b=input('Número de iteraciones: ');
69+
c=input('Tolerancia para converger: ');
70+
71+
if a==1
72+
for i=1:size(x,1)
73+
[M,XR,ER,Iter]=BiseccionFcn(f,x(i,1),x(i,2),b,c);
74+
end
75+
elseif a==2
76+
for i=1:size(x,1)
77+
[M,XR,ER,Iter]=ReglaFalsaFcn(f,x(i,1),x(i,2),b,c);
78+
end
79+
elseif a==3
80+
for i=1:size(x,1)
81+
[M,XR,ER,Iter]=ReglaFalsaModFcn(f,x(i,1),x(i,2),b,c);
82+
end
83+
end
84+
end
85+

0 commit comments

Comments
 (0)