Matlab - ¿Qué falla en el programa?

   
Vista:

¿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

¿Qué falla en el programa?

Publicado por Jorge De Los Santos (212 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

¿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

¿Qué falla en el programa?

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3441 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
jjcc94@hotmail.com
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

¿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