为了解决不确定的积分问题,我提出了一个不符合本书解决方案的解决方案。为了检查我的解决方案,我尝试使用此代码解决问题:
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这个问题(解决不定积分)时,它给出了另一个解决方案。为了检查我的解决方案是否正确,我使用x
和syms
将值{3}赋予eval
,因此MATLAB应该以{的假设显示我的答案和他自己的答案{1}}。
MATLAB答案的真实部分与我的答案相同,但它包含一个虚构的部分,这与我的解决方案不符。事实上,我对x=3
的回答并不包含任何想象中的部分。有什么不对,为什么会这样?
答案 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的符号数学例程......)