Difference between revisions of "Symbolic package"
Jump to navigation
Jump to search
Line 38: | Line 38: | ||
[-0.777688831121563, -0.7776888311215626] | [-0.777688831121563, -0.7776888311215626] | ||
[0.22911205809043574, 0.2291120580904359] | [0.22911205809043574, 0.2291120580904359] | ||
+ | </source> | ||
+ | |||
+ | |||
+ | * '''Demo of inputting a function at the input prompt and making an Anonymous function.''' | ||
+ | |||
+ | <source lang="octave"> | ||
+ | # This prog. shows how to take a | ||
+ | # sring input and make it into an anonymous function | ||
+ | # this uses the symbolic pkg. | ||
+ | disp("Example input") | ||
+ | disp("x^2 + 3*x - 1 + 5*x*sin(x)") | ||
+ | str_fucn=input("please enter your function ","s") | ||
+ | fucn_sym=sym(str_fucn) | ||
+ | f=function_handle(fucn_sym) | ||
+ | # now back to symbolic | ||
+ | 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) | ||
+ | % now lets do the second derivative | ||
+ | ffdd=diff(ffd); | ||
+ | ddf=function_handle(ffdd) | ||
+ | % and now plot them all | ||
+ | x1=-2:.0001:2; | ||
+ | plot(x1,f(x1),x1,df(x1),x1,ddf(x1)) | ||
+ | grid minor on | ||
+ | legend("f","f '", "f '' ") | ||
</source> | </source> | ||
Revision as of 12:51, 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)
ans ⊂ 4×1 interval vector
[-5.743488743719015, -5.743488743719013]
[-3.0962279604822407, -3.09622796048224]
[-0.777688831121563, -0.7776888311215626]
[0.22911205809043574, 0.2291120580904359]
- Demo of inputting a function at the input prompt and making an Anonymous function.
# This prog. shows how to take a
# sring input and make it into an anonymous function
# this uses the symbolic pkg.
disp("Example input")
disp("x^2 + 3*x - 1 + 5*x*sin(x)")
str_fucn=input("please enter your function ","s")
fucn_sym=sym(str_fucn)
f=function_handle(fucn_sym)
# now back to symbolic
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)
% now lets do the second derivative
ffdd=diff(ffd);
ddf=function_handle(ffdd)
% and now plot them all
x1=-2:.0001:2;
plot(x1,f(x1),x1,df(x1),x1,ddf(x1))
grid minor on
legend("f","f '", "f '' ")
- 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