Matlab - Index exceeds matrix dimensions. ¿Cómo solucionarlo?

 
Vista:
Imágen de perfil de Zulema
Val: 9
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Index exceeds matrix dimensions. ¿Cómo solucionarlo?

Publicado por Zulema (3 intervenciones) el 12/10/2019 05:01:50
Hola!! Necesito ayuda con un programa que sirve para calcular la raíz de un número mediante el método de "Regula Falsi" o "Falsa Posición".

El código lo encontré de un programa que encontré online para calcular la raíz por el método de bisección, traté de adaptarlo al método de "Falsa posición" y ahora tengo un problema con ese mensaje de Index exceeds matrix dimensions

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
syms x;
f=input('Ingrese ecuación\nf(x)= ');
xii=input('Ingrese el valor de Xi: ');
xui=input('Ingrese el valor de Xu: ');
es=input('Ingrese el porcentaje de error: ');
it=1;
 
fxi=subs(f,x,xii);
fxu=subs(f,x,xui);
 
ea(it)=100;
if fxi*fxu < 0
    xi(it)=xii; fxi=subs(f,x,xi(it));
    xu(it)=xui; fxu=subs(f,x,xu(it));
    xr(it)=xu(it)-((fxu(it)*(xi(it)-xu(it)))/(fxi(it)-fxu(it))); fxr=subs(f,x,xr(it));
 
    fprintf('It.       Xi               Xr             Xu           Error aprox \n');
    fprintf('%2d \t %11.7f \t %11.7f \t %11.7f\n',it,xi(it),xr(it),xu(it));
    while abs(ea(it)) >= es,
      if fxi*fxr<0
         xi(it+1)=xi(it);fxi=subs(f,x,xi(it+1));
         xu(it+1)=xr(it);fxu=subs(f,x,xu(it+1));
      end
      if fxi*fxr>0
         xi(it+1)=xr(it);fxi=subs(f,x,xi(it+1));
         xu(it+1)=xu(it);fxu=subs(f,x,xu(it+1));
      end
      xr(it+1)=xu(it+1)-((fxu(it+1)*(xi(it+1)-xu(it+1)))/(fxi(it+1)-fxu(it+1))); fxr=subs(f,x,xr(it+1));
      ea(it+1)=abs((xr(it+1)-xr(it))/(xr(it+1))*100);
      fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f\n',it+1,xi(it+1),xr(it+1),xu(it+1),ea(it+1));
      it=it+1;
    end
fprintf('\n\nLa raiz de la ecuación es %.6f',xr(it));
else
   fprintf('No existe una raíz en ese intervalo');
end

el error lo detecta en la línea 28 (xr(it+1)=xu(it+1)-((fxu(it+1)*(xi(it+1)-xu(it+1)))/(fxi(it+1)-fxu(it+1))); fxr=subs(f,x,xr(it+1));)

Se los agradeceré muchísimo si pudiesen ayudarme
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
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Index exceeds matrix dimensions. ¿Cómo solucionarlo?

Publicado por Daniel (354 intervenciones) el 12/10/2019 15:52:23
El error es simple, se esta intentando leer una posición que no existe en el array. Esto se da cuando se usa it+1.

Veo que en cada iteración se aumenta el tamaño del array, algo que no es nada recomendable, pero esto no sucede si fxi*fxr == 0 y, por lo tanto, en la línea 28 aparece el error.
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

Index exceeds matrix dimensions. ¿Cómo solucionarlo?

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 12/10/2019 16:49:50
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
syms x;
%https://evflores.files.wordpress.com/2014/02/analisis-numerico-richard-l-burden-7ma.pdf
% f=input('Ingrese ecuaciónf(x)= ');
% xii=input('Ingrese el valor de Xi: ');
% xui=input('Ingrese el valor de Xu: ');
% es=input('Ingrese el porcentaje de error: ');
f=cos(x)-x;
xii=0.5;
xui=pi/4;
es=10^(-5);
it=1;
fxi(it)=subs(f,x,xii);
fxu(it)=subs(f,x,xui);
ea(it)=100;
 if fxi(it)*fxu(it) < 0
    xi(it)=xii; fxi(it)=subs(f,x,xi(it));
    xu(it)=xui; fxu(it)=subs(f,x,xu(it));
    xr(it)=xu(it)-((fxu(it)*(xi(it)-xu(it)))/(fxi(it)-fxu(it)));
    fxr=subs(f,x,xr(it));
    fprintf(' It.\t \tXi\t\t\t \tXr\t \t\t\tXu \t\tError aprox \n');
    fprintf('%2d \t %11.7f \t %11.7f \t %11.7f\n',it,xi(it),xr(it),xu(it));
    while abs(ea(it)) >= es
        if fxi(it)*fxr(it)<0
            xi(it+1)=xi(it);fxi(it+1)=subs(f,x,xi(it+1));
            xu(it+1)=xr(it);fxu(it+1)=subs(f,x,xu(it+1));
        end
        if fxi(it)*fxr(it)>0
            xi(it+1)=xr(it);fxi(it+1)=subs(f,x,xi(it+1));
            xu(it+1)=xu(it);fxu(it+1)=subs(f,x,xu(it+1));
        end
        xr(it+1)=xu(it+1)-((fxu(it+1)*(xi(it+1)-xu(it+1)))/(fxi(it+1)-fxu(it+1)));
        fxr(it+1)=subs(f,x,xr(it+1));
        ea(it+1)=abs((xr(it+1)-xr(it))/(xr(it+1))*100);
        fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f\n',it+1,xi(it+1),xr(it+1),xu(it+1),ea(it+1));
        it=it+1;
    end
    fprintf('\n\nLa raiz de la ecuación es %10.6f\n',xr(it));
 else
    fprintf('No existe una raíz en ese intervalo');
end

1
2
3
4
5
6
7
8
9
10
>> regula_falsa_foro1
 It.	 	Xi			 	Xr	 			Xu 		Error aprox
 1 	   0.5000000 	   0.7363841 	   0.7853982
 2 	   0.7363841 	   0.7390581 	   0.7853982 	   0.362
 3 	   0.7390581 	   0.7390849 	   0.7853982 	   0.004
 4 	   0.7390849 	   0.7390851 	   0.7853982 	   0.000
 5 	   0.7390851 	   0.7390851 	   0.7853982 	   0.000
 
 
La raiz de la ecuación es   0.739085


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab
Servicio de Asesoría Online en Matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
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

Index exceeds matrix dimensions. ¿Cómo solucionarlo?

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 12/10/2019 17:13:13
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
syms x;
%https://evflores.files.wordpress.com/2014/02/analisis-numerico-richard-l-burden-7ma.pdf
% f=input('Ingrese ecuación\nf(x)= ');
% xi(1)=input('Ingrese el valor de xi: ');
% xu(1)=input('Ingrese el valor de xu: ');
% es=input('Ingrese el porcentaje de error: ');
f=cos(x)-x;
xi(1)=0.5;
xu(1)=pi/4;
es=10^(-5);
it=1;
fxi(it)=subs(f,x,xi(it));
fxu(it)=subs(f,x,xu(it));
ea(it)=100;
 if fxi(it)*fxu(it) < 0
    xr(it)=xu(it)-((fxu(it)*(xi(it)-xu(it)))/(fxi(it)-fxu(it)));
    fxr=subs(f,x,xr(it));
    fprintf(' It.\t \txi\t\t\t \txr\t \t\t\txu \t\tError aprox \n');
    fprintf('%2d \t %11.7f \t %11.7f \t %11.7f\n',it,xi(it),xr(it),xu(it));
    while ea(it)>= es
        if fxi(it)*fxr(it)<=0
            xi(it+1)=xi(it);
            xu(it+1)=xr(it);
        end
        if fxi(it)*fxr(it)>0
            xi(it+1)=xr(it);
            xu(it+1)=xu(it);
        end
        fxi(it+1)=subs(f,x,xi(it+1));
        fxu(it+1)=subs(f,x,xu(it+1));
        xr(it+1)=xu(it+1)-((fxu(it+1)*(xi(it+1)-xu(it+1)))/(fxi(it+1)-fxu(it+1)));
        fxr(it+1)=subs(f,x,xr(it+1));
        ea(it+1)=abs((xr(it+1)-xr(it))/(xr(it+1))*100);
        fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f\n',it+1,xi(it+1),xr(it+1),xu(it+1),ea(it+1));
        it=it+1;
    end
    fprintf('\n\nLa raíz de la ecuación es %10.6f\n',xr(it));
 else
    fprintf('No existe una raíz en ese intervalo');
end


1
2
3
4
5
6
7
8
9
10
>> regula_falsa_foro2
 It.	 	xi			 	xr	 			xu 		Error aprox
 1 	   0.5000000 	   0.7363841 	   0.7853982
 2 	   0.7363841 	   0.7390581 	   0.7853982 	   0.362
 3 	   0.7390581 	   0.7390849 	   0.7853982 	   0.004
 4 	   0.7390849 	   0.7390851 	   0.7853982 	   0.000
 5 	   0.7390851 	   0.7390851 	   0.7853982 	   0.000
 
 
La raíz de la ecuación es   0.739085
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
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

Index exceeds matrix dimensions. ¿Cómo solucionarlo?

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 12/10/2019 18:01:54
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
clear
syms x;
%https://evflores.files.wordpress.com/2014/02/analisis-numerico-richard-l-burden-7ma.pdf
% f=input('Ingrese ecuación\nf(x)= ');
% xi=input('Ingrese el valor de xi: ');
% xu=input('Ingrese el valor de xu: ');
% es=input('Ingrese el porcentaje de error: ');
f=cos(x)-x;
xi=0.5;
xu=pi/4;
es=10^(-5);
it=1;
fxi=double(subs(f,x,xi));
fxu=double(subs(f,x,xu));
ea=100;
 if fxi*fxu < 0
    xr=xu-((fxu*(xi-xu))/(fxi-fxu));
    Xr(1)=xr;
    fxr=double(subs(f,x,xr));
    fprintf(' It.\t \txi\t\t\t \txr\t \t\t\txu \t\tError aprox \n');
    fprintf('%2d \t %11.7f \t %11.7f \t %11.7f\n',it,xi,xr,xu);
    while ea> es
        if fxi*fxr<=0
            xu=xr;
        else
            xi=xr;
        end
        fxi=double(subs(f,x,xi));
        fxu=double(subs(f,x,xu));
        xr=xu-((fxu*(xi-xu))/(fxi-fxu));
        Xr(it+1)=xr;
        fxr=double(subs(f,x,xr));
        ea=abs((Xr(it+1)-Xr(it))/Xr(it+1)*100);
        fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f\n',it+1,xi,xr,xu,ea);
        it=it+1;
    end
    fprintf('\n\nLa raíz de la ecuación es %10.7f\n',xr);
 else
    fprintf('No existe una raíz en ese intervalo');
end

1
2
3
4
5
6
7
8
9
>> regula_falsa_foro3
 It.	 	xi			 	xr	 			xu 		Error aprox
 1 	   0.5000000 	   0.7363841 	   0.7853982
 2 	   0.7363841 	   0.7390581 	   0.7853982 	   0.362
 3 	   0.7390581 	   0.7390849 	   0.7853982 	   0.004
 4 	   0.7390849 	   0.7390851 	   0.7853982 	   0.000
 5 	   0.7390851 	   0.7390851 	   0.7853982 	   0.000
 
La raíz de la ecuación es  0.7390851


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab
Servicio de Asesoría Online en Matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
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

Index exceeds matrix dimensions. ¿Cómo solucionarlo?

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 12/10/2019 18:10:53
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
clear
syms x;
%https://evflores.files.wordpress.com/2014/02/analisis-numerico-richard-l-burden-7ma.pdf
% f=input('Ingrese ecuación\nf(x)= ');
% xi(1)=input('Ingrese el valor de xi: ');
% xu(1)=input('Ingrese el valor de xu: ');
% es=input('Ingrese el porcentaje de error: ');
f=cos(x)-x;
xi=0.5;
xu=pi/4;
es=10^(-5);
it=1;
fxi=double(subs(f,x,xi));
fxu=double(subs(f,x,xu));
ea=100;
 if fxi*fxu < 0
    xr=xu-((fxu*(xi-xu))/(fxi-fxu));
    Xr(1)=xr;
    fxr=double(subs(f,x,xr));
    while ea> es
        if fxi*fxr<=0
            xu=xr;
        else
            xi=xr;
        end
        fxi=double(subs(f,x,xi));
        fxu=double(subs(f,x,xu));
        xr=xu-((fxu*(xi-xu))/(fxi-fxu));
        Xr(it+1)=xr;
        fxr=double(subs(f,x,xr));
        ea=abs((Xr(it+1)-Xr(it))/Xr(it+1)*100);
        it=it+1;
    end
    fprintf('\nLa raíz de la ecuación es %10.7f\n',xr);
 else
    fprintf('No existe una raíz en ese intervalo');
end

1
2
3
>> regula_falsa_foro4
 
La raíz de la ecuación es  0.7390851


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab
Servicio de Asesoría Online en Matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Zulema
Val: 9
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Index exceeds matrix dimensions. ¿Cómo solucionarlo?

Publicado por Zulema (3 intervenciones) el 13/10/2019 23:35:02
Muchas gracias en verdad!! Me ha servido de gran ayuda, quien diria que el error era mas facil de solucionar de lo que parecia jajaja, mil gracias, en serio!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
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

Index exceeds matrix dimensions. ¿Cómo solucionarlo?

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 14/10/2019 00:00:00
Muchos dirán, hubo un pequeño error, pero eso pequeño error te puede hacer pasar horas y horas revisando el código para poder encontrarlo o quizás no llegues encontrarlo. Pero este es lo fazcinante del mundo de la programación. Una pasión por la lógica, una diversión con el mundo de la programación, un juego con la lógica de todo los días. Un mundo lleno de concentración, de observación, de imaginación, de paciencia, de retos, esto es el mundo de la PROGRAMACIÓN EN MATLAB.

https://www.lawebdelprogramador.com/foros/Matlab/1712048-Tengo-este-error-saben-por-que-Por-favor.html#i1712093

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab
Servicio de Asesoría Online en Matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Zulema
Val: 9
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Index exceeds matrix dimensions. ¿Cómo solucionarlo?

Publicado por Zulema (3 intervenciones) el 13/10/2019 23:33:52
Muchas gracias, he comprendido el error despues de leer tu respuesta :)
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