• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1242
  • Last Modified:

Solving exponential equations in C++

Is there a function or a library that can solve equations like: exp(constant*x) + exp(constant*x) = constant ?
If not , what is the best way to solve this equation in c++ ?

Thanks
0
Chrysaor
Asked:
Chrysaor
4 Solutions
 
tcullerCommented:
Depends on what you mean by "exp"--what is this function supposed to do? Also, you can't assign a constant to anything but a constant, as far as I know. The entire expression must be a constant (unless x is a constant as well). Can you be a  bit more specific as to what exactly you're trying to accomplish?
0
 
jhshuklaCommented:
He is trying to solve the equation "e^mx + e^nx = k" for x; m, n & k are known.
0
 
ChrysaorAuthor Commented:
Excactly as jhshukla said.. Any ideas?
0
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
MatrixDudCommented:
If all values are known, as you mentioned jhshukla was right about, then I don't see what you are trying to do (function is already solved).

The standard library has the exp function (math.h). You'll have to break the algebra down to its simplest form and solve for what ever variable you're looking for. Standard C++ libraries won't do that for you. A library like MathCAD might. Unless you need to break down a lot of different equations then you would be better to just do it yourself.
0
 
JIEXACommented:

/* Newton's method example.
   http://en.wikipedia.org/wiki/Newton%27s_method */
#include <stdio.h>
#include <math.h>
 
/* the function */
#define f(x)	exp(2*x)+exp(3*x)-5
/* the derivative on x */
#define f_(x)	2*exp(2*x)+3*exp(3*x)
/* the first quess */
#define x0	-1
/* precision */
#define epsilon	1e-9
 
int main()
{
    double prev,curr,delta;
    prev=curr=x0;
    while(1)
    {
	curr = prev - (f(prev)/f_(prev));
	delta = fabs(curr-prev);
	printf(">> %.10f e=%.10f\n",curr,delta);
	if (delta < epsilon)
	  break;
	prev = curr;
    }
    printf("%.10f\n",curr);
    return 0;
}

Open in new window

0
 
JIEXACommented:
Sorry, wrong usage of macros, here is new code.
/* Newton's method example.
   http://en.wikipedia.org/wiki/Newton%27s_method */
#include <stdio.h>
#include <math.h>
 
/* the function */
#define f(x)	exp(2*x)+exp(3*x)-5
/* the derivative on x */
#define f_(x)	2*exp(2*x)+3*exp(3*x)
/* the first guess */
#define x0	-1
/* precision */
#define epsilon	1e-9
 
int main()
{
    double prev,curr,delta;
    prev=curr=x0;
    while(1)
    {
	curr = prev - (f(prev))/(f_(prev));
	delta = fabs(curr-prev);
	/*printf(">> %.10f e=%.10f\n",curr,delta);*/
	if (delta < epsilon)
	  break;
	prev = curr;
    }
    printf("root=%.10f, f(root)=%.10f\n",curr,(f(curr)));
    return 0;
}

Open in new window

0
 
evilrixSenior Software Engineer (Avast)Commented:
>> Sorry, wrong usage of macros, here is new code.
Just a style tip, in C++ prefer to use in-line functions, macros have so many reasons for not being a good idea in C++ it's not even funny :)
0
 
jhshuklaCommented:
substitute e^x = A
A^m + A^n = k
depending on the values of m & n, the equation may be unsolvable or you may end up with non-real roots (for A).

x = ln(A)

wikipedia has a variety of formulas for solving cubic & quartic equations
http://en.wikipedia.org/wiki/Cubic_equation
http://en.wikipedia.org/wiki/Quartic_equation
there is no set formula for solving higher order equations. you can use newton's method as jiexa showed.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Microsoft Windows 7 Basic

This introductory course to Windows 7 environment will teach you about working with the Windows operating system. You will learn about basic functions including start menu; the desktop; managing files, folders, and libraries.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now