Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

MATLAB and M-Files

  1. Sep 17, 2007 #1
    I have this assignment:
    https://vula.uct.ac.za/access/content/group/317a243a-d926-4470-804c-7d46e296ab63/ass3_07.pdf

    Although, I don't know if you'll be able to access that.
    I am busy with task 2 in the file above.
    Anyway, I am trying to write an M-File for a function g. g has two input arguments, a function f(x), and a x-value of the function. The file is then meant to use Newton's Method to approximate the gradient at x.

    Here is my code:

    >>function y = g(f(x), x)
    >>y = (f(x+h) - f(x))/h;

    I have found the best value for h in a previous bit of code.

    In the command window I try to evaluate a functions' gradient at a point thus:

    >>g(x^2, 2)

    Meaning f(x) = x^2 and x = 2, but I get the error:
    ??? Error: File: F:\My Documents\MATLAB\Numerical Methods\g.m Line: 1 Column: 17
    Unbalanced or misused parentheses or brackets.

    The same for
    >>g(x.^2, 2)
    >>g('x^2', 2)
    >>g('x.^2', 2)

    But I can not see where I have "Unbalanced or misused parentheses or brackets" in the line:

    >>function y = g(f(x), x)

    What is my error, and how do I correct it? Thanks.
     
  2. jcsd
  3. Sep 17, 2007 #2

    CEL

    User Avatar

    You should make
    function y = g(f,x,h)
    y = (f(x+h) - f(x))/h;

    and a function f:
    function y = f(x)
    y = x^2;

    And call

    g(@f,2,h)
     
  4. Sep 17, 2007 #3
    It works if, when you call g you do it as such:

    g(inline('x^2'), 2)

    h is not an input variable, it is calculated according to the computer's computing power (?)

    Sorry, I do not get that.

    Anyway, it doesn't really matter because I found a way I understand to make it work. I would like to get rid of having to write "inline" though.
    Thank you for your help.
     
  5. Sep 17, 2007 #4

    CEL

    User Avatar

    Unless you declare h to be global, there is no means for your function g to know its value, unless you calculate it inside your g function.
    The symbol @ is a handle to a function. If you have a function called myfun, you pass it as a parameter for another function using the handle.
    for instance:
    foo(@myfun, x)
     
  6. Sep 17, 2007 #5
    Yes, h is calculated inside the function file.
    We have not covered the topic of handles. I thinks it's best I stick to inline objects, which we have covered, as I do not fully understand handles yet. Maybe I try again tomorrow.
    Thank you very much for your help CEL!
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?