Feel++ expressions
1. Using Mathematical expressions
Mathematical expressions are described as strings in C++, python or json files. An expression is composed of symbols and operations acting on them.
Available standard operations and functions are :
-
+, -, *, /addition, substraction, multiplication and division respectively -
^given two real numbersxandy,x^ycomputex`to the powery -
log -
exp -
sin -
cos -
tan -
asin -
acos -
atan -
sinh -
cosh -
tanh -
asinh -
acosh -
atanh -
atan2 -
sqrt -
mod: given integersxandy, computemod(x,y) -
min,max: given 2 real numbersxandy,min(x,y)andmax(x,y)compute the minimum and maximym respectively. -
lgamma: Evaluation oflgamma(x), the natural logarithm of the Gamma function. -
tgamma: Evaluation oftgamma(x), the true Gamma function.
2. Additional Mathematical functions
2.1. ceil
- Description
-
ceil(v)computes the smallest integer value not less than arg. - Keyword
-
ceil - Math
-
Given real number \(x\), integer \(m\) and the set of integers \(\mathbb{Z}\), ceil can be defined by the equation
C++ example
|
json example
|
2.2. floor
- Description
-
floor(v)computes the largest integer value not greater than arg. - Keyword
-
floor - Math
-
Given real number \(x\), integer \(m\) and the set of integers \(\mathbb{Z}\), floor can be defined by the equation
C++ example
|
json example
|
2.3. fract
- Description
-
fract(v)compute the fractional part of the argument. This is calculated as \(v - floor(v)\). - Keyword
-
fract - Math
-
The fractional part is the sawtooth function, denoted by \(\{x\}\) for real \(x\) and defined by the formula
For all \(x\), we have
C++ example
|
json example
|
2.4. clamp
- Description
-
clamp(v,lo,hi)If v compares less than lo, returns lo; otherwise if hi compares less than v, returns hi; otherwise returns v. - Keyword
-
clamp
C++ example
|
json example
|
2.5. Modulo
- Description
-
mod(x,y)compute the modulo operation: it returns the remainder or signed remainder of the division \(x/y\). - Keyword
-
mod
auto e = expr("mod(u,v):u:v");
e.setParameterValues( { { "u", 2 }, { "v", 1 }} );
CHECK( std::abs( e.evaluate()(0,0) ) < 1e-12 ) << "Error in modulo";
e.setParameterValues( { { "u", 3 }, { "v", 6 }} );
CHECK( std::abs( e.evaluate()(0,0) - 3) < 1e-12 ) << "Error in modulo";
e.setParameterValues( { { "u", 6.1 }, { "v", 3 }} );
CHECK( std::abs( e.evaluate()(0,0) - 0.1) < 1e-12 ) << "Error in modulo";
}
3. Mappings
3.1. mapabcd
mapabcd is the function \(f\) that allows to map \([a,b]\) to \([c,d]\), it is defines as follows
with \(f(a)=c\) and \(f(b)=d\).
auto e = expr("mapabcd(t,1,2,-1,1):t");
e.setParameterValues( { { "t", 1 } } );
CHECK( std::abs(e.evaluate()(0,0)- (-1)) < 1e-12 ) << "Invalid mapping";
e.setParameterValues( { { "t", 2 } } );
CHECK( std::abs( e.evaluate()(0,0)- 1 ) < 1e-12 ) << "Invalid mapping";
e.setParameterValues( { { "t", 1.5 } } );
CHECK( std::abs( e.evaluate()(0,0) ) < 1e-12 ) << "Invalid mapping";
4. Step functions
A function \(f\colon \mathbb{R} \rightarrow \mathbb{R}\) is called a step function if it can be written as
where \(n\ge 0\), \(\alpha_i\) are real numbers, \(A_i\) are intervals, and \(\chi_A\) is the indicator function of \(A\):
4.1. step1
- Description
-
step1(u,edge)return 0 isuis strictly less thanedge, 1 otherwise. - Keyword
-
step1
C++ example
|
json example
|
4.2. smoothstep
- Description
-
smoothstep(u,lo,hi)is calculated as follows:
smoothstep uses the clamp function
- Keyword
-
smoothstep
C++ example
|
json example
|