- #1
mathmannn
- 15
- 0
1. Homework Statement
Write an m.file that will integrate a function [itex]f(x, y)[/itex] on any given rectangle [itex] (a,b)\times(c,d)[/itex] and returns the value of the integral from [itex]a [/itex] to [itex] b [/itex] and [itex]c [/itex] to [itex]d [/itex] of the function [itex]f(x,y) [/itex]. Include error-catching code in the case that the integral diverges. The program should use the notion of a limit of sums, so that you increase the number of Riemann cubes until the approximate value of the integral shows a relative error [itex]\displaystyle \frac{S_{new} - S_{old}}{S_{new}}[/itex] of less than 0.001.
Ok so here is what I have right now
but I can not figure out what is wrong with my code. When I test it using [itex] \int_0^1 \int_0^1 xy \quad dx dy[/itex] which I know should be [itex] \frac{1}{4} [/itex]
This is what it returns (without the table)
Any kind of help would be awesome!
Write an m.file that will integrate a function [itex]f(x, y)[/itex] on any given rectangle [itex] (a,b)\times(c,d)[/itex] and returns the value of the integral from [itex]a [/itex] to [itex] b [/itex] and [itex]c [/itex] to [itex]d [/itex] of the function [itex]f(x,y) [/itex]. Include error-catching code in the case that the integral diverges. The program should use the notion of a limit of sums, so that you increase the number of Riemann cubes until the approximate value of the integral shows a relative error [itex]\displaystyle \frac{S_{new} - S_{old}}{S_{new}}[/itex] of less than 0.001.
Homework Equations
The Attempt at a Solution
Ok so here is what I have right now
Code:
function [re,risum]=ftc3(f,a,b,c,d,maxit)
% ftc3: Finds the riemann Sum for the function f
% input:
% f = function, a = x lower bound, b = x upper bound
% c = y lower bound, d = y upper bound
% output:
% re = relative error, risum = value of the definite integral
% Note:
% The 'maxit' input is just something I'm using so
% I don't get stuck in a loop.
if nargin<6|isempty(maxit),maxit=100;end
err=1;
s=0;
n=1;
its=0;
fprintf('\nn\t error\t dx\t dy\t dA\t sum\n\n');
while(1)
s0=s;
dx=(b-a)/n;
dy=(d-c)/n;
xi=a+dx:dx:b;
yi=c+dy:dy:d;
dA=dx*dy;
s=sum(f(xi,yi))*dA;
if s>realmax,error('This integral diverges');end
rerr = abs((s-s0)/s);
% Note:
% I'm just using this table so I can see what
% is going on with my code. It's not needed for the problem
z=[n;rerr;dx;dy;dA;s];
fprintf('%d\t %2.4f\t %2.4f\t %2.4f\t %2.4f\t %2.4f\n',z);
its=its+1;
n=n+1;
if rerr<.001|its>=maxit,break,end
end
risum=s;
re = rerr;
disp(['Number of iterations ',num2str(its)])
This is what it returns (without the table)
Code:
EDU>> f=@(x,y) x.*y;a=0;b=1;c=0;d=1;
EDU>> [relative_error,riemann_sum]=ftc3(f,a,b,c,d)
Number of iterations 100
relative_error =
0.0103
riemann_sum =
0.0034
Any kind of help would be awesome!