"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
0