Efficient MATLAB M-File for Gradient Approximation with Newton's Method

  • Context: MATLAB 
  • Thread starter Thread starter qspeechc
  • Start date Start date
  • Tags Tags
    Matlab
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
4 replies · 8K views
qspeechc
Messages
839
Reaction score
15
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.
 
Physics news on Phys.org
qspeechc said:
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.

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)
 
It works if, when you call g you do it as such:

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

You should make
function y = g(f,x,h)
h is not an input variable, it is calculated according to the computer's computing power (?)

And call

g(@f,2,h)

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.
 
qspeechc said:
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.
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)
 
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!