Matlab script for central difference

  • MATLAB
  • Thread starter NYK
  • Start date
  • #1
NYK
27
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

[email protected](x) -0.25*x^5+0.15*x^4-1.25*x^3+0.35*x^2+2.1*x-1.4;
[email protected](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 short


diffex(ff,df,0.7,11)






Any advice, pointers or suggestions will be greatly appreciated!

thank you
 

Answers and Replies

  • #2
155
24
What goes wrong? Can you post here the output?
 
  • #3
NYK
27
0
The error code i get is that "Function definitions are not permitted in this context", but i really dont need a function file. I have begun writing it as a regular script file.
 
  • #4
155
24
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.
 
  • #5
kreil
Insights Author
Gold Member
668
67
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.
 

Related Threads on Matlab script for central difference

Replies
3
Views
4K
  • Last Post
Replies
1
Views
2K
Replies
6
Views
2K
  • Last Post
Replies
3
Views
2K
Replies
3
Views
6K
Replies
4
Views
4K
Replies
2
Views
9K
Replies
2
Views
9K
Replies
2
Views
7K
Top