Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Matlab: Numerical integration of a multivariable symbolic function

  1. Jun 4, 2012 #1
    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
     
  2. jcsd
  3. Jun 6, 2012 #2
    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 lets 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
     
  4. Jun 8, 2012 #3

    hunt_mat

    User Avatar
    Homework Helper

    I have code that computes:
    [tex]\int_{a}^{b}\int_{c}^{d}f(x,y)dxdy[/tex]
    if you're interested.
     
  5. Jun 8, 2012 #4

    Pythagorean

    User Avatar
    Gold Member

    I'm interested! Do you have it on the file exchange?
     
  6. Jun 8, 2012 #5

    Pythagorean

    User Avatar
    Gold Member

  7. Jun 8, 2012 #6

    hunt_mat

    User Avatar
    Homework Helper

    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.
     
  8. Jun 8, 2012 #7

    Pythagorean

    User Avatar
    Gold Member

    That sounds like it can be handy in particular situations in image processing?
     
  9. Jun 8, 2012 #8

    hunt_mat

    User Avatar
    Homework Helper

    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.
     
  10. Jun 9, 2012 #9

    hunt_mat

    User Avatar
    Homework Helper

    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;
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Matlab: Numerical integration of a multivariable symbolic function
Loading...