|
| 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