无法在MATLAB中求解不定积分

时间:2016-12-17 10:08:52

标签: matlab integral

为了解决不确定的积分问题,我提出了一个不符合本书解决方案的解决方案。为了检查我的解决方案,我尝试使用此代码解决问题:

syms x
question=int(1/(x*(1+x^5)^0.5))`   
mysolution=(1/5)*(log(((sqrt(1+x^5))-1)/(sqrt(1+x^5)+1)))
x=3  
eval(question)  
eval(mysolution)

导致:

ans =-0.0256 - 0.6283i
ans =-0.0256

我必须找到一个不定积分的解,但当我给MATLAB这个问题(解决不定积分)时,它给出了另一个解决方案。为了检查我的解决方案是否正确,我使用xsyms将值{3}赋予eval,因此MATLAB应该以{的假设显示我的答案和他自己的答案{1}}。

MATLAB答案的真实部分与我的答案相同,但它包含一个虚构的部分,这与我的解决方案不符。事实上,我对x=3的回答并不包含任何想象中的部分。有什么不对,为什么会这样?

1 个答案:

答案 0 :(得分:5)

这是一个数学问题而非编程问题。

您的无限积分可写为:

-2/5 * atanh(sqrt(1+x^5))

,等于你的解决方案,因为

atanh(z) = 1/2 ln( (1+z) / (1-z) ) 

现在,如果我们看一下Matlab正在计算的内容,它会说

(2*atan((x^5 + 1)^(1/2)*i)*i)/5

这是有道理的,因为

atan(x*i) = i*atanh(x)

现在让我们考虑一下matlab解决方案的虚构部分:让我们回想一下,ln并不是在复数上唯一定义的,而是具有不同的branches。这是因为复指数函数是2*pi*i周期性的:

exp(x) = exp(x + 2*pi*i)

这是复杂对数的“多值”表示的想象部分,可以说明这种情况,你可以说

" log(z) = log(z) + 2*pi*i "

所以,如果我们回到你的具体例子:假想的部分是- 0.6283,你有

-2/5 * atanh(sqrt(1+x^5))=-2/5 * 1/2 * ln((1+sqrt(1+x^5))/(1-sqrt(1+x^5)))
                            let z = sqrt(1+x^5)
                         = -2/5 * 1/2 * ln((1+z)/(1-z))
                            let w = (1+z)/(1-z)
                         = -1/5 * ln(w)
                         = -1/5 * [ ln(-w) + ln(-1) ]
                         = -1/5 * [ ln(-w) - pi*i]     since exp(-pi*i)=-1
                now apply the "equation" in quotation marks
                        "=" -1/5 * [ ln(-w) + 2*pi - pi*i]
                         = -1/5 * ln(-w) - 1/5*pi*i

猜猜:-1/5*pi*i = - 0.6283i

所以这是因为Matlab基本上试图找到值的对数,因此假想部分为-pi*i

所以这里的教训:小心复杂的数字:D(或者小心matlab的符号数学例程......)