diff --git a/+quantity/Function.m b/+quantity/Function.m index b7b2ed5ef4a8b3af921452096743ee05d92b8c37..2a334f30056f92ed37b75c64779c9bf78707d12f 100644 --- a/+quantity/Function.m +++ b/+quantity/Function.m @@ -93,6 +93,21 @@ classdef Function < quantity.Discrete end end % obj2value() + function value = at(obj, point) + % at() evaluates the object at one point and returns it as array + % with the same size as size(obj). + value = zeros(size(obj)); + if ~iscell(point) + for it = 1 : numel(value) + value(it) = obj(it).valueContinuous(point); + end + else + for it = 1 : numel(value) + value(it) = obj(it).valueContinuous(point{:}); + end + end + end % at() + function n = nargin(obj) % FIXME: check if all funtions in this object have the same % number of input values. diff --git a/+unittests/+quantity/testFunction.m b/+unittests/+quantity/testFunction.m index c476cf957282700ae272f3ea18e0c3b373f7d073..966ae75b9b5dfa0fdd9e2c8dbb716820002a1b4c 100644 --- a/+unittests/+quantity/testFunction.m +++ b/+unittests/+quantity/testFunction.m @@ -4,6 +4,17 @@ function [tests] = testFunction() tests = functiontests(localfunctions); end +function testAt(tc) +z = quantity.Domain("z", linspace(0, 1, 11)); +f = quantity.Function({@(z)sin(z), @(z)1+z; @(z)cos(z), @(z)z.^2}, z); +fZZeta = quantity.Function({@(z,zeta)sin(zeta)+z, @(z,zeta)1+zeta-z; @(z,zeta)cos(z), @(z,zeta)zeta.^2}, ... + [z, z.rename("zeta")]); +fDisc = quantity.Discrete(f); +tc.verifyLessThan(abs(f.at({0.2}) - fDisc.at({0.2})), 10*eps); +fZZetaDisc = quantity.Discrete(fZZeta); +tc.verifyLessThan(abs(fZZeta.at({0.2, 0.4}) - fZZetaDisc.at({0.2, 0.4})), 10*eps); +end % testAt() + function testInt(testCase) z = quantity.Domain("z", linspace(0,1));