MATLAB Matlab script for central difference

AI Thread Summary
The discussion focuses on creating a Matlab script to compute the centered difference approximation for the first derivative of a specific polynomial function while demonstrating the impact of round-off error as the step size decreases. The user encounters an error message indicating that function definitions are not allowed in the current context, which suggests a misunderstanding of how to structure Matlab code. Suggestions include rewriting the code as a script or saving it as an m-file to properly define functions. Additionally, advice is given to start with a simple loop for direct calculations if unfamiliar with Matlab functions. The conversation emphasizes the importance of understanding Matlab's function and script structures to avoid errors.
NYK
Messages
27
Reaction score
0
I am trying to write a script that will compute repeatedly, beginning with step size h=1 and then progressively divide the step size by a factor of 10 to demonstrate how round-off error becomes dominant as the step size is reduced.

In using centered difference approximation of O(h2) to estimate the first derivative at x=0.7 of:

f(x) = -0.25x^5+0.15x^4-1.25x^3+0.35x^2+2.1x-1.4
I have posted the script I have so far bellow:clear;clc;clear all

ff=@(x) -0.25*x^5+0.15*x^4-1.25*x^3+0.35*x^2+2.1*x-1.4;
df=@(x) -1.25*x^4+0.6*x^3-3.75*x^2+0.7*x+2.1;

function diffex(func,dfunc,x,n)

format long
dftrue=dfunc(x);
h=1;
H(1)=h;
D(1)=(func(x+h)-func(x-h))/(2*h);
E(1)=abs(dftrue-D(i));
for i=2:n
h=h/10;
H(i)=h;
D(i)=(func(x+h)-func(x-h))/(2*h);
E(i)=abs(dftrue-D(i));
end
L=[H' D' E']';
fprintf(' step size finite difference round-off error\n');
fprintf('%14.10f %16.14f %16.13f\n',L);
loglog(H,E),xlabel('Step Size'),ylabel('Error')
title('Plot of Error vs. Step Size')
format shortdiffex(ff,df,0.7,11)



Any advice, pointers or suggestions will be greatly appreciated!

thank you
 
Physics news on Phys.org
What goes wrong? Can you post here the output?
 
The error code i get is that "Function definitions are not permitted in this context", but i really don't need a function file. I have begun writing it as a regular script file.
 
If you are not familiar with the use of the Matlab functions then you should try first the easy way: simple loop where you compute directly the function, its derivative and the corresponding error.
If you really want to use Matlab functions you should have a look at some simple example provided by Matlab Help.
 
FYI: The error message "Function definitions are not permitted in this context" arises when you try to type a function in at the command line. That is disallowed; all functions must be saved in an mfile.

Rewriting this to be a script rather than a function is one option, but the other way would be to just paste the code into an mfile, save the file, and then you can call the function freely.
 

Similar threads

Replies
4
Views
1K
Replies
1
Views
9K
Replies
2
Views
3K
Replies
1
Views
2K
Replies
2
Views
2K
Replies
4
Views
3K
Replies
4
Views
3K
Back
Top