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。