(adsbygoogle = window.adsbygoogle || []).push({}); 1. The problem statement, all variables and given/known data

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.

2. Relevant equations

3. The attempt at a solution

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]Code (Text):

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 (Text):

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!

**Physics Forums - The Fusion of Science and Community**

# Matlab - multiple integral Riemann sums

Have something to add?

- Similar discussions for: Matlab - multiple integral Riemann sums

Loading...

**Physics Forums - The Fusion of Science and Community**