Algorithm to partition a complex equation into 2 master equations

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
4 replies · 2K views
Jamin2112
Messages
973
Reaction score
12
My Calculus tool is coming along. The only thing left is to write some it's helper functions, such as the one described below:

Code:
void CalculusWizard::partitionEquation(const std::string & eq, std::string & eq1, std::string & eq2, CalcWizConsts::eqOps & oper)
{
	/* Given an equation eq, partion eq into 
	   eq = eq1 oper eq2
	   where oper is the operator with the lowest precedence, 
	   e.g. eq = "x*sin(x)+x^2" --> eq1 = "x*sin(x)", oper = ADDITION, eq2 = "x^2".
	   If there is no operator, e.g. eq = "x", then oper = NONE.
	*/
}

which uses

Code:
enum eqOps { ADDITION, SUBTRACTION, MULTIPLICATION, DIVISION, COMPOSITION, NONE };

defined in

Code:
namespace CalcWizConsts.

Does anyone have advice for how I should start out on this function? Or is there any resource you could direct me to where I could learn this type of thing?
 
Physics news on Phys.org
Welcome to the fascinating world of parsers and lexical analysers.

What should your function do if the equation looks like x + x + x?
 
voko said:
Welcome to the fascinating world of parsers and lexical analysers.

What should your function do if the equation looks like x + x + x?

In that case,

eq1 = x,
eq2 = x + x
 
Jamin2112 said:
In that case,

eq1 = x,
eq2 = x + x

+ is too easy, because it is associative. Be careful when you have x - y - z.

I think in your notation eq2 would then become y ##+## z. Or better, eq1 should have been x - y.