logarithmic interpolation

Discussion in 'C++' started by different, Jan 18, 2007.

  1. different

    different Guest

    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?
     
    different, Jan 18, 2007
    #1
    1. Advertising

  2. 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?


    Is there a C++ language question hiding here?
     
    Victor Bazarov, Jan 18, 2007
    #2
    1. Advertising

  3. different

    Mark P Guest

    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?
    >


    First you question is off-topic. Try comp.programming in the future
    (followup-to reset).

    Besides being off-topic, your question is not well defined. What is "a
    logarithmic way"? I'll take a wild guess and suppose you mean log(new)
    = m * old + b, for constants m and b. Let 0 map to 20 and 10 map to
    22000, then solve for m and b. Then new = exp( m * old + b). Or is
    "logarithmic way" supposed to mean something else?
     
    Mark P, Jan 18, 2007
    #3
  4. In message <eoodco$9bh$>, Victor Bazarov
    <> writes
    >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?

    >
    >Is there a C++ language question hiding here?


    If there is, the answer probably involves <cmath>, std::pow() and
    std::log[10]().

    --
    Richard Herring
     
    Richard Herring, Jan 19, 2007
    #4
  5. 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
     
    Zbigniew Karno, Jan 19, 2007
    #5
  6. 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
     
    Zbigniew Karno, Jan 19, 2007
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Andre

    Drawing a logarithmic histogram

    Andre, Jul 16, 2003, in forum: C Programming
    Replies:
    1
    Views:
    435
    Glen Herrmannsfeldt
    Jul 17, 2003
  2. Derek Basch

    Matplotlib logarithmic scatter plot

    Derek Basch, Feb 27, 2006, in forum: Python
    Replies:
    9
    Views:
    4,926
    evander21
    Nov 3, 2010
  3. Derek Basch
    Replies:
    8
    Views:
    419
    Fredrik Lundh
    Feb 28, 2006
  4. different

    logarithmic interpolation

    different, Jan 18, 2007, in forum: C Programming
    Replies:
    6
    Views:
    943
    Zbigniew Karno
    Jan 19, 2007
  5. Sunny

    Logarithmic scale

    Sunny, Sep 25, 2008, in forum: Javascript
    Replies:
    8
    Views:
    151
    Bart Van der Donck
    Sep 28, 2008
Loading...

Share This Page