Tutorial Math Collection API spec Download
Below is the code for JAVA, C# (the code for C# is almost identical) and C++. To copy the code, double-click inside the frame. You may also be interested in the following tutorial sections:$$x,y, z,\ldots\in\mathbb{R}$$
$$\sin(x+y)-\cos(\frac{y}{z})$$
Java/C# code// JAVA: import org.mariuszgromada.math.mxparser.*; // C#: using org.mariuszgromada.math.mxparser; // ... Argument x = new Argument("x = 1"); Argument y = new Argument("y = 2*pi"); Argument z = new Argument("z", 3); Argument n = new Argument("n", 4); Expression e = new Expression("n*( sin(x+y)-cos(y/z) )", x, y, z, n); mXparser.consolePrintln("Res 1: " + e.getExpressionString() + " = " + e.calculate()); x.setArgumentValue(0); z.setArgumentValue(4); mXparser.consolePrintln("Res 2: " + e.getExpressionString() + " = " + e.calculate()); x.setArgumentValue(5); mXparser.consolePrintln("Res 3: " + x.getArgumentName() + " = " + x.getArgumentValue());C++ code
#include "org/mariuszgromada/math/mxparser.hpp" // ... ArgumentPtr x = new_Argument("x = 1"); ArgumentPtr y = new_Argument("y = 2*pi"); ArgumentPtr z = new_Argument("z", 3); ArgumentPtr n = new_Argument("n", 4); ExpressionPtr e = new_Expression("n*( sin(x+y)-cos(y/z) )", x, y, z, n); mXparser::consolePrintln("Res 1: " + e->getExpressionString() + " = " + e->calculate()); x->setArgumentValue(0); z->setArgumentValue(4); mXparser::consolePrintln("Res 2: " + e->getExpressionString() + " = " + e->calculate()); x->setArgumentValue(5); mXparser::consolePrintln("Res 3: " + x->getArgumentName() + " = " + x->getArgumentValue());Code result
[mXparser-v.5.2.1] Res 1: n*( sin(x+y)-cos(y/z) ) = 5.365883939231586 [mXparser-v.5.2.1] Res 2: n*( sin(x+y)-cos(y/z) ) = 0.0 [mXparser-v.5.2.1] Res 3: x = 5.0Case 2: Defining dependent arguments
$$y=x^2$$
Java/C# code// JAVA: import org.mariuszgromada.math.mxparser.*; // C#: using org.mariuszgromada.math.mxparser; // ... Argument x = new Argument("x"); Argument y = new Argument("y = x^2", x); x.setArgumentValue(1); mXparser.consolePrintln("Res 1: " + y.getArgumentName() + " = " + y.getArgumentValue()); x.setArgumentValue(2); mXparser.consolePrintln("Res 2: " + y.getArgumentName() + " = " + y.getArgumentValue()); x.setArgumentValue(3); mXparser.consolePrintln("Res 3: " + y.getArgumentName() + " = " + y.getArgumentValue()); Expression e = new Expression("x*y", x, y); mXparser.consolePrintln("Res 4: " + e.getExpressionString() + " = " + e.calculate());C++ code
#include "org/mariuszgromada/math/mxparser.hpp" // ... ArgumentPtr x = new_Argument("x"); ArgumentPtr y = new_Argument("y = x^2", x); x->setArgumentValue(1); mXparser::consolePrintln("Res 1: " + y->getArgumentName() + " = " + y->getArgumentValue()); x->setArgumentValue(2); mXparser::consolePrintln("Res 2: " + y->getArgumentName() + " = " + y->getArgumentValue()); x->setArgumentValue(3); mXparser::consolePrintln("Res 3: " + y->getArgumentName() + " = " + y->getArgumentValue()); ExpressionPtr e = new_Expression("x*y", x, y); mXparser::consolePrintln("Res 4: " + e->getExpressionString() + " = " + e->calculate());Code result
[mXparser-v.5.2.1] Res 1: y = 1.0 [mXparser-v.5.2.1] Res 2: y = 4.0 [mXparser-v.5.2.1] Res 3: y = 9.0 [mXparser-v.5.2.1] Res 4: x*y = 27.0Case 3: Implementing your own Argument Extension Java/C# code
// JAVA: ArgumentExtension interface implementation // ... import org.mariuszgromada.math.mxparser.*; import org.mariuszgromada.math.mxparser.mathcollection.*; class PiMultArgExt implements ArgumentExtension { private int multiple = 0; public double getArgumentValue() { multiple++; return MathConstants.PI * multiple; } public ArgumentExtension clone() { return new PiMultArgExt(); } }
// C#: ArgumentExtension interface implementation // ... using org.mariuszgromada.math.mxparser; using org.mariuszgromada.math.mxparser.mathcollection; class PiMultArgExt : ArgumentExtension { private int multiple = 0; public double getArgumentValue() { multiple++; return MathConstants.PI * multiple; } public ArgumentExtension clone() { return new PiMultArgExt(); } }
// JAVA: import org.mariuszgromada.math.mxparser.*; // C#: using org.mariuszgromada.math.mxparser; // ... // Creating extended argument Argument pim = new Argument("pim", new PiMultArgExt()); // Using extended argument in expression Expression e = new Expression("pim", pim); mXparser.consolePrintln("Res: 1st call: " + e.getExpressionString() + " = " + e.calculate()); mXparser.consolePrintln("Res: 2nd call: " + e.getExpressionString() + " = " + e.calculate()); mXparser.consolePrintln("Res: 3rd call: " + e.getExpressionString() + " = " + e.calculate());C++ code
// C++: ArgumentExtension interface implementation // ... #include "org/mariuszgromada/math/mxparser.hpp" // ... class PiMultArgExt : public ArgumentExtension { private: int multiple = 0; public: double getArgumentValue() override { multiple++; return Math::PI * multiple; } ArgumentExtensionPtr clone() override { return std::make_shared<PiMultArgExt>(); } }; inline ArgumentExtensionPtr new_PiMultArgExt() { return std::make_shared<PiMultArgExt>(); }
// Creating extended argument ArgumentExtensionPtr piMultArgExt = new_PiMultArgExt(); ArgumentPtr pim = new_Argument("pim", piMultArgExt); // Using extended argument in expression ExpressionPtr e = new_Expression("pim", pim); mXparser::consolePrintln("Res: 1st call: " + e->getExpressionString() + " = " + e->calculate()); mXparser::consolePrintln("Res: 2nd call: " + e->getExpressionString() + " = " + e->calculate()); mXparser::consolePrintln("Res: 3rd call: " + e->getExpressionString() + " = " + e->calculate());Code result
[mXparser-v.5.2.1] Res: 1st call: pim = 3.141592653589793 [mXparser-v.5.2.1] Res: 2nd call: pim = 6.283185307179586 [mXparser-v.5.2.1] Res: 3rd call: pim = 9.42477796076938Case 4: Getting list of missing user defined arguments Java/C# code
// JAVA: import org.mariuszgromada.math.mxparser.*; // C#: using org.mariuszgromada.math.mxparser; // ... Argument x = new Argument("x = 2"); Expression e = new Expression("2x+3y+4*a", x); mXparser.consolePrintln("syntax = " + e.checkSyntax()); mXparser.consolePrintln(e.getErrorMessage()); mXparser.consolePrintln("List of missing user defined arguments:"); for (String arg : e.getMissingUserDefinedArguments()) mXparser.consolePrintln("Argument '" + arg + "' has to be defined");C++ code
#include "org/mariuszgromada/math/mxparser.hpp" // ... ArgumentPtr x = new_Argument("x = 2"); ExpressionPtr e = new_Expression("2x+3y+4*a", x); mXparser::consolePrintln("syntax = " + e->checkSyntax()); mXparser::consolePrintln(e->getErrorMessage()); mXparser::consolePrintln("List of missing user defined arguments:"); for (const StringPtr &arg : *e->getMissingUserDefinedArguments()) mXparser::consolePrintln("Argument '" + arg + "' has to be defined");Code result
[mXparser-v.5.2.1] syntax = false [mXparser-v.5.2.1] [2x+3y+4*a]: Starting syntax check... [2x+3y+4*a]: Token 'y', index 7: Invalid token. [2x+3y+4*a]: Token 'a', index 11: Invalid token. [2x+3y+4*a]: Errors have been found. [mXparser-v.5.2.1] List of missing user defined arguments: [mXparser-v.5.2.1] Argument 'y' has to be defined [mXparser-v.5.2.1] Argument 'a' has to be definedCase 5: Possible conflict between Implied Multiplication and getting list of missing user defined arguments + recommended solutions
mXparser has many built-in constants. This list can also be expanded by user-defined arguments. As a result, a list of keywords recognized by mXparser is created. By default, the parser operates in implied multiplication mode. In this case, in many situations, these known constants / arguments will be treated as βhiddenβ multiplication. This is best illustrated by an example where βeβ is a builtin famous Eulerβs number.
Java/C# code// JAVA: import org.mariuszgromada.math.mxparser.*; // C#: using org.mariuszgromada.math.mxparser; // ... Expression e = new Expression("3*CasterAttack"); mXparser.consolePrintln("String '" + e.getExpressionString() + "' is interpreted as '" + e.getCanonicalExpressionString() + "'"); mXparser.consolePrintln("List of missing user defined arguments:"); for (String arg : e.getMissingUserDefinedArguments()) mXparser.consolePrintln("Argument '" + arg + "' has to be defined");C++ code
#include "org/mariuszgromada/math/mxparser.hpp" // ... ExpressionPtr e = new_Expression("3*CasterAttack"); mXparser::consolePrintln("String '" + e->getExpressionString() + "' is interpreted as '" + e->getCanonicalExpressionString() + "'"); mXparser::consolePrintln("List of missing user defined arguments:"); for (const StringPtr &arg : *e->getMissingUserDefinedArguments()) mXparser::consolePrintln("Argument '" + arg + "' has to be defined");Code result
[mXparser-v.5.2.1] String '3*CasterAttack' is interpreted as '3*Cast*e*rAttack' [mXparser-v.5.2.1] List of missing user defined arguments: [mXparser-v.5.2.1] Argument 'Cast' has to be defined [mXparser-v.5.2.1] Argument 'rAttack' has to be definedSolution #1 β turn off the Implied Multiplication Mode (locally) Java/C# code
// JAVA: import org.mariuszgromada.math.mxparser.*; // C#: using org.mariuszgromada.math.mxparser; // ... mXparser.consolePrintln("Solution #1"); Expression e = new Expression("3*CasterAttack"); e.disableImpliedMultiplicationMode(); mXparser.consolePrintln("String '" + e.getExpressionString() + "' is interpreted as '" + e.getCanonicalExpressionString() + "'"); mXparser.consolePrintln("List of missing user defined arguments:"); for (String arg : e.getMissingUserDefinedArguments()) mXparser.consolePrintln("Argument '" + arg + "' has to be defined");C++ code
#include "org/mariuszgromada/math/mxparser.hpp" // ... mXparser::consolePrintln("Solution #1"); ExpressionPtr e = new_Expression("3*CasterAttack"); e->disableImpliedMultiplicationMode(); mXparser::consolePrintln("String '" + e->getExpressionString() + "' is interpreted as '" + e->getCanonicalExpressionString() + "'"); mXparser::consolePrintln("List of missing user defined arguments:"); for (const StringPtr &arg : *e->getMissingUserDefinedArguments()) mXparser::consolePrintln("Argument '" + arg + "' has to be defined");Code result
[mXparser-v.5.2.1] Solution #1 [mXparser-v.5.2.1] String '3*CasterAttack' is interpreted as '3*CasterAttack' [mXparser-v.5.2.1] List of missing user defined arguments: [mXparser-v.5.2.1] Argument 'CasterAttack' has to be definedSolution #2 β turn off the Implied Multiplication Mode (globally) Java/C# code
// JAVA: import org.mariuszgromada.math.mxparser.*; // C#: using org.mariuszgromada.math.mxparser; // ... mXparser.consolePrintln("Solution #2"); mXparser.disableImpliedMultiplicationMode(); Expression e = new Expression("3*CasterAttack"); mXparser.consolePrintln("String '" + e.getExpressionString() + "' is interpreted as '" + e.getCanonicalExpressionString() + "'"); mXparser.consolePrintln("List of missing user defined arguments:"); for (String arg : e.getMissingUserDefinedArguments()) mXparser.consolePrintln("Argument '" + arg + "' has to be defined");C++ code
#include "org/mariuszgromada/math/mxparser.hpp" // ... mXparser::consolePrintln("Solution #2"); mXparser::disableImpliedMultiplicationMode(); ExpressionPtr e = new_Expression("3*CasterAttack"); mXparser::consolePrintln("String '" + e->getExpressionString() + "' is interpreted as '" + e->getCanonicalExpressionString() + "'"); mXparser::consolePrintln("List of missing user defined arguments:"); for (const StringPtr &arg : *e->getMissingUserDefinedArguments()) mXparser::consolePrintln("Argument '" + arg + "' has to be defined");Code result
[mXparser-v.5.2.1] Solution #2 [mXparser-v.5.2.1] String '3*CasterAttack' is interpreted as '3*CasterAttack' [mXparser-v.5.2.1] List of missing user defined arguments: [mXparser-v.5.2.1] Argument 'CasterAttack' has to be definedSolution #3 β remove builtin keyword Java/C# code
// JAVA: import org.mariuszgromada.math.mxparser.*; // C#: using org.mariuszgromada.math.mxparser; // ... mXparser.consolePrintln("Solution #3"); mXparser.removeBuiltinTokens("e"); Expression e = new Expression("3*CasterAttack"); mXparser.consolePrintln("String '" + e.getExpressionString() + "' is interpreted as '" + e.getCanonicalExpressionString() + "'"); mXparser.consolePrintln("List of missing user defined arguments:"); for (String arg : e.getMissingUserDefinedArguments()) mXparser.consolePrintln("Argument '" + arg + "' has to be defined");C++ code
#include "org/mariuszgromada/math/mxparser.hpp" // ... mXparser::consolePrintln("Solution #3"); mXparser::removeBuiltinTokens("e"); ExpressionPtr e = new_Expression("3*CasterAttack"); mXparser::consolePrintln("String '" + e->getExpressionString() + "' is interpreted as '" + e->getCanonicalExpressionString() + "'"); mXparser::consolePrintln("List of missing user defined arguments:"); for (const StringPtr &arg : *e->getMissingUserDefinedArguments()) mXparser::consolePrintln("Argument '" + arg + "' has to be defined");Code result
[mXparser-v.5.2.1] Solution #3 [mXparser-v.5.2.1] String '3*CasterAttack' is interpreted as '3*CasterAttack' [mXparser-v.5.2.1] List of missing user defined arguments: [mXparser-v.5.2.1] Argument 'CasterAttack' has to be definedSolution #4 β modify builtin keyword Java/C# code
// JAVA: import org.mariuszgromada.math.mxparser.*; // C#: using org.mariuszgromada.math.mxparser; // ... mXparser.consolePrintln("Solution #4"); mXparser.modifyBuiltinToken("e", "ee"); Expression e = new Expression("3*CasterAttack"); mXparser.consolePrintln("String '" + e.getExpressionString() + "' is interpreted as '" + e.getCanonicalExpressionString() + "'"); mXparser.consolePrintln("List of missing user defined arguments:"); for (String arg : e.getMissingUserDefinedArguments()) mXparser.consolePrintln("Argument '" + arg + "' has to be defined");C++ code
#include "org/mariuszgromada/math/mxparser.hpp" // ... mXparser::consolePrintln("Solution #4"); mXparser::modifyBuiltinToken("e", "ee"); ExpressionPtr e = new_Expression("3*CasterAttack"); mXparser::consolePrintln("String '" + e->getExpressionString() + "' is interpreted as '" + e->getCanonicalExpressionString() + "'"); mXparser::consolePrintln("List of missing user defined arguments:"); for (const StringPtr &arg : *e->getMissingUserDefinedArguments()) mXparser::consolePrintln("Argument '" + arg + "' has to be defined");Code result
[mXparser-v.5.2.1] Solution #4 [mXparser-v.5.2.1] String '3*CasterAttack' is interpreted as '3*CasterAttack' [mXparser-v.5.2.1] List of missing user defined arguments: [mXparser-v.5.2.1] Argument 'CasterAttack' has to be definedNuget β Package Manager (C#, F#, Visual Basic, β¦)
Install-Package
MathParser.org-mXparser
-Version
6.1.0
dotnet add package
MathParser.org-mXparser
--version
6.1.0
<PackageReference Include=
"MathParser.org-mXparser"
Version=
"6.1.0"
/>
<dependency>
<groupid>org.mariuszgromada.math
</groupid>
<artifactid>MathParser.org-mXparser
</artifactid>
<version>6.1.0
</version>
</dependency>
implementation
'org.mariuszgromada.math:MathParser.org-mXparser:6.1.0'
include(FetchContent)
FetchContent_Declare(MathParserOrgMxParser
GIT_REPOSITORY https://github.com/mariuszgromada/MathParser.org-mXparser.git
GIT_TAG v.6.1.0
SOURCE_SUBDIR CURRENT/cpp/lib
)
FetchContent_MakeAvailable(MathParserOrgMxParser
)
target_link_libraries(YourExecutable MathParserOrgMxParser
)
git clone
https://github.com/mariuszgromada/MathParser.org-mXparser
Download latest release β v.6.1.0 Sagitara: .NET bin onlyDownload latest release β v.6.1.0 Sagitara: JAVA bin onlyDownload latest release β v.6.1.0 Sagitara: bin + doc
NEWS FROM MATHPARSER.ORG SOURCE CODESource code .zipSource code .tar.gz
View on GitHubMathSpace.pl
Did you find the software useful?
Please consider donation π
DONATERetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4