Matlab - Ciclo for

 
Vista:
sin imagen de perfil
Val: 1
Ha disminuido su posición en 41 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Ciclo for

Publicado por Alejandro (1 intervención) el 12/09/2018 01:10:26
Hola buenas, quería saber si alguien me puede ayudar a cómo hacer un ciclo for para el método de biseccion que no se detenga hasta que se cumpla la sentencia de que la tolerancias debe ser menos al error
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Ciclo for

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 12/09/2018 05:30:48
lo más recomendable cuando tienes una condición no es for sino while, te dejo un ejemplo del método de bisección con un polinomio :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
% MÉTODO DE BISECCIÓN
clear all, clc
format long
tol=0.00000000001; % Se permiten 10 cifras decimales de exactitud
exactitud=1; % Se asume un valor inicial de la exactitud para poder iniciar un while
n=1; % Contador
a0=-1.9; % Inicio del intervalo a evaluar
b0=-0.8; % Final del intervalo a evaluar
c0=(a0+b0)/2; % Mitad del primer intervalo
y=@(x) x^7-(2*x^6)-(4*x^5)+(10*x^4)-(x^3)-(8*x^2)+(4*x);%funcion 
while exactitud>=tol
    fa=y(a0); % La función evaluada en el inicio del intervalo a evaluar
    fb=y(b0); % La función evaluada en el final del intervalo a evaluar
    fc=y(c0); % La función evaluada en promedio del intervalo a evaluar
    resultado(n,:)=[n a0 b0 c0 fc]; % Registro de resultados
    if fa*fc>0 && fc*fb>0
        disp('No hay cambio de signo')
        return
    elseif fa*fc<=0
        a0=a0; % a sigue siendo a
        b0=c0; % Se actualiza el valor de b
        c=(a0+b0)/2;
        exactitud=abs(c-c0);
        c0=c;
        n=n+1;
    elseif fc*fb<=0
        a0=c0; % Se actualiza el valor de a
        b0=b0; % b sigue siendo b
        c=(a0+b0)/2;
        exactitud=abs(c-c0);
        c0=c;
        n=n+1;
    end
end
disp(resultado)

sin embargo si por alguna razón necesitas obligatoriamente un for entonces el código quedaría así :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
% MÉTODO DE BISECCIÓN
clear all, clc
format long
tol=0.00000000001; % Se permiten 10 cifras decimales de exactitud
exactitud=1; % Se asume un valor inicial de la exactitud para poder iniciar un while
n=1; % Contador
a0=-1.9; % Inicio del intervalo a evaluar
b0=-0.8; % Final del intervalo a evaluar
c0=(a0+b0)/2; % Mitad del primer intervalo
y=@(x) x^7-(2*x^6)-(4*x^5)+(10*x^4)-(x^3)-(8*x^2)+(4*x);%funcion 
for i=-inf:inf
    fa=y(a0); % La función evaluada en el inicio del intervalo a evaluar
    fb=y(b0); % La función evaluada en el final del intervalo a evaluar
    fc=y(c0); % La función evaluada en promedio del intervalo a evaluar
    resultado(n,:)=[n a0 b0 c0 fc]; % Registro de resultados
    if fa*fc>0 && fc*fb>0
        disp('No hay cambio de signo')
        return
    elseif fa*fc<=0
        a0=a0; % a sigue siendo a
        b0=c0; % Se actualiza el valor de b
        c=(a0+b0)/2;
        exactitud=abs(c-c0);
        c0=c;
        n=n+1;
    elseif fc*fb<=0
        a0=c0; % Se actualiza el valor de a
        b0=b0; % b sigue siendo b
        c=(a0+b0)/2;
        exactitud=abs(c-c0);
        c0=c;
        n=n+1;
    end
    if exactitud<tol
 
        break;
    end
end
disp(resultado)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar