Solved

Solving exponential equations in C++

Posted on 2009-05-07
8
1,164 Views
Last Modified: 2012-06-21
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
Comment
Question by:Chrysaor
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
8 Comments
 
LVL 9

Expert Comment

by:tculler
ID: 24326232
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
 
LVL 9

Expert Comment

by:jhshukla
ID: 24346957
He is trying to solve the equation "e^mx + e^nx = k" for x; m, n & k are known.
0
 

Author Comment

by:Chrysaor
ID: 24350226
Excactly as jhshukla said.. Any ideas?
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 1

Assisted Solution

by:MatrixDud
MatrixDud earned 83 total points
ID: 24496538
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
 
LVL 8

Expert Comment

by:JIEXA
ID: 24533968

/* 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
 
LVL 8

Assisted Solution

by:JIEXA
JIEXA earned 84 total points
ID: 24534003
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
 
LVL 40

Assisted Solution

by:evilrix
evilrix earned 83 total points
ID: 24534010
>> 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
 
LVL 9

Accepted Solution

by:
jhshukla earned 250 total points
ID: 24542526
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

Featured Post

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

IntroductionThis article is the second in a three part article series on the Visual Studio 2008 Debugger.  It provides tips in setting and using breakpoints. If not familiar with this debugger, you can find a basic introduction in the EE article loc…
This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

740 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question