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
Click For Summary

Discussion Overview

The discussion revolves around writing an M-File in MATLAB for approximating the gradient of a function using Newton's Method. Participants are addressing issues related to function input, error messages, and the implementation of the gradient approximation.

Discussion Character

  • Technical explanation
  • Homework-related
  • Debate/contested

Main Points Raised

  • One participant shares their initial code for the function g, which aims to compute the gradient but encounters an error related to parentheses.
  • Another participant suggests modifying the function definition to include h as a parameter and provides an example of how to define a function f separately.
  • Some participants propose using the inline function to call g, while others express a desire to avoid inline due to their understanding of function handles being limited.
  • There is mention of h being dependent on the computer's computing power, although this is not universally accepted or clarified.
  • One participant indicates that they prefer to stick with inline objects rather than exploring function handles, citing a lack of understanding.

Areas of Agreement / Disagreement

Participants express differing opinions on the use of inline functions versus function handles, and there is no consensus on the best approach to implement the gradient approximation. The discussion remains unresolved regarding the optimal method for defining and using the function g.

Contextual Notes

Participants have not reached a consensus on the handling of the variable h, and there are unresolved questions about the implications of using inline functions versus function handles in MATLAB.

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!
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 3 ·
Replies
3
Views
5K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
Replies
4
Views
5K
  • · Replies 8 ·
Replies
8
Views
2K
Replies
7
Views
9K
  • · Replies 9 ·
Replies
9
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K