440,649 Members | 2,142 Online
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,649 IT Pros & Developers. It's quick & easy.

logarithmic interpolation

 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? Jan 18 '07 #1
6 Replies

 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; off-topic in comp.lang.c and should not be replied to. 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); Jan 18 '07 #2

 P: n/a "different"

 P: n/a David T. Ashley wrote: "different"

 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 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); Jan 19 '07 #5

 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 Jan 19 '07 #6

 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 Jan 19 '07 #7

This discussion thread is closed

Replies have been disabled for this discussion.