// RAICES

// Para hallar raices de funciones Scilab usa la función "fsolve"

// sea por ej. y = f(x) = x^2-2x-3

// definimos primero la función:

function y = fcn1(x)
  y = x^2 - 2*x - 3
endfunction

// luego ejecutamos fsolve para lo cual tenemos que indicar el punto de partida de la iteración

x0 = input("x ini = ")
y = fsolve(x0,fcn1)
disp (y,"x = ")

x = -3:.1:5
y = fcn1(x)

clf
a = get("default_axes")
a.x_location = "origin"
a.y_location = "origin"
plot(x,y)
xlabel('x')
ylabel('y')

pause

// si partimos de otro punto podemos ir a dar a otra raíz:

// hay que tener cuidado de no arrancar en un punto donde la tangente sea horizontal

// OTRA función
function y = fcn11(x)
  y = x^3 - x
endfunction

x11 = sqrt(1/3)
y = fsolve(x11,fcn11)
disp(y)
// ESTA SOLUCIÓN ESTÁ EQUIVOCADA PORQUE LAS RAÍCES SON -1, 0 y 1

clf
x = -1.3:.1:1.3
y = fcn11(x)

plot(x,y)
xlabel('x')
ylabel('y')

pause

// fsolve también se puede usar en sistemas de varias variables, p.ej.:

function y = fcn2(x)
  y(1) = x(1) - 4*x(1)^2 - x(1)*x(2)
  y(2)= 2*x(2) - x(2)^2 + 3*x(1)*x(2)
endfunction 

y = fsolve([1 0],fcn2); disp(y)
y = fsolve([-1 0],fcn2); disp(y)
y = fsolve([1 3],fcn2); disp(y)
y = fsolve([-1 3],fcn2); disp(y)

pause

// si tenemos la matriz jacobiana la podemos usar:

deff('y=Jfcn2(x)','y=[1-8*x(1)-x(2) -x(1);3*x(2) 2-2*x(2)+3*x(1)]')

y = fsolve([-1 3],fcn2,Jfcn2)

disp(y)
