Can I get the integral formula using Matlab?

4 次查看(过去 30 天)
I have the following integration:
and m and n are integers.
Can I get the formula for this integration using Matlab?
Here is my attempt:
clear all
syms x m n
f = (1/pi)*sin(n*x/2)*(pi-x)^2*sin(m*x/2);
Fint = int(f,x,[0 2*pi]);
I got this long result which is ok for me in case it is correct:
(5734161139222659*(8*m^3*cos(pi*m)*sin(pi*n) - 8*n^3*cos(pi*n)*sin(pi*m) - 8*pi*m*n^3 + 8*pi*m^3*n + 4*m^4*pi*sin(pi*m)*sin(pi*n) - 4*n^4*pi*sin(pi*m)*sin(pi*n) + 24*m*n^2*cos(pi*m)*sin(pi*n) - 24*m^2*n*cos(pi*n)*sin(pi*m) - m^5*pi^2*cos(pi*m)*sin(pi*n) + n^5*pi^2*cos(pi*n)*sin(pi*m) - m*n^4*pi^2*cos(pi*m)*sin(pi*n) + m^4*n*pi^2*cos(pi*n)*sin(pi*m) - 2*m^2*n^3*pi^2*cos(pi*n)*sin(pi*m) + 2*m^3*n^2*pi^2*cos(pi*m)*sin(pi*n) - 8*m*n^3*pi*cos(pi*m)*cos(pi*n) + 8*m^3*n*pi*cos(pi*m)*cos(pi*n)))/(9007199254740992*(m^2 - n^2)^3)
when I assume then the result is undefied..
I appreciate any help..
  2 个评论
Stephen23
Stephen23 2025-4-22
A much more accurate approach is to use SYM(PI):
syms x m n
f = (1/sym(pi))*sin(n*x/2)*(sym(pi)-x)^2*sin(m*x/2);
Fint = int(f,x,[0,2*pi])
Fint = 
"when I assume then the result is undefied.."
Because the integral is undefined for those values:
fsurf(Fint)
fsurf(Fint,[0.5,1.5])
subs(Fint,{m,n},{1,1})
Error using sym/subs (line 156)
Division by zero.
Paul
Paul 2025-4-23
Hi Stephen,
In addition to using sym(pi),
syms x m n
f = (1/sym(pi))*sin(n*x/2)*(sym(pi)-x)^2*sin(m*x/2);
Fint = int(f,x,[0,2*sym(pi)])
Fint = 
One "feature" of int is that it (almost) never recognizes special cases of the parameters of the integrand. For the particular case at hand, if we set m = n = 1 first, then the integral follows
int(subs(f,[m,n],[1,1]),x,[0,2*sym(pi)])
ans = 
This result can also be obtained by taking the limit of Fint (though, TBH I'm not sure if this sequential limit approach is strictly correct)
simplify(limit(limit(Fint,n,1),m,1))
ans = 
If m and n are both integers (not stated by the OP, but might be the case based on the notation), then Fint simplifies further
assumeAlso([m,n],'integer');
simplify(Fint,100)
ans = 

请先登录,再进行评论。

回答(2 个)

David Goodmanson
David Goodmanson 2025-4-22
编辑:David Goodmanson 2025-6-17
Hello Haya,
The integral is very much defined for m=n. In that case you are integrating the function
(1/pi)*sin(n*x/2)^2*(x-pi)^2
which is well behaved and has a calculable integral. The syms expression contains a denominator
1/(m^2-n^2)^3
which has a factor of
1/(n-m)^3
and is a cubic zero when m-->n. When m--> n the numerator also must contain a factor of (n-m)^3 so that the entire expression will be a (yet to be determined) 0/0 form. To get the result you don't have to actually suss out the (n-m)^3 factor in the numerator. It's enough to know that it exists. Taking the m=n expression at the top above,
clear all
syms n x
assume(n,{'positive','integer'})
pi = sym('pi')
f = (1/pi)*sin(n*x/2)^2*(pi-x)^2;
Fint = int(f,x,[0 2*pi])
you obtain
Fint =
pi^2/3 - (n*(pi + pi*cos(2*n*pi)) - sin(2*n*pi) + (n^2*pi^2*sin(2*n*pi))/2)/(n^3*pi)
and after setting
sin(2*n*pi) = 0 cos(2*n*pi) = 1
(there must be a way to get syms to do this but I don't know what it is) this reduces to
Fint = pi^2/3 - 2/n^2
which doesn't work for n = 0, but that case can be ignored since the integrand is 0.
  2 个评论
Paul
Paul 2025-6-17
Hi David,
clear all
syms n x
assume(n,{'positive','integer'})
Here, Pi1 is not the sympolic constant pi. Its just a symbolic variable that renders with the pi symbol.
Pi1 = sym('pi')
Pi1 = 
π
which is why, e.g., sin(Pi1) is not known.
sin(Pi1)
ans = 
f = (1/Pi1)*sin(n*x/2)^2*(Pi1-x)^2;
Fint = int(f,x,[0 2*Pi1])
Fint = 
Consequently, Fint doesn't simplify
simplify(Fint)
ans = 
Instead, define the symbolic constant this way
Pi2 = sym(pi)
Pi2 = 
π
Which is not the same as Pi1
Pi2 - Pi1
ans = 
sin(Pi2)
ans = 
0
Now we get the same-looking integral
f = (1/Pi2)*sin(n*x/2)^2*(Pi2-x)^2;
Fint = int(f,x,[0 2*Pi2])
Fint = 
but it simplifies as expected.
simplify(Fint)
ans = 
IIRC, sym('pi') used to return the symbolic constant pi, but that behavior changed a few releases ago.

请先登录,再进行评论。


Walter Roberson
Walter Roberson 2025-4-23
syms x m n
f = (1/sym(pi))*sin(n*x/2)*(pi-x)^2*sin(m*x/2);
Fint = int(f,x,[0 2*pi]);
limit(Fint, m, n)
ans = 
subs(ans, n, 1)
ans = 
simplify(ans)
ans = 

类别

Help CenterFile Exchange 中查找有关 MATLAB 的更多信息

标签

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by