51
edits
(→Demos and usage examples: rework the evaluate-at-double example) |
m (Insert Category:Packages) |
||
(9 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
The {{Forge|symbolic|symbolic package}} is part of the | The {{Forge|symbolic|symbolic package}} is part of the [[Octave Forge]] project. | ||
[[Category:Octave | [[Category:Octave Forge]][[Category:Packages]] | ||
=== Demos and usage examples === | === Demos and usage examples === | ||
* ''' I'm trying to substitute a double value into an expression. How can I avoid getting "warning: Using rat() heuristics for double-precision input (is this what you wanted?)" | * '''I'm trying to substitute a double value into an expression. How can I avoid getting "warning: Using rat() heuristics for double-precision input (is this what you wanted?)".''' | ||
In general, you should be very careful when converting floating point ("doubles") to symbolic variables, that's why the warning is bothering you. | In general, you should be very careful when converting floating point ("doubles") to symbolic variables, that's why the warning is bothering you. | ||
Line 31: | Line 31: | ||
dfh (a) | dfh (a) | ||
ans = -1.5708 | |||
## And you can evaluate dfh at an array of "double" values: | ## And you can evaluate dfh at an array of "double" values: | ||
dfh ([1.23 | dfh ([1.23 12.3 pi/2]) | ||
ans = | |||
-0.82502 4.20248 -1.57080 | |||
</source> | |||
* '''Demo of how to graph symbolic functions (by converting SYMBOLIC functions into ANONYMOUS functions)''' | |||
<source lang="octave"> | |||
## The following code will produce the same vector field plot as Figure 1.14 from Example 1.6 (pg. 39) from A Student's Guide to Maxwell's Equations by Dr. Daniel Fleisch. | |||
## Make sure symbolic package is loaded and symbolic variables declared. | |||
pkg load symbolic | |||
syms x y | |||
## Write a Vector Field Equation in terms of symbolic variables | |||
vectorfield = [sin(pi*y/2); -sin(pi*x/2)]; | |||
## Vector components are converted from symbolic into "anonymous functions" which allows them to be graphed. | |||
## The "'vars', [x y]" syntax ensures each component is a function of both 'x' & 'y' | |||
iComponent = function_handle (vectorfield(1), 'vars', [x y]); | |||
jComponent = function_handle (vectorfield(2), 'vars', [x y]); | |||
## Setup a 2D grid | |||
[X,Y] = meshgrid ([-0.5:0.05:0.5]); | |||
figure | |||
quiver (X, Y, iComponent (X, Y), jComponent (X,Y)) | |||
</source> | </source> | ||
Line 45: | Line 79: | ||
% have fun and change it if you want to. | % have fun and change it if you want to. | ||
f=@(x) x.^2 +3*x-1 + 5*x.*sin(x); | f = @(x) x.^2 + 3*x - 1 + 5*x.*sin(x); | ||
% | % these next lines take the Anonymous function into a symbolic formula | ||
pkg load symbolic | |||
syms x; | syms x; | ||
ff = f(x); | |||
ff= | |||
% now calculate the derivative of the function | % now calculate the derivative of the function | ||
ffd=diff(ff); | ffd = diff(ff, x); | ||
% and convert it back to an Anonymous function | % and convert it back to an Anonymous function | ||
df=function_handle(ffd) | df = function_handle(ffd) | ||
% this uses the interval pkg | % this uses the interval pkg to find all the roots between -15 an 10 | ||
pkg load interval | |||
fzero (f, infsup (-15, 10), df) | fzero (f, infsup (-15, 10), df) | ||
Line 125: | Line 160: | ||
## | ## | ||
syms y(x) | syms y(x) | ||
de =diff(y, 3 ) + | sqrt2=sym(1.41421); | ||
de =diff(y, 3 ) +sqrt2*diff(y,2) + diff(y) == 0; | |||
f = dsolve(de, y(0) == 0, diff(y,1)(0) == 0 , diff(y,2)(0) == 1) | f = dsolve(de, y(0) == 0, diff(y,1)(0) == 0 , diff(y,2)(0) == 1) | ||
ff=function_handle(rhs(f)) | ff=function_handle(rhs(f)) |
edits