Matlab: Numerical integration of a multivariable symbolic function

Click For Summary

Discussion Overview

The discussion revolves around the challenges of numerically integrating a multivariable symbolic function in Matlab, specifically focusing on integrating with respect to a single variable while keeping other variables symbolic. Participants share their experiences, solutions, and code snippets related to this problem.

Discussion Character

  • Technical explanation
  • Exploratory
  • Debate/contested

Main Points Raised

  • One participant describes attempts to use the Matlab 'int' function for symbolic integration, noting that it takes too long to compute an analytical solution.
  • Another participant shares a workaround involving nested for-loops to compute numerical integrals for specific values of the other variables, while keeping them symbolic.
  • A participant offers a code snippet for double integration using the trapezium rule, suggesting it could be useful for certain applications.
  • There is mention of a multivariable calculus toolbox available on Matlab Central that may assist with similar problems.
  • Some participants express interest in sharing and obtaining code related to numerical integration methods.

Areas of Agreement / Disagreement

Participants do not reach a consensus on the best method for numerical integration of multivariable functions, as various approaches are proposed and discussed without resolution.

Contextual Notes

Some limitations are noted, such as the requirement for Matlab to attempt analytical solutions before numerical ones, and the challenges of integrating over multiple variables while keeping others symbolic.

Who May Find This Useful

This discussion may be useful for Matlab users dealing with numerical integration of multivariable functions, particularly in the context of symbolic computation and those looking for alternative methods or code examples.

rsc42
Messages
6
Reaction score
0
I have a symbolic function of three variables which I'm trying to numerically integrate wrt a single variable. Consider (syms x y a) and the function f(x,y,z). Here are some things I've tried, without success:

1. >>int(f(x,y,z),x,a,b)
which analytically integrates f wrt x from a to b but, with 3+ hours runtime, Matlab hasn't been able to solve it.

2. >>double(int(f(x,y,z),x,a,b))
but this requires that Matlab first try to solve it analytically before solving it numerically. And Matlab thinks it can solve it analytically so it never gets around to a numerical solution.

3. Variations on >>quad(inline(f),a,b)
but quad only accepts single variable functions. quad2d, dblquad and higher order quads can handle multivariable functions but only if you're integrating over all variables.

4. I've also tried expanding individual within my integral so as to soften it up for int(f(x,y,z)...) but with no luck since this requires I limit the region within which the resulting expression is valid.

I'd appreciate any help you could give me. Thanks!

Rebekah
 
Physics news on Phys.org
FTR, I did figure out a very simple way to do it but at the cost of keeping y and z as symbolics. I created nested for-loops which let's me calculate the integral with quad for each pair of y and z values I'm interested in. This happens to work for me now but if anyone comes up with a better solution, I'd love to hear it.

A bare-bones example looks like:

for y = yi : increment : yf ;
for z = zi : increment : zf ;
I = quad( inline( f(x,y,z) ), a , b );
end
end
 
I have code that computes:
\int_{a}^{b}\int_{c}^{d}f(x,y)dxdy
if you're interested.
 
I'm interested! Do you have it on the file exchange?
 
I don't have it on this system but I will post the actual code here tomorrow (it's very simple, I just took the trapezium rule and applied it to each variable. The idea of the code is that you input a matrix of the function at equally spaced points and the increments of the function dx and dy and then you apply this function.
 
That sounds like it can be handy in particular situations in image processing?
 
It might be, I have never done any image processing. I checked the process with some simple integrands which I knew the answers and they seem to work quite well with small enough spacing.
 
This is the code I wrote for it:

function y=trap_2d(A,dx,dy)
N=length(A(:,1));
M=length(A(1,:));

a=A(1,1)+A(1,M)+A(N,1)+A(N,M);
b=sum(A(1,:))+sum(A(N,:));
c=sum(A(:,1))+sum(A(:,M));
u=zeros(1,N);
for i=1:N
u(i)=sum(A(i,:));
end

d=sum(u);

y=(d-0.5*c-0.5*b-0.25*a)*dx*dy;
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 7 ·
Replies
7
Views
2K
  • · Replies 13 ·
Replies
13
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 10 ·
Replies
10
Views
3K
Replies
3
Views
3K
  • · Replies 5 ·
Replies
5
Views
4K
Replies
27
Views
4K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K