
2004 年,我開始沉迷于計(jì)算積分,使用微積分學(xué)生已知的基本技術(shù)和 Davenport、Trager 和 Bronstein的Risch 算法及其擴(kuò)展 [1, 2, 3, 4, 5]。從George Beck的分步微分程序WalkD 中獲得靈感,我決定編寫一個(gè)計(jì)算不定積分的分步程序。
例如,很容易在Mathematica 中編寫一組簡單的替換規(guī)則來對(duì)(擴(kuò)展的)多項(xiàng)式進(jìn)行積分:
使用這些規(guī)則,我們現(xiàn)在可以對(duì)多項(xiàng)式進(jìn)行積分,例如
:
在花費(fèi)太多深夜將集成技術(shù)作為模式匹配規(guī)則輸入 Mathematica 之后,我使代碼處于合理狀態(tài),并將其發(fā)送給Wolfram Research,以便可能將其包含在 Mathematica 中。不久之后,我 在Wolfram得到了一份工作,在那工作了幾年,主要致力于Wolfram|Alpha。我的逐步積分器仍在計(jì)算許多積分,其中一些我自己很可能已經(jīng)忘記了如何做。
順便說一句,使用基于規(guī)則的編程來計(jì)算不定積分的想法可以追溯到 1961 年,當(dāng)時(shí)麻省理工學(xué)院的 James Slagle使用符號(hào)自動(dòng)積分器(SAINT)。SAINT 可以解決“大約相當(dāng)于優(yōu)秀大學(xué)新生水平的符號(hào)整合問題,事實(shí)上,它使用了許多與新生相同的方法(包括啟發(fā)式)”[6]。我編寫的逐步積分器使用了大約 350 條規(guī)則,可以對(duì)微積分教科書中 99% 以上的積分進(jìn)行積分。從那時(shí)起,Albert Rich 使用 Mathematica 創(chuàng)建了基于規(guī)則的積分器(Rubi),它使用了超過 6,700 條規(guī)則。
快進(jìn)到 2020 年,我已經(jīng)有十年沒有研究過積分了。我決定看看過去 10 年左右取得了哪些進(jìn)展。我對(duì)Manuel Kauers 開發(fā)的基于Gröbner 基的算法及由 Brian Miller 開發(fā)的擴(kuò)展特別感興趣,該算法在 AXIOM 計(jì)算機(jī)代數(shù)系統(tǒng)中的許多積分 [7, 8] 中似乎可以勝過 Risch 算法的代數(shù)情況。例如:
檢查結(jié)果很簡單:
再一次,我很快就迷上了積分,或者更具體地說,是不定積分的算法解決方案。
當(dāng)我最后一次查看符號(hào)積分時(shí),我對(duì) Risch 算法的先驗(yàn)情況感興趣,其中 Mathematica 有一個(gè)近乎完整的實(shí)現(xiàn)。例如,下面是 Risch 算法先驗(yàn)情況的簡單積分:
我對(duì)代數(shù)積分更感興趣,它不能與先驗(yàn) Risch 算法集成。Risch 算法的代數(shù)情況比先驗(yàn)情況復(fù)雜得多,并且尚未在任何計(jì)算機(jī)代數(shù)系統(tǒng)中完全實(shí)現(xiàn)。
我最初考慮了許多微積分教科書中出現(xiàn)的代數(shù)積分:
|
|
如果我們很樂意通過分支切割快速而寬松地完成,那么我們可以將這個(gè)積分寫為:
|
|
對(duì)于這個(gè)積分,我們可以替換
,我們得到:
|
|
代入,我們得到:
|
|
這個(gè)答案有分支問題;但是,我們可以通過將
寫為
來解決此問題。那么我們就有了正確的反導(dǎo)數(shù):
我想知道這種使用Laurent 多項(xiàng)式替換來簡化代數(shù)積分的方法是否只是適用于該積分的技巧,還是對(duì)更通用方法的提示。事實(shí)證明,這個(gè)技巧適用于許多積分;例如,我們之前在 Kauers 算法中嘗試的積分
可以減少到
替換為u = x 4 + x –4。一旦糾正了分支切割問題,解決方案如下:
一般方法會(huì)尋求形式u =
的替代, 例如
其中R1(u), R2(u)是u的有理函數(shù),
是待定系數(shù)。
我們首先使用SolveAlways來計(jì)算u替換中的待定系數(shù):
所以我們有一個(gè)適合被積函數(shù)的基數(shù)部分的候選替換。這個(gè)替換是否適合被積函數(shù)的其余部分?我們可以這樣計(jì)算:

我們對(duì)之前手動(dòng)做的積分做了同樣的簡化,即
其中 u =
.
這個(gè)方法是在Wolfram函數(shù)庫中用IntegrateAlgebraic實(shí)現(xiàn)的。 (在2020年,我進(jìn)一步研究了用初等函數(shù)[9]計(jì)算偽橢圓積分。) 由于這種方法簡單,它適用的積分范圍很廣。
下面是一些例子:
與 Risch 算法的代數(shù)情況不同,該技術(shù)可以快速求解許多涉及參數(shù)的積分:

下面的積分呢?
與前面的例子不同,這個(gè)積分不能用 Laurent 多項(xiàng)式替換來求解。
1882 年,Günther 開發(fā)了一種計(jì)算一些困難的代數(shù)積分的方法 [10]。比如積分
p(x)和q(x)是x的多項(xiàng)式,Günther做了替換
使得積分變?yōu)?/span>
其中 s(x) = vQ–P+R–1 xQ–P+R–1 + vQ–P+R–2 xQ–P+R–2 + … + v1 x + v0, 其中P = degx(p(x)), Q = degx(q(x)), R = degx(r(x)) and v0, v1, …, vQ–P+R–1, c0, c1,c2, c3 是待定系數(shù), R(un是系數(shù)未定u n 中的有理函數(shù)。
我們可以使用 Günther 的方法來解決 Mathematica 中的這個(gè)積分,如下所示。替換的形式為:
我們假設(shè)u 中的被積函數(shù)具有以下形式:
那么x 中的被積函數(shù)由下式給出:
現(xiàn)在我們需要求解代入 ( v 0 , v 1 , v 2 ) 和有理被積函數(shù) ( w 0 , w 1 ) 中的未定系數(shù):
我們可以把這個(gè)解代入u中的被積函數(shù),然后替換
現(xiàn)在我們可以使用integral來計(jì)算得到的積分:
然后代回求解我們?cè)瓉淼姆e分:
快速檢查我們的解答是正確的:
Günther方法的一個(gè)推廣版本在IntegrateAlgebraic中實(shí)現(xiàn)。 這種方法可以解決許多比較困難的積分。 下面是一些例子:
此方法還處理包含參數(shù)的積分:
如果我們?cè)趯⒈环e函數(shù)擴(kuò)展為項(xiàng)的總和后將這種方法與逐項(xiàng)積分相結(jié)合,我們可以處理更多奇特的代數(shù)積分:

將 Laurent 多項(xiàng)式替換方法與廣義 Günther 方法相結(jié)合并逐項(xiàng)積分,我們可以計(jì)算更復(fù)雜的積分:
在這種情況下,我們將積分寫為:
然后積分
減少到
代入u = 1 – x 3,而積分
減少到
代入s =
。
積分包含嵌套基元的表達(dá)式一直是一件棘手的事情。 一個(gè)眾所周知的例子是
可以使用替換
來計(jì)算。我們可以用GroebnerBasis進(jìn)行這種替換,如下所示:
我們需要用Dt [y]來表達(dá)這種關(guān)系:
我們現(xiàn)在可以整合u的有理函數(shù)并代回x:
這種方法可以解決更困難的涉及嵌套根的積分。例如:
在IntegrateAlgebraic 中使用了這種方法的概括。以下是一些具有挑戰(zhàn)性的示例:
與IntegrateAlgebraic 中的其他方法一樣,我們準(zhǔn)備好處理涉及參數(shù)的積分:
本帖中所有的積分都包含多項(xiàng)式根; 然而,這些方法推廣到有理根。 例如:
仍然有許多代數(shù)積分是這些方法不能計(jì)算的。 例如,下面的積分有一個(gè)初等解(盡管解很大):
然而,與在任何計(jì)算機(jī)代數(shù)系統(tǒng)中都沒有完全實(shí)現(xiàn)的 Risch-Trager-Bronstein 算法的代數(shù)情況相比,這些方法快速、簡單并且補(bǔ)充了 Mathematica 的Integrate函數(shù)的現(xiàn)有積分功能。我們目前正在考慮在即將發(fā)布的版本Integrate中包含IntegrateAlgebraic。
京ICP備09015132號(hào)-996 | 違法和不良信息舉報(bào)電話:4006561155
© Copyright 2000-2026 北京哲想軟件有限公司版權(quán)所有 | 地址:北京市海淀區(qū)西三環(huán)北路50號(hào)豪柏大廈C2座11層1105室
北京哲想軟件集團(tuán)旗下網(wǎng)站:哲想軟件 | 哲想動(dòng)畫