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