Matlab - Funcion metodo biseccion

 
Vista:

Funcion metodo biseccion

Publicado por Vicente (13 intervenciones) el 01/04/2017 13:29:05
Tengo que hacer una funcion llamada Bisection(f,a,b,tolerancia,errorfun,maxiter) que implemente el metodo de la biseccion, teniendo en cuenta que el error en la raız es la tolerancia = ∆, el error en la funcion es errorfun = e y el numero maximo de iteraciones es maxiter.

• Probarlo con la funcion f (x) = f (x) = x^2 − sin(x) − 0.5

• Implementar la iteracion con: while...end

• Obtener el valor de la raız c para
• Cuando ∆ ≤ 10−3
• Cuando e ≤ 10−3
• Cuando se realicen 4 iteraciones

• Probar los intervalos [0, 2] y [−1, 0]

• ¿Cuantas iteraciones se necesitan si ∆ ≤ 10−5?

El metodo de la biseccion en pseudocodigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Bisection (f(x),a,b,ε,Δ,n)
 
  i:=0
  h:=abs(b-a)
  repetir
  i:=i+1
  c:=(a+b)/2
  h:=h/2
 
 si signo(f(a))*signo(f(c))<0
   entonces b:=c
   si no a:=c
 hasta (abs(f(c))≤ε) ó (h≤Δ) ó (i=n)
 
devolver c
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

Funcion metodo biseccion

Publicado por Vicente (13 intervenciones) el 04/04/2017 18:01:25
Lo tengo sin la tolerancia y con el for en vez del while

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
function [ X ] = Bisection(f,a,b,e,n)
    %Metodo de Biseccion
    %f: funcion 
    %n: numero de iteracion
    %a y b: intervalo [a,b]
    %e: error permitido
    a(1) = a;
    b(1) = b;
    for i = 1:n
        m(i) = (a(i) + b(i))/2;
        x = a(i);
        Fa = eval(f);
        x = m(i);
        Fb = eval(f);
        if(Fa*Fb) < 0
            a(i+1) = a(i);
            b(i+1) = m(i);
        else
            a(i+1) = m(i);
            b(i+1) = b(i);
        end
 
        X(i,1) = i;
        X(i,2) = a(i);
        X(i,3) = b(i);
        X(i,4) = m(i);
 
        if i > 1
            Ea = abs((m(i) - m(i-1))/m(i))*100;
            X(i,5) = Ea;
            if Ea < e
                break;
            end
        end
 
    end
    end

Y para llamar a la funcion

1
2
3
4
5
syms x;
f = x^2 -sin(x) -0.5;
 
% funcion f | intervalo [0,2] | tolerancia 10^-3 | error = 10^-3 | n = 4 
Bisection(f,0,2,10^-3,4)
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Funcion metodo biseccion

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 04/04/2017 20:39:40
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
function [ X ] = Bisection(f,a,b,e,n)
    %Metodo de Biseccion
    %f: funcion 
    %n: numero de iteracion
    %a y b: intervalo [a,b]
    %e: error permitido
    a(1) = a;
    b(1) = b;
    i=1;
    while i<=n
        m(i) = (a(i) + b(i))/2;
        x = a(i);
        Fa = eval(f);
        x = m(i);
        Fb = eval(f);
        if(Fa*Fb) < 0
            a(i+1) = a(i);
            b(i+1) = m(i);
        else
            a(i+1) = m(i);
            b(i+1) = b(i);
        end
 
        X(i,1) = i;
        X(i,2) = a(i);
        X(i,3) = b(i);
        X(i,4) = m(i);
 
 
        if i > 1
            Ea = abs((m(i) - m(i-1))/m(i))*100;
            X(i,5) = Ea;
            if Ea < e
                break;
            end
        end
 i=i+1;
    end
    end
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