Matlab - "Unrecognized function or variable 'x'."

 
Vista:

"Unrecognized function or variable 'x'."

Publicado por lizbeth Villegas (1 intervención) el 09/11/2021 16:08:13
Hola!, este es el metodo biseccion en Matlab y me arroja "Unrecognized function or variable 'x'." en "Fresult", quisiera saber por qué pasa eso, o cuál es mi error. Abajo les dejo el código completo :)


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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
function hace_biseccion_lab2_grupoM
clc
close all
%necesitamos graficar primero la funcion no lineal guardada como
%Fresult en nuestra carpeta
x=linspace(0.7,1.5,200);% valores asignados por el usuario
[y] = Fresult(x);% llamamos a la funcion
plot(x,y); grid; %funcion de matlab para graficar
 
 
%------------------------------------------------------------
%ingresamos los valores x0,x1, llamamos a la funcion, tol, itereaciones
x0=input('ingrese su x0 por el lado izquierdo : \n');
x1=input('ingrese su x1 por el lado derecho : \n');
f=@Fresult;
tol=input('ingrese la tolerancia : \n');
N=input('ingrese el numero de iteraciones : \n');
 
%--------------------------------------------------------------
 
 
%llamamos la funcion que hace biseccion
[xr]= biseccion_lab2_grupoM(x0,x1,f,tol,N);
%luego de recibir el resulado xr, remplazamos el valor xr en la funcion.
Fresult(xr)
 
end
 
function [xr]= biseccion_lab2_grupoM(x0,x1,f,tol,N)
%xr  =  Raiz de solucion
%x0  =  limite inferior (izquierda)
%x1  =  limite superior (derecha)
%tol =  tolerancia
%f   =  funcion a evaluar
 
if f(x0)== 0 || f(x1)==0 %se compara si los valores ingresados son igual a cero
    if f(x0)==0 %si la funcion evaluada en x0 es igual a cero por lo tanto
        xr=x0; %la solucion es igual x0
    else
        xr=x1; %si no la solucion es igual a x1
    end
else % en el caso que no se cumpla se realiza biseccion
    if f(x0)*f(x1)<0 %se realiza biseccion
        xm=(x0+x1)/2;
 
        i=0;
 
        while abs(f(xm))>tol && i<N
 
        xm=(x0+x1)/2;
        %se suma los dos puntos y se divide por dos buscando el punto medio
        %xm=punto medio entre los dos intervalos
        if f(xm)==0
            %ahora si nuestra division es =0 esto quiere decir que
            %encontramos nuestra solucion
            xr=xm;
        else
            if f(x0)*f(xm)<0
                x1=xm;
            else %en el caso que no se cumple se realiza = f(xm)*f(x1)<0
                x0=xm;
            end
            i=i+1;
        end
        xr=xm;
 
 
        end
 
 
 
    else
        fprintf('se debe cambiar su intervalo de solucion\n');
        xr='intercalo erroneo';
    end
 
 
 
 
 
 
 
end
 
 
function [y] = Fresult(x)
%Se debe ingresar la funcion a evaluar en funcion de x
y=((5070.4225.*(x).^2)-(9000.*(sqrt(((x).^2)+3.1506)))+(14970.7013)-(3.1215.*(x)));
 
end
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

"Unrecognized function or variable 'x'."

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 28/12/2021 20:52:00
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
function xr= biseccion_lab2_grupoM_28_12_21
     %------------------------------------------------------------
    %ingresamos los valores x0, x1, llamamos a la función, tol, iteraciones
    x0=input('ingrese su x0 por el lado izquierdo:');
    x1=input('ingrese su x1 por el lado derecho:');
   %necesitamos graficar primero la función no lineal guardada como Fresult en nuestra carpeta
    x=linspace(x0,x1,200);% valores asignados por el usuario
    y= Fresult(x);% llamamos a la función
    plot(x,y); grid; %función de Matlab para graficar
    f=@Fresult;
    tol=input('ingrese la tolerancia:');
    N=input('ingrese el número de iteraciones:');
     %--------------------------------------------------------------
 
 
    %llamamos la función que hace bisección
     xr= biseccion_lab2_grupoM(x0,x1,f,tol,N);
    %luego de recibir el resultado xr, remplazamos el valor xr en la función.
    Fresult(xr)
 end
 
function xr= biseccion_lab2_grupoM(x0,x1,f,tol,N)
%xr  =  Raiz de solución
%x0 = límite inferior (izquierda)
%x1 = límite superior (derecha)
%tol = tolerancia
%f   = función a evaluar
if f(x0)== 0 || f(x1)==0 %se compara si los valores ingresados son igual a cero
    if f(x0)==0 %si la función evaluada en x0 es igual a cero, por lo tanto
         xr=x0; %la solución es igual x0
    else
         xr=x1; %si no la solución es igual a x1
    end
else % en el caso que no se cumpla se realiza bisección
    if f(x0)*f(x1)<0 %se realiza bisección
         xm=(x0+x1)/2;
         i=0;
        while abs(f(xm))>tol && i<N
                xm=(x0+x1)/2;
                %se suma los dos puntos y se divide por dos buscando el punto medio
                %xm=punto medio entre los dos intervalos
                if f(xm)==0
                    %ahora si nuestra division es =0 esto quiere decir que
                    %encontramos nuestra solución
                    xr=xm;
                else
                    if f(x0)*f(xm)<0
                        x1=xm;
                    else %en el caso que no se cumple se realiza = f(xm)*f(x1)<0
                        x0=xm;
                    end
                    i=i+1;
                end
                xr=xm;
        end
    else
        fprintf('se debe cambiar su intervalo de solución\n');
        xr='intercalo erróneo';
    end
end
end
 
function y= Fresult(x)
%Se debe ingresar la función a evaluar en función de x
y=((5070.4225.*(x).^2)-(9000.*(sqrt(((x).^2)+3.1506)))+(14970.7013)-(3.1215.*(x)));
end


1
2
3
4
5
6
7
>> xr= biseccion_lab2_grupoM_28_12_21
ingrese su x0 por el lado izquierdo :0
ingrese su x1 por el lado derecho :1
ingrese la tolerancia :0.0001
ingrese el número de iteraciones :100
xr =
    0.6211

Saludos
JOSE JEREMIAS CABALLERO
Asesoría Online en Proyectos con Matlab
Asesorías online en Métodos Numéricos con Matlab, Octave, Java, Freemat, Scilab , Python, google colab, Excel y C++
Asesorías online por zoom, meet, skype.
[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