MATLAB Problem in triplequad in matlab

  • Thread starter Thread starter quin
  • Start date Start date
  • Tags Tags
    Matlab
AI Thread Summary
The discussion revolves around issues encountered while attempting to perform a triple integral in MATLAB using the `triplequad` function. The user is facing an error related to the function input format, suggesting that the function should be defined as an anonymous function rather than a long expression. Recommendations include using an "m" file for clarity and ensuring the function only takes x, y, and z as inputs. Additionally, there are inquiries about conducting symbolic integration with variables treated as symbols while integrating numerically over others. The conversation highlights the complexities of integrating functions with multiple variables in MATLAB.
quin
Messages
50
Reaction score
0
Hi friends

I want to get 3variable integral from a function which is in terms of x,y,z,m,a
but I know that a=0.01 and m=3
and want to integrate over x ,y,z
Code:
>> triplequad((4 .*((-2.* a + m).^2 .*(4 .*a + m) +4 .*a.^2 .*(2.*(2.*a - m).* cos(z) + cos(y) .*(4.* a - 2.* m + 4 .*a.* cos(z) - m .*cos(z)) + cos(x) .*(4.* a - 2.* m + 4 .*a.* cos(z) - m .*cos(z) +  cos(y) .*(4 .*a - m + 4 .*a.* cos(z))))))./(m.^4 + 64 .*a.^3 .*m .*(1 + cos(x)) .*(1 + cos(y)) .*(1 + cos(z)) - 8 .*a.^2 .*m.^2 .*(3 + 2 .*cos(z) + cos(y) .*(2 + cos(z)) + cos(x) .*(2 + cos(y) + cos(z))) + 16 .*a.^4 .*(-3 + cos(x).^2 .*(cos(y) - cos(z)).^2 - 4 .*cos(z) + cos(y) .*(-4 + cos(z) .*(-6 + cos(y) .*cos(z))) - 2 .*cos(x) .*(2 + 3 .*cos(z) +  cos(y) .*(3 + cos(z).* (6 + cos(y) + cos(z)))))),-pi,pi,-pi,pi,-pi,pi)

but when I run it MATLAB tells:
? Error using ==> fcnchk at 103
If FUN is a MATLAB object, it must have an feval method.

Error in ==> triplequad at 45
intfcn = fcnchk(intfcn);


So what should I do?

and also I used .* and ./ and .^ because I think x, y, z are matrix

however if I used * and / and ^ ,still Matlab give the same errors


thanks for your help
 
Physics news on Phys.org
quin said:
Hi friends

I want to get 3variable integral from a function which is in terms of x,y,z,m,a
but I know that a=0.01 and m=3
and want to integrate over x ,y,z
Code:
>> triplequad((4 .*((-2.* a + m).^2 .*(4 .*a + m) +4 .*a.^2 .*(2.*(2.*a - m).* cos(z) + cos(y) .*(4.* a - 2.* m + 4 .*a.* cos(z) - m .*cos(z)) + cos(x) .*(4.* a - 2.* m + 4 .*a.* cos(z) - m .*cos(z) +  cos(y) .*(4 .*a - m + 4 .*a.* cos(z))))))./(m.^4 + 64 .*a.^3 .*m .*(1 + cos(x)) .*(1 + cos(y)) .*(1 + cos(z)) - 8 .*a.^2 .*m.^2 .*(3 + 2 .*cos(z) + cos(y) .*(2 + cos(z)) + cos(x) .*(2 + cos(y) + cos(z))) + 16 .*a.^4 .*(-3 + cos(x).^2 .*(cos(y) - cos(z)).^2 - 4 .*cos(z) + cos(y) .*(-4 + cos(z) .*(-6 + cos(y) .*cos(z))) - 2 .*cos(x) .*(2 + 3 .*cos(z) +  cos(y) .*(3 + cos(z).* (6 + cos(y) + cos(z)))))),-pi,pi,-pi,pi,-pi,pi)

You really should consider using an "m" file instead of trying to type a function that long in one line. Anyway, it should work if you make it a function of just x,y,z (that's all triplequad expects).
For example:
Code:
a=0.01
m=3
myfun = @(x,y,z) (4 .*((-2.* a + m).^2 .*(4 .*a + m) +4 .*a.^2 .*(2.*(2.*a - m).* cos(z) + cos(y) .*(4.* a - 2.* m + 4 .*a.* cos(z) - m .*cos(z)) + cos(x) .*(4.* a - 2.* m + 4 .*a.* cos(z) - m .*cos(z) +  cos(y) .*(4 .*a - m + 4 .*a.* cos(z))))))./(m.^4 + 64 .*a.^3 .*m .*(1 + cos(x)) .*(1 + cos(y)) .*(1 + cos(z)) - 8 .*a.^2 .*m.^2 .*(3 + 2 .*cos(z) + cos(y) .*(2 + cos(z)) + cos(x) .*(2 + cos(y) + cos(z))) + 16 .*a.^4 .*(-3 + cos(x).^2 .*(cos(y) - cos(z)).^2 - 4 .*cos(z) + cos(y) .*(-4 + cos(z) .*(-6 + cos(y) .*cos(z))) - 2 .*cos(x) .*(2 + 3 .*cos(z) +  cos(y) .*(3 + cos(z).* (6 + cos(y) + cos(z))))))
triplequad("myfun",-pi,pi,-pi,pi,-pi,pi)
 
symbolic triple quad

I want to get 3variable integral from a function which is in terms of x,y,z,L,T
but I"T" and "L" are just symbols
and want to integrate over x ,y,z
How can I take triple integration from a symbolic function??
thanks alot
 
What version of MATLAB are you using? Do you have access to Symbolic Math Toolbox?

You can solve this numerically using INTEGRAL3 and either loops or sub-functions in the m-file.

Symbolically, the integration function is int(). This attempts to find the antiderivative so that diff(F) = f, int(f) = F.

For ex,

Code:
syms x y n
f = x^n + y^n;
int(f, y)
ans =
x^n*y + (y*y^n)/(n + 1)
 
Last edited:
thanks but my function is very complex and in this way MATLAB cannot do anything.In fact it said that the integral cannot be calculated
How can I do the integral numerically but with 2 symbols?
I mean that integrate over x ,y,z with a numerical method but with 2 symbols of t and m .
thanks for your kind attention
 
That cannot be done as far as I know. You could probably do a totally symbolic integration and
then evaluate x,y,z leaving the expression in terms of t and m.
 

Similar threads

Replies
1
Views
2K
Replies
1
Views
2K
Replies
10
Views
4K
Replies
2
Views
1K
Replies
1
Views
4K
Replies
13
Views
2K
Replies
4
Views
1K
Replies
7
Views
2K
Back
Top