无法在MATLAB中求解不定积分

0 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)
Run Code Online (Sandbox Code Playgroud)

结果导致:

ans =-0.0256 - 0.6283i
ans =-0.0256
Run Code Online (Sandbox Code Playgroud)

我必须找到一个不定积分的解决方案但是当我给MATLAB这个问题(解决不定积分)时,它给了另一个解决方案.为了检查我的解决方案是否是正确的,我给x使用值3 symseval,所以MATLAB应该显示我的回答和他自己的答案与假设x=3.

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

fla*_*awr 5

这是一个数学问题,而不是一个编程问题.

您的无限积分可写为:

-2/5 * atanh(sqrt(1+x^5))
Run Code Online (Sandbox Code Playgroud)

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

atanh(z) = 1/2 ln( (1+z) / (1-z) ) 
Run Code Online (Sandbox Code Playgroud)

现在,如果我们看看Matlab正在计算什么,它说

(2*atan((x^5 + 1)^(1/2)*i)*i)/5
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为

atan(x*i) = i*atanh(x)
Run Code Online (Sandbox Code Playgroud)

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

exp(x) = exp(x + 2*pi*i)
Run Code Online (Sandbox Code Playgroud)

这是复杂对数的"多值"表示的虚构部分,可以看出这种情况,你可以说

" log(z) = log(z) + 2*pi*i "
Run Code Online (Sandbox Code Playgroud)

所以,如果我们回到你的具体例子:想象中的部分是- 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
Run Code Online (Sandbox Code Playgroud)

你猜怎么着: -1/5*pi*i = - 0.6283i

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

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