Matlab - ¿Qué falla en el programa?

 
Vista:
sin imagen de perfil

¿Qué falla en el programa?

Publicado por Juan José (60 intervenciones) el 13/11/2014 16:09:40
Hola amigos,

Directamente paso al ejemplo y os copio el error aver si me podeis decir cual es el problema.

Tecleamos:
1
2
f=@(x) log(x)-5+x
r=regulafalsi_propio(f,3.1,4.5,1.e-8,1.e-8,1000)

regulafalsi_propio en esta funcion:
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
function r=regulafalsi_propio(f,a,b,tol,maxit)
% Entrada:
%               f; Función no lineal
%               a y b; Límites del intervalo donde f es continua
%               tol; Tolerancia para el valor aproximado de la raíz
%               maxit; Número máximo de iteraciones
% Salida;
%               r; raíz de la función
%               err; Error en la aproximación
if f(a)*f(b)<0 % Comprobar si hay cambio signo en intervalo
    iteracion=0;
    while ((abs(b-a))>tol) || (iteracion<maxit)
        x=(a*f(b)-b*f(a))/(f(b)-f(a));
        if (f(x)==0)
            disp('El proceso ha finalizado')
            r=x; % Raíz encontrada
        else
            if f(x)*f(a)>0
                b=x;
                iteracion=iteracion+1;
            else
                a=x;
                iteracion=iteracion+1;
            end
        end
    end
    r=x; % Raíz tras las iteraciones
else
    disp('No existe raíz en ese intervalo')
    r='No existe raíz en ese intervalo';
end
end

El error que me da es:
??? Error using ==> regulafalsi_propio
Too many input arguments.


¿Porqué?

Gracias de antemano y un saludo
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 Jorge De Los Santos
Val: 30
Ha disminuido su posición en 12 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

¿Qué falla en el programa?

Publicado por Jorge De Los Santos (213 intervenciones) el 13/11/2014 17:14:48
Hola Juan José.


El error, como bien te indica MATLAB, es que estás pasando más argumentos de entrada de los requeridos, en tu caso cuando llamas a la función estás duplicando el valor de la tolerancia numérica.


Saludos.

Jorge De Los Santos.
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
sin imagen de perfil

¿Qué falla en el programa?

Publicado por Juan José (60 intervenciones) el 13/11/2014 21:33:06
Vaya despiste.

Gracias
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

¿Qué falla en el programa?

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 14/11/2014 00:45:47
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 r=regulafalsi_propio(fun,a,b,tol,maxit)
if nargin<1
   syms x
   fun=log(x)-5+x;
   a=3.1;
   b=4.5;
   tol=1.e-8;
   maxit=1000;
end
% Entrada:
%               f; Función no lineal
%               a y b; Límites del intervalo donde f es continua
%               tol; Tolerancia para el valor aproximado de la raíz
%               maxit; Número máximo de iteraciones
% Salida;
%               r; raíz de la función
%               err; Error en la aproximación
f=inline(fun);
if f(a)*f(b)<0 % Comprobar si hay cambio signo en intervalo
    iteracion=0;
    while ((abs(b-a))>tol) || (iteracion<maxit)
        X=(a*f(b)-b*f(a))/(f(b)-f(a));
        if (f(X)==0)
            disp('El proceso ha finalizado')
            r=X; % Raíz encontrada
            return;
        else
            if f(X)*f(a)>0
                b=X;
                iteracion=iteracion+1;
            else
                a=X;
                iteracion=iteracion+1;
            end
        end
    end
    r=X; % Raíz tras las iteraciones
else
    disp('No existe raíz en ese intervalo')
    r='No existe raíz en ese intervalo';
end
end



EJECUCION
1
2
3
4
5
6
7
8
9
10
11
12
13
>> regulafalsi_propio
El proceso ha finalizado
 
ans =
 
    3.6934
 
>> r=regulafalsi_propio('log(x)-5+x',3.1,4.5,1.e-8,1000)
El proceso ha finalizado
 
r =
 
    3.6934



Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online y Presencial en Matlab
programador en matlab
Servicios de programación matlab
[email protected]
Estimado Usuario de Matlab, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro.


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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
sin imagen de perfil

¿Qué falla en el programa?

Publicado por Juan José (60 intervenciones) el 14/11/2014 08:39:34
Gracias Jose y Jorge
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