Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab ';找不到显式积分';,包含伽马函数的积分_Matlab - Fatal编程技术网

Matlab ';找不到显式积分';,包含伽马函数的积分

Matlab ';找不到显式积分';,包含伽马函数的积分,matlab,Matlab,如果我尝试计算下面的积分,我会得到一个众所周知的错误“显式积分找不到” syms x funx = (cos(x)^(1/3))*cos(x); I=int(funx,x,0,pi/2); 我得到警告: Warning: Explicit integral could not be found. Mathematica将该积分计算为0.910744 我尝试过使用正交的quadgk,quadl,但没有任何效果。请帮助确定此问题的解决方案。感谢您的帮助。多谢各位 在octave中使用q

如果我尝试计算下面的积分,我会得到一个众所周知的错误“显式积分找不到”

 syms x

 funx = (cos(x)^(1/3))*cos(x);

 I=int(funx,x,0,pi/2);
我得到警告:

Warning: Explicit integral could not be found.
Mathematica将该积分计算为0.910744


我尝试过使用正交的
quadgk
quadl
,但没有任何效果。请帮助确定此问题的解决方案。感谢您的帮助。多谢各位

octave
中使用
quad
可以在没有警告的情况下给出正确的结果:

octave:1> f = inline ("(cos(x)^(1/3))*cos(x)");
octave:2> quad(f,0,pi/2)
ans =  0.91074
但是
octave
中的
quad
函数据说比
matlab
中的对应函数更稳定


octave
matlab
的免费开源变体。它有一个等价的外壳以及大多数内置命令,但根据我的数值积分教授的说法,执行积分的算法更好。

使用更新版本的Matlab(2012b),您的代码给出了
I=pi^(3/2)/(4*gamma(2/3)*gamma(5/6))
double(I)=0.910743992957843

要在数字上实现这一点,必须使
funx
成为匿名函数,而不是符号表达式。有两种方法可以做到这一点

只需将
funx
定义为(不执行
syms x

或者使用
matlabFunction

syms x
funx = (cos(x)^(1/3))*cos(x);
funx = matlabFunction(funx);

现在您可以使用
integral
quad
quadgk
等进行数值积分。

使用integral()进行数值积分,而不是int()。使用Matlab2012b,您的代码给出了
I=pi^(3/2)/(4*伽马(2/3)*伽马(5/6))
double(I)
表明这确实与Mathematica给出的相同。你用的是什么版本的Matlab?我用的是R2007b版本的Matlab@DavidI,我从没听说过这个软件。谢谢,我遇到的真正问题是当我使用syms t X Y u=Xcos(t)+Ycos(3*t);f=u^(1/3);X=A+x1;Y=-x1;I=int(f*cos(t),t,0,pi/2)*4/pi;变量X和Y是已知的,我不知道,那么
A
x1
y1
也是已知的吗?是否每次调用设置了这些值的函数。请编辑您的答案,并更具体地说明您希望实现的目标。。。
syms x
funx = (cos(x)^(1/3))*cos(x);
funx = matlabFunction(funx);