12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- ## 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)
|