Difference between revisions of "Symbolic package"

From Octave
Jump to navigation Jump to search
(formatted example)
Line 38: Line 38:
 
     [-0.777688831121563, -0.7776888311215626]
 
     [-0.777688831121563, -0.7776888311215626]
 
     [0.22911205809043574, 0.2291120580904359]
 
     [0.22911205809043574, 0.2291120580904359]
 +
</source>
 +
 +
 +
* '''Demo of ODE with a step input and initial conditions.'''
 +
 +
<source lang="octave">
 +
 +
## This is a demo of a second order transfer function and a unit step input.
 +
## in laplace we would have        1                      1
 +
##                              _______________        *  _____
 +
##                            s^2 + sqrt(2)*s +1          s
 +
##
 +
## So the denominator is s^3 + sqrt(2) * s^2 + s
 +
# and for laplace initial conditions area
 +
##            t(0)=0 t'(0) =0  and the step has initial condition of  1
 +
## so we set  t''(0)=1
 +
## In the code we use diff(y,1)(0) == 0 to do t'(0)=0
 +
##
 +
## I know that all this can be done using the control pkg
 +
## But I used this to verify that this solution is the
 +
##  same as if I used the control pkg.
 +
## With this damping ratio we should have a 4.321% overshoot.
 +
##
 +
syms y(x)
 +
de =diff(y, 3 ) +sqrt(2)*diff(y,2) + diff(y) == 0;
 +
f = dsolve(de, y(0) == 0, diff(y,1)(0) == 0 , diff(y,2)(0) == 1)
 +
ff=function_handle(rhs(f))
 +
  x1=0:.01:10;
 +
y=ff(x1);
 +
plot(x1,y)
 +
grid minor on
 
</source>
 
</source>

Revision as of 05:47, 6 July 2015

The symbolic package is part of the octave-forge project.

Demos and usage examples

  • Demo of Anonymous function to symbolic function and back to anonymous function and then the use of the interval pkg.
% this is just a formula to start with,
% have fun and change it if you want to.

f=@(x) x.^2 +3*x-1 + 5*x.*sin(x);

% the next 2 line take the Anonymous function into a symbolic formula

syms x;

ff=formula(f(x));

% now calculate the derivative of the function

ffd=diff(ff);

% and convert it back to an Anonymous function

df=function_handle(ffd)


% this uses the interval pkg. to find all the roots between -15 an 10 

fzero (f, infsup (-15, 10), df)

ans4×1 interval vector

    [-5.743488743719015, -5.743488743719013]
    [-3.0962279604822407, -3.09622796048224]
    [-0.777688831121563, -0.7776888311215626]
    [0.22911205809043574, 0.2291120580904359]


  • Demo of ODE with a step input and initial conditions.
 ## This is a demo of a second order transfer function and a unit step input.
 ## in laplace we would have        1                       1
 ##                              _______________         *  _____
 ##                             s^2 + sqrt(2)*s +1           s
 ##
 ## So the denominator is s^3 + sqrt(2) * s^2 + s
 # and for laplace initial conditions area
 ##             t(0)=0 t'(0) =0  and the step has initial condition of  1
 ## so we set   t''(0)=1
 ## In the code we use diff(y,1)(0) == 0 to do t'(0)=0
 ##
 ## I know that all this can be done using the control pkg
 ## But I used this to verify that this solution is the
 ##   same as if I used the control pkg.
 ## With this damping ratio we should have a 4.321% overshoot.
 ##
 syms y(x) 
 de =diff(y, 3 ) +sqrt(2)*diff(y,2) + diff(y) == 0;
 f = dsolve(de, y(0) == 0, diff(y,1)(0) == 0 , diff(y,2)(0) == 1)
 ff=function_handle(rhs(f))
  x1=0:.01:10;
 y=ff(x1);
 plot(x1,y)
 grid minor on