## Simple example of creating an octave polynomial symbolically
P = g2o_pol("s^2*(s+a)*(s+b)^3") # Create symbolic polynomial in octave form
a = 1; b = 2; # Give a and b numerical values
p = eval(P) # Create numerical polynomial
roots(p) # Use p in any appropriate octave
# function
## More complicated example of symbolic linearisation
## ODE dx/dt = f(x,u); y = g(x,u)
f_1 = "x_2 - beta*tanh(u_1)";
f_2 = "-x_1 + x_2^2 + u_1";
g_1 = "x_1";
f = go_list(f_1,f_2)
g = go_list(g_1)
## Linearise via symbolic differentiation
[A,B,C,D] = go_lin(f,g)
## Find the transfer function
I = "[[1,0],[0,1]]"; # Unit matrix
## Create G as a string: C(sI-A)^-1B + D
G_str = sprintf("%s*((s*%s-%s)^(-1))*%s + %s", C,I,A,B,D)
## Find G itself
G = g_evalm(G_str);
## Substitute steady-state values
G = g_subs(G, "{u_1,x_1,x_2}", "{0,0,0}")
## Extract the (only) matrix element
G = g_op(G,"0")
## Find numerator and denominator
a = g2o_pol(g_denom(G))
b = g2o_pol(g_numer(G))
## Evaluate numerically
beta = 0.5;
b = eval(b)
a = eval(a)