99 lines
2.6 KiB
Matlab
99 lines
2.6 KiB
Matlab
function x = Func(typ, n, p)
|
|
% FUNC Func class constructor.
|
|
% x = Func(typ, n, p)
|
|
% A class for functors.
|
|
% A functor is an object that behaves like a function. Cantera
|
|
% defines a set of functors to use to create arbitrary functions to
|
|
% specify things like heat fluxes, piston speeds, etc., in reactor
|
|
% network simulations. Of course, they can be used for other things
|
|
% too.
|
|
%
|
|
% The main feature of a functor class is that it overloads the ``()``
|
|
% operator to evaluate the function. For example, suppose object
|
|
% ``f`` is a functor that evaluates the polynomial :math:`2x^2 - 3x + 1`.
|
|
% Then writing ``f(2)`` would cause the method that evaluates the
|
|
% function to be invoked, and would pass it the argument ``2``. The
|
|
% return value would of course be 3.
|
|
%
|
|
% The types of functors you can create in Cantera are these:
|
|
%
|
|
% 1. A polynomial
|
|
% 2. A Fourier series
|
|
% 3. A sum of Arrhenius terms
|
|
% 4. A Gaussian.
|
|
%
|
|
% You can also create composite functors by adding, multiplying, or
|
|
% dividing these basic functors, or other composite functors.
|
|
%
|
|
% Note: this MATLAB class shadows the underlying C++ Cantera class
|
|
% "Func1". See the Cantera C++ documentation for more details.
|
|
%
|
|
% See also: :mat:func:`polynom`, :mat:func:`gaussian`, :mat:func:`plus`,
|
|
% :mat:func:`rdivide`, :mat:func:`times`
|
|
%
|
|
% :param typ:
|
|
% String indicating type of functor to create. Possible values are:
|
|
%
|
|
% * ``'polynomial'``
|
|
% * ``'fourier'``
|
|
% * ``'gaussian'``
|
|
% * ``'arrhenius'``
|
|
% * ``'sum'``
|
|
% * ``'diff'``
|
|
% * ``'ratio'``
|
|
% * ``'composite'``
|
|
% * ``'periodic'``
|
|
%
|
|
% :param n:
|
|
% Number of parameters required for the functor
|
|
% :param p:
|
|
% Vector of parameters
|
|
% :return:
|
|
% Instance of class :mat:func:`Func`
|
|
|
|
if ~isa(typ, 'char')
|
|
error('Function type must be a string')
|
|
end
|
|
|
|
x.f1 = 0;
|
|
x.f2 = 0;
|
|
x.coeffs = 0;
|
|
|
|
itype = -1;
|
|
if strcmp(typ, 'polynomial')
|
|
itype = 2;
|
|
elseif strcmp(typ, 'fourier')
|
|
itype = 1;
|
|
elseif strcmp(typ, 'arrhenius')
|
|
itype = 3;
|
|
elseif strcmp(typ, 'gaussian')
|
|
itype = 4;
|
|
end
|
|
|
|
if itype > 0
|
|
x.coeffs = p;
|
|
x.index = funcmethods(0, itype, n, p);
|
|
elseif strcmp(typ, 'periodic')
|
|
itype = 50;
|
|
x.f1 = n;
|
|
x.coeffs = p;
|
|
x.index = funcmethods(0, itype, n.index, p);
|
|
else
|
|
if strcmp(typ, 'sum')
|
|
itype = 20;
|
|
elseif strcmp(typ, 'diff')
|
|
itype = 25;
|
|
elseif strcmp(typ, 'prod')
|
|
itype = 30;
|
|
elseif strcmp(typ, 'ratio')
|
|
itype = 40;
|
|
elseif strcmp(typ, 'composite')
|
|
itype = 60;
|
|
end
|
|
x.f1 = n;
|
|
x.f2 = p;
|
|
x.index = funcmethods(0, itype, n.index, p.index);
|
|
end
|
|
|
|
x.typ = typ;
|
|
x = class(x, 'Func');
|