Tricky exponential solve-for problem

drb1549

New member
Joined
Apr 17, 2020
Messages
3
I have a model for a quantity 'y' that depends on characteristics 'a' and 'd'. I now want to find what the characteristic 'd' needs to be to achieve some fixed quantity 'y'. I realize in this simple description guess and check might work, but need this to be precise with a non-iterative solution. I have a couple other models of the same system that i was able to solve but i'm stuck on this one.
OK, the model is:
y=[(1-e^(-a*d))/(a*d)]^2

so i go for getting 'd' alone as quick as possible.
... some fairly obvious steps...
1-a*d*sqrt(y)=e^(-a*d)
-a*sqrt(y)= (1/d)*[e^(-a*d)-1]

here I don't see anything else else to do but try to get rid of "e" so using ln(M*N)=ln(M)+ln(N) i get
ln[-a*sqrt(y)] = ln(1/d) + ln[e^(-a*d)-1]

But here i'm stuck, ln(-#) isn't rational and since i can't seem to figure out how to manipulate anything in the form ln(M + N). I also tried expanding the polynomial first but of course end up in a similar case. where did i go wrong, please help, thanks.
 
When a variable is both in the exponent, and outside of it, generally I don't expect to be able to solve algebraically for it.

This is a dirty little secret of math classes: You are usually shown only the kinds of problems we can teach you how to solve, and you often are not told how easy it is to write an equation that can't be solved at all (except by numerical approximation methods).
 
Well crud. Thanks Dr.Peterson, knew that was a possibility but didn't know how common it could be.

Do you think that you could give me any guidance on the numerical approximation. I had actually started this since I was desperate by combining common terms from the work i had already done, ln[-a*sqrt(y)], ln(a), (C-ln[sqrt(y)], e^[-a*sqrt(y)], etc. I found some very close similarities but couldn't get the slope quite right. Certainly seems from several iterations that dominant term should be LN, but can't quite get a match (something with R2>.95). Is it generally better to start from scratch or continue on the path i have been on?

Thanks.
 
Do you think that you could give me any guidance on the numerical approximation. I had actually started this since I was desperate by combining common terms from the work i had already done, ln[-a*sqrt(y)], ln(a), (C-ln[sqrt(y)], e^[-a*sqrt(y)], etc. I found some very close similarities but couldn't get the slope quite right. Certainly seems from several iterations that dominant term should be LN, but can't quite get a match (something with R2>.95). Is it generally better to start from scratch or continue on the path i have been on?

I'm not sure what you're saying you tried. Can you explain more? It sounds like some sort of curve fitting, which is not what I meant by "numerical approximation".

What I was referring to was something like Newton's method, given specific numbers for all the parameters (a and y). A graphing calculator or program does the same thing; for example, Desmos could find the intersection of the curves representing the left and right sides of any form of your equation (some forms likely yielding more accurate answers than others).

I think this could also be solved by the Lambert W function, if you had that available. I don't know your context, and how you hoped to evaluate a solution.
 
Also, in your model what is the range of values that y can have (beyond the obvious y>0) ?
 
@ Cubist - the range of 'y' is 0-1, a ratio of tested good units to total.

@Dr. Peterson - Thank you for the pointers, i will take a look a the methods you pointed out.
 
Here's a method found by polynomial least squares fitting. I hope it's suitable...

Let x=a*d therefore your post#1 equation becomes y=((1 - e^(-x))/x)^2

Let q=1/sqrt(y)
if q≥7 then x=q
if q<7 then x=-2.37 + q*(2.999 + q*( -0.7528 + q*(0.1506 + q*( -0.015439 + q*0.0006347))))
Or if you prefer the above in polynomial form, if q<7 then x=0.0006347*q^5 -0.015439*q^4 +0.1506*q^3 -0.7528*q^2 +2.999*q -2.37

I've tested it in the range 0.0001 < y < 0.9999 and the error in x seems to stay less than 0.012 but it is more accurate for lower y values.

I found the above using Python's "numpy.polyfit". Adding a few more terms would obviously increase accuracy - but I don't know what your full goal is regarding simplicity of use vs accuracy, nor why an iterative solution isn't appropriate.
 
Top