RecurNonHomogExp
CAUTION
此組件已重構,此文檔將作廢或改寫。
WARNING
這個組件是 RecurNonHomog.vue 拆分出的子組件,你不應該單獨使用它。
用於計算非齊次遞迴的特解當中的未知係數 ,並且顯示計算過程。
描述
遞迴的非齊次部分:
以下是已經假設完成的特解形式:
其中
- 與 皆為多項式,且次數相同。
- ,非齊次部分的已知底數。
- ,為非齊次部分的已知係數。
- 當齊次與非齊次部分都存在相同的指數部分 時,需要額外乘上 保證線性獨立。
- 為要計算的未知係數。
根據係數比較法可知:
不同 對應的多項式 彼此獨立,因此可以分別計算未知係數 。( 分治法 )
因此本組件只計算某個 的部分,將 和 視為:
組件參數
props. | Type | Description |
---|---|---|
recurCoef | Array<Frac> | 齊次部分的係數,.length 代表遞迴階數 |
frac_b | Frac | 指數項 的 |
polyCoef | Array<Frac> | 多項式 的係數 |
extraNPow | number ( int ) | 為保持特解的線性獨立性,額外乘上去的 |
startPj | number ( int ) | 未知係數 的編號 |
_mlExpTerm | Function: (boolean, number) => string | 來自 RecurNonHomog.vue 的閉包注意: s_frac_b 已被傳入只需給予 isUnknownCoef 、extraNPow |
recurCoef
frac_b
指數項 的 ,範例請參照 polyCoef
。
polyCoef
多項式 的係數 。
Example
jsfrac_b = new Frac(-3); polyCoef = [ new Frac(4), new Frac(0), new Frac(-7, 2) ];
代表
extraNPow
當齊次與非齊次部分都存在相同的指數部分 時,需要額外乘上 保證線性獨立。
- 若 存在 項,需要額外乘上 ,變成 。
- 若 存在 、 項,需要額外乘上 ,變成 。
以此類推
範例請參照 startPj
。
startPj
因為每個 的部分是分開計算的,需要對未知係數 編號,方便後續解答的合併。
Example
jsfrac_b = new Frac(-3); polyCoef = [ new Frac(4), new Frac(0), new Frac(-7, 2) ]; extraNPow = 2; startPj = 3;
由於 與 的次數相同,因此
_mlExpTerm
來自 RecurNonHomog - _mlExpTerm 的閉包。
注意: s_frac_b
已在 RecurNonHomog.vue
內被傳入
只需給予 isUnknownCoef
、extraNPow
。
emit
emit | Type | Description |
---|---|---|
PjAnswer | Array<Frac> | 特解形式中的 對應的多個未知係數 的計算結果 |
PjAnswer
當未知係數 計算完成時,上傳結果至 RecurNonHomog.vue
。
Example
jsexpData.startPj = 3; PjAnswer = [ new Frac(-2, 7), new Frac(6), new Frac(3, 4) ];
表示:
SolveNonHomogExp
的變數
建構子參數 recurCoef
、frac_b
、polyCoef
、extraNPow
、startPj
同 組件參數。
this. | Type | Description |
---|---|---|
recurLevel | number ( int ) | 遞迴階數 |
PjNum | number ( int ) | 未知係數 的數量 |
PjLinearEquation | Array<Array<Frac>> | 以 表示的線性關係 |
nonHomogFn | Array<Frac> | 將常數代入非齊次部分 得到的值 |
matrix_solvePj | Matrix | 用於解 的聯立方程式方陣 |
PjAnswer | Array<Frac> | 算出的特解係數 |
recurLevel
遞迴階數,與 recurCoef.length
的值相同。
PjNum
未知係數 的數量。
等於多項式 的次數,
又因為 與 的次數相同,且 的次數與 polyCoef.length
相同,
因此 PjNum == polyCoef.length
。
PjLinearEquation
代入自然數 之後,以未知數 表示的線性關係。
會在 SolveNonHomogExp._initPjLinearEquation()
內計算。
展開特解的形式:( 為 extraNPow
)
coef
回傳 內未知數 的係數:
nonHomogFn
將常數代入非齊次部分 得到的值。
會在 SolveNonHomogExp._initNonHomogFn()
內計算。
matrix_solvePj
用於解 的聯立方程式方陣。
會在 SolveNonHomogExp._initPjEquationSystem()
內計算。
PjAnswer
算出的特解係數 。
會在 SolveNonHomogExp._initSolvePj()
內計算。
SolveNonHomogExp
的方法
ml
是 makeLatex
的縮寫。
Method | Return | Description |
---|---|---|
_initPjLinearEquation | void | 計算 PjLinearEquation |
_initNonHomogFn | void | 計算 nonHomogFn |
_initPjEquationSystem | void | 計算 matrix_solvePj |
_initSolvePj | void | 計算 PjAnswer |
mlExp | string | 回傳 " " ( LaTeX ) |
mlSomePj | string | 回傳未知係數 的範圍 ( LaTeX ) |
mlNRange | string | 回傳需要代入的 值範圍 ( LaTeX ) |
mlParticularLinearEquation | string | 回傳 以 表示的線性關係 ( LaTeX ) |
mlPjLinearEquation | string | 回傳 以 表示的線性關係 ( LaTeX ) |
mlSolvePjEquationSystem | string | 回傳 的聯立方程組 ( LaTeX ) |
mlPjAnswer | string | 回傳 的答案 ( LaTeX ) |
組件顯示的解題過程
計算 之中,指數項 expData.mlExp()
對應的 expData.PjNum
個未知係數 expData.mlSomePj()
, 需要將 expData.mlNRange()
代入式 ( 1 ),
產生 expData.PjNum
個式子的線性方程組,並解聯立:
expData.mlParticularLinearEquation()
其中 _mlExpTerm(false, 0)
,
_mlExpTerm(true, extraNPow)
,代入常數後得到:
expData.mlPjLinearEquation()
展開後得到:
expData.mlSolvePjEquationSystem()
使用高斯消去法解 的聯立方程式,得到:
expData.mlPjAnswer()
ref 變數
ref | Type | Description |
---|---|---|
expData | SolveNonHomogExp | 未知係數 的計算結果 |
expData
未知係數 的計算結果,計算所需的變數和方法都封裝在內。
當組件參數 recurCoef
、frac_b
、polyCoef
、extraNPow
、startPj
改變時會更新此值。
解題過程
以下示範如何解
的未知係數
Step1 生成線性關係
因為未知係數 有 3 個,需要生成 3 個式子才能解 的聯立,
因為 ,所以將 2 ~ 4 代入遞迴式產生 3 個式子的線性方程組,並解聯立:
其中
Step2 展開聯立方程式
而
因此 的聯立方程式為:
展開後得到:
- 矩陣 會被保存在
SolveNonHomogExp._initPjEquationSystem()
內的matrix_PLE
- 矩陣 會被保存在
this.PjLinearEquation
- 矩陣 會被保存在
this.matrix_solvePj
- 矩陣 會被保存在
this.nonHomogFn
Step3 解聯立方程式
由於 一定可逆,( 如果不可逆的話,比較係數法根本不成立 )
因此
這一步會在 SolveNonHomogExp._initSolvePj()
內運算:
- 套上一層
Array
變成[this.nonHomogFn]
,因為Matrix
建構子要求輸入一個二維陣列。 - 傳入
Matrix
,此時矩陣為 。 - 轉置後變為矩陣 。
- 求 。
- 因為要轉為
Array
,所以要將 轉置。 .A
回傳一個二維矩陣,但 是個向量,因此.A[0]
即可取出this.PjAnswer
。