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));