1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Matlab: Finding a quicker method than simple iteration

  1. Jun 28, 2012 #1
    1. The problem statement, all variables and given/known data

    I am trying to speed up a function in matlab that solves the equation by simple iteration:

    λ= [itex]\frac{gT^{2}\frac{\text{tanh}(2\pi h)}{λ}}{2\pi}[/itex]

    Where λ is wavelength, h is wave height, T is period and g=9.81.

    Also here where it's a bit easier to read.

    2. Relevant equations



    3. The attempt at a solution

    Currently I'm using simple iteration so I'm guessing lambda then putting the equation in a while loop where the new value of lambda is given by putting the old value in the above equation. The while terminates when the values of lambda converge.

    This is one of the slowest parts of my code and thousands of iterations are done when I run my code.

    Does anyone know of a method which converges faster or would be computationally faster? I tried the Newton Raphson method and rearranged the equation by making one side zero to get f(x) and differentiated for f(x). This converges quicker but often gives the wrong answer.

    Thanks
     
    Last edited: Jun 28, 2012
  2. jcsd
  3. Jun 28, 2012 #2

    gneill

    User Avatar

    Staff: Mentor

    Matlab probably has built-in solvers that may behave better. Investigate "roots of scalar functions", for example.
     
  4. Jun 28, 2012 #3
    Thanks for the push in the right direction. Matlab has a built in function fzero which gets the roots. Iteration is quicker for 99% of my calculations but the final 1% is much faster with fzero so I have found the point where it becomes beneficial to use fzero and put an if in my function. So now the function is about 50 times faster. Thanks!
     
  5. Jun 28, 2012 #4
    rewmck - what are you trying to solve for? Also, is that formulae stated correctly? I read your equation as follows:

    [tex]
    \lambda = \frac{g \cdot T^2}{2\, \pi} \cdot \frac{\tanh(2\, \pi \, h)}{\lambda}
    [/tex]
     
  6. Jun 29, 2012 #5
    Hi Theo, solving for lambda and you're right the equation is wrong, it should be:
    [tex]
    \lambda = \frac{g \cdot T^2}{2\, \pi} \cdot \tanh\left(\frac{2\, \pi \, h}{\lambda}\right)
    [/tex]
    Sorry about that.

    So I solve for lambda over a range of T values. I discovered that the fzero function which works much quicker than simple iteration for large T values is actually giving completely the wrong answer but at smaller T values it gives the same as simple iteration. I'm not sure what is happening as I haven't had the chance to look closely at the fzero code but I guess it is round off errors or diverging. I think it is probably diverging as it is out by a factor of 10^16 for the value I checked.


     
  7. Jun 29, 2012 #6

    gneill

    User Avatar

    Staff: Mentor

    Have you plotted the function f(λ) = 0 to investigate why it might be 'tricky' in some regions of its domain?
     
  8. Jul 4, 2012 #7
    Derive analytic expressions for what lambda approaches at very large T and at very small T.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Matlab: Finding a quicker method than simple iteration
Loading...