- #1
Adrian Soo
- 8
- 0
Hi everyone, I am trying to differentiate a function by means of Richardson Extrapolation in MATLAB. However, I could not run the program. Here are the outputs and its codes. Could anyone explain to me
what is my mistake? The codes are based on "Numerical Methods Using MATLAB by John H. Matthews and
Kurtis D. Fink (International Edition)".
>> f = @(x) x^2;
>> toler = 0.005;
>> function [L,n] = difflim(f,x,toler)
function [L,n] = difflim(f,x,toler)
|
Error: Function definitions are not permitted in this context.
=========================================
M-file:
function [L,n] = difflim(f,x,toler)
%Input - f is the function input as a string 'f'
% - x is the differentiation point
% - toler is the tolerance for the error
%Output - L=[H' D' E']
% H is the vector of step sizes
% D is the vector of approximate derivatives
% E is the vector of error bounds
% n is the coordinate of the "best approximation"
max1 = 15;
h = 1;
H(1) = h;
D(1) = (feval(f,x+h)-feval(f,x-h))/(2*h);
E(1) = 0;
R(1) = 0;
for n = 1:2
h = h/10;
H(n+1) = h;
D(n+1) = (feval(f,x+h)-feval(f,x-h))/(2*h);
E(n+1) = abs(D(n+1)+abs(D(n))+eps);
end
n = 2;
while((E(n)>E(n+1))&(R(n)>toler))&n<max1
h=h/10;
H(n+2)=h;
D(n+2)=(feval(f,x+h)-feval(f,x-h))/(2*h);
E(n+2)=abs(D(n+2)-D(n+1));
R(n+2)=2*E(n+2)/(abs(D(n+2))+abs(D(n+1))+eps);
n=n+1;
end
n=length(D)-1;
L=[H' D' E'];
what is my mistake? The codes are based on "Numerical Methods Using MATLAB by John H. Matthews and
Kurtis D. Fink (International Edition)".
>> f = @(x) x^2;
>> toler = 0.005;
>> function [L,n] = difflim(f,x,toler)
function [L,n] = difflim(f,x,toler)
|
Error: Function definitions are not permitted in this context.
=========================================
M-file:
function [L,n] = difflim(f,x,toler)
%Input - f is the function input as a string 'f'
% - x is the differentiation point
% - toler is the tolerance for the error
%Output - L=[H' D' E']
% H is the vector of step sizes
% D is the vector of approximate derivatives
% E is the vector of error bounds
% n is the coordinate of the "best approximation"
max1 = 15;
h = 1;
H(1) = h;
D(1) = (feval(f,x+h)-feval(f,x-h))/(2*h);
E(1) = 0;
R(1) = 0;
for n = 1:2
h = h/10;
H(n+1) = h;
D(n+1) = (feval(f,x+h)-feval(f,x-h))/(2*h);
E(n+1) = abs(D(n+1)+abs(D(n))+eps);
end
n = 2;
while((E(n)>E(n+1))&(R(n)>toler))&n<max1
h=h/10;
H(n+2)=h;
D(n+2)=(feval(f,x+h)-feval(f,x-h))/(2*h);
E(n+2)=abs(D(n+2)-D(n+1));
R(n+2)=2*E(n+2)/(abs(D(n+2))+abs(D(n+1))+eps);
n=n+1;
end
n=length(D)-1;
L=[H' D' E'];