P: n/a

Hi, I have a program which reads a file containing integers in [0,10].
The program reads the value of a variable every 2 seconds, then maps it
to another interval, say [20,22000], obtaining a new value.
I already have a function which updates the variable, gradually
changing from the old one to the new one during the 2 seconds, which
uses a linear function.
Know I need to make the value of the variable change between old and
new in a "logarithmic way", that is the values between old and new must
follow a logarithmic scale.
How can I do that?  
Share this Question
P: n/a

different wrote:
Hi, I have a program which reads a file containing integers in [0,10].
The program reads the value of a variable every 2 seconds, then maps it
to another interval, say [20,22000], obtaining a new value.
I already have a function which updates the variable, gradually
changing from the old one to the new one during the 2 seconds, which
uses a linear function.
Know I need to make the value of the variable change between old and
new in a "logarithmic way", that is the values between old and new must
follow a logarithmic scale.
How can I do that?
This is not a question about C but about elementary arithmetic. I will
offer an explanation but it is al; offtopic in comp.lang.c and should
not be replied to.
<ot>
You are looking for a function that maps a linear variable x onto an
exponential variable y.
y = A*exp(bx)
using a for log(A), this is the same as
log(y) = a + bx
We have a form with two unknowns and we have two data points:
log(20) = a + 0*b
log(22000) = a + 10b
so we know immediately that
a = log(20)
or A = 20
and that
b = (log(22000)  log(20)) / 10
or
b = log(1100) / 10
so the mapping is
log(y) = log(20) + x * log(1100)/10
y = 20 * pow(1100, x/10);
</ot>  
P: n/a

"different" <ci**********@gmail.comwrote in message
news:11**********************@l53g2000cwa.googlegr oups.com...
Hi, I have a program which reads a file containing integers in [0,10].
The program reads the value of a variable every 2 seconds, then maps it
to another interval, say [20,22000], obtaining a new value.
I already have a function which updates the variable, gradually
changing from the old one to the new one during the 2 seconds, which
uses a linear function.
Know I need to make the value of the variable change between old and
new in a "logarithmic way", that is the values between old and new must
follow a logarithmic scale.
How can I do that?
sci.math and related groups have a large pool of bored mathematicians and
students who will gladly address such topics.

David T. Ashley (dt*@e3ft.com) http://www.e3ft.com (Consulting Home Page) http://www.dtashley.com (Personal Home Page) http://gpl.e3ft.com (GPL Publications and Projects)  
P: n/a

David T. Ashley wrote:
"different" <ci**********@gmail.comwrote in message
news:11**********************@l53g2000cwa.googlegr oups.com...
Hi, I have a program which reads a file containing integers in [0,10].
The program reads the value of a variable every 2 seconds, then maps it
to another interval, say [20,22000], obtaining a new value.
I already have a function which updates the variable, gradually
changing from the old one to the new one during the 2 seconds, which
uses a linear function.
Know I need to make the value of the variable change between old and
new in a "logarithmic way", that is the values between old and new must
follow a logarithmic scale.
How can I do that?
sci.math and related groups have a large pool of bored mathematicians and
students who will gladly address such topics.
They might even point him to this: http://www.mpipmainz.mpg.de/~desern...og_interpol.ps

David T. Ashley (dt*@e3ft.com) http://www.e3ft.com (Consulting Home Page) http://www.dtashley.com (Personal Home Page) http://gpl.e3ft.com (GPL Publications and Projects)
 
P: n/a

Sorry, I know that it was OT, but I always tried sci.math and another
forum about algorithms, but they did not give me an answer in one week.
Thank you for the reply.
On 18 Gen, 19:26, Martin Ambuhl <mamb...@earthlink.netwrote:
different wrote:
Hi, I have a program which reads a file containing integers in [0,10].
The program reads the value of a variable every 2 seconds, then maps it
to another interval, say [20,22000], obtaining a new value.
I already have a function which updates the variable, gradually
changing from the old one to the new one during the 2 seconds, which
uses a linear function.
Know I need to make the value of the variable change between old and
new in a "logarithmic way", that is the values between old and new must
follow a logarithmic scale.
How can I do that?This is not a question about C but about elementary arithmetic. I will
offer an explanation but it is al; offtopic in comp.lang.c and should
not be replied to.
<ot>
You are looking for a function that maps a linear variable x onto an
exponential variable y.
y = A*exp(bx)
using a for log(A), this is the same as
log(y) = a + bx
We have a form with two unknowns and we have two data points:
log(20) = a + 0*b
log(22000) = a + 10b
so we know immediately that
a = log(20)
or A = 20
and that
b = (log(22000)  log(20)) / 10
or
b = log(1100) / 10
so the mapping is
log(y) = log(20) + x * log(1100)/10
y = 20 * pow(1100, x/10);
</ot>
 
P: n/a

different napisal(a):
Hi, I have a program which reads a file containing integers in [0,10].
The program reads the value of a variable every 2 seconds, then maps it
to another interval, say [20,22000], obtaining a new value.
I already have a function which updates the variable, gradually
changing from the old one to the new one during the 2 seconds, which
uses a linear function.
Know I need to make the value of the variable change between old and
new in a "logarithmic way", that is the values between old and new must
follow a logarithmic scale.
How can I do that?
Instead of the function log(x), rather you have
to use the following one: log(x  1), for x >= 0.
Then the interpolation formula for x in [x_1,x_2]
with ratio f = a/(a+b), looks as follows:
(log(x_2 1)  log(x  1)) / (log(x  1)  log(x_1  1)) = (1/f)  1
After a simple calculation one can get
x = (x_1  1)^{f  1} * (x_2  1)^{f} + 1 ,
what you expect.
Best Regards,
Z. Karno  
P: n/a

Zbigniew Karno napisal(a):
different napisal(a):
Hi, I have a program which reads a file containing integers in [0,10].
The program reads the value of a variable every 2 seconds, then maps it
to another interval, say [20,22000], obtaining a new value.
I already have a function which updates the variable, gradually
changing from the old one to the new one during the 2 seconds, which
uses a linear function.
Know I need to make the value of the variable change between old and
new in a "logarithmic way", that is the values between old and new must
follow a logarithmic scale.
How can I do that?
Instead of the function log(x), rather you have
to use the following one: log(x  1), for x >= 0.
Then the interpolation formula for x in [x_1,x_2]
with ratio f = a/(a+b), looks as follows:
(log(x_2 1)  log(x  1)) / (log(x  1)  log(x_1  1)) = (1/f)  1
After a simple calculation one can get
x = (x_1  1)^{f  1} * (x_2  1)^{f} + 1 ,
what you expect.
Best Regards,
Z. Karno
Incorrect.
The sign  should be replaced by +.
So, the following function has to be used:
log(x + 1), for x >= 0.
In this case, the interpolation formula looks as
follows:
(log(x_2 +1)  log(x + 1)) / (log(x + 1)  log(x_1 + 1)) = (1/f) 
1.
Thus
x = (x_1 + 1)^{f 1} * (x_2 + 1)^{f}  1 .
Regards,
Z. Karno   This discussion thread is closed Replies have been disabled for this discussion.   Question stats  viewed: 10580
 replies: 6
 date asked: Jan 18 '07
