Matlab - error: index (2): out of bound 1

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

error: index (2): out of bound 1

Publicado por Rodrigo (3 intervenciones) el 14/11/2020 06:01:52
Hola buenas, tengo que hacer un método de bisección en Octave y al compilar me arroja este error "error: index (2): out of bound 1" Called from "f at line 3 column 4" , como puedo solucionar esto?

El código que genera el método es:

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
40
41
42
function x=Biseccion(f,a,b,tol,N)
  f=@f;
  i=1;
 
  a(1)=a;
  b(1)=b;
  x(1)=(a(1)+b(1))/2;
 
        if f(a(1))*f(x(1))<0
 
    a(2)=a(1);
    b(2)=x(1);
 
        else
 
    a(2)=x(1);
    b(2)=b(1);
 
      endif
 
  x(2)=(a(2)+b(2))/2;
 
  while  abs(x(i+1)-x(i))>tol && i<=N
 
if f(a(i+1))*f(x(i+1))<0
 
     a(i+2)=a(i+1);
     b(i+2)=x(i+1);
 
   else
 
     a(i+2)=x(i+1);
     b(i+2)=b(i+1);
 
endif
 
   x(2+i)=(a(2+i)+b(2+i))/2;
   i=i+1;
 
 
  endwhile
endfunction

La función está en este código:

1
2
3
4
5
function [y]= f(x)
  f=@f;
  y= (16240.943(x).^2)-(14413.857*(sqrt((4*(x).^2)+(12.6025))))+(51165.904);
 
endfunction

El código en el que finalmente ejecuta todo lo anterior es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
clc
clear
close all
 
 
f=@f;
 
a=2;
b=1;
N= 50;
tol= 0.001;
sol=Biseccion(f,a,b,tol,N)
 
figure
subplot(2,1,1)
plot(sol, "bo-")
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 Jon
Val: 354
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

error: index (2): out of bound 1

Publicado por Jon (161 intervenciones) el 16/11/2020 09:48:22
Buenas Rodrigo,

Me parece que en la función donde defines la ecuación hay un error.

Estás intentando indexar en un número entero el valor x, cuando creo que tendría que ser una multiplicación.

1
y= (16240.943*(x).^2)-(14413.857*(sqrt((4*(x).^2)+(12.6025))))+(51165.904);

Un saludo,

Jon
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

error: index (2): out of bound 1

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/11/2020 17:59:15
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
40
41
42
43
44
45
46
47
48
49
50
51
function biseccion1
close all
f=@f;
a=1;
b=2;
N= 50;
tol= 0.001;
sol=Biseccion(f,a,b,tol,N)
figure
subplot(2,1,1)
plot(sol, "bo-")
end
 
 
function x=Biseccion(f,a,b,tol,N)
  if nargin==0
      a=0;
      b=2;
      tol=0.001;
      N=100;
  end
    i=1;
    a(1)=a;
    b(1)=b;
    x(1)=(a(1)+b(1))/2;
    if f(a(1))*f(x(1))<0
       a(2)=a(1);
       b(2)=x(1);
    else
      a(2)=x(1);
      b(2)=b(1);
    end
    x(2)=(a(2)+b(2))/2;
    while  abs(x(i+1)-x(i))>tol && i<=N
       if f(a(i+1))*f(x(i+1))<0
          a(i+2)=a(i+1);
          b(i+2)=x(i+1);
       else
          a(i+2)=x(i+1);
          b(i+2)=b(i+1);
       end
       x(2+i)=(a(2+i)+b(2+i))/2;
       i=i+1;
     end
end
 
 
function y=f(x)
  f=@f;
  y= (16240.943*(x)^2)-(14413.857*(sqrt((4*(x)^2)+(12.6025))))+(51165.904);
end

1
2
3
>> biseccion1
sol =
   1.5000   1.7500   1.8750   1.9375   1.9688   1.9844   1.9922   1.9961   1.9980   1.9990


Saludos
JOSE JEREMIAS CABALLERO
Servicios de programación matlab
Servicio de Asesoría Online en proyectos con Matlab
Asesorías online en Métodos Numéricos
[email protected]


https://programacioncaballero.blogspot.com/
https://www.facebook.com/programacioncaballero
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