RecurNonHomog
CAUTION
此組件已重構,此文檔將作廢或改寫。
WARNING
這個組件是 Recur.vue 拆分出的子組件,你不應該單獨使用它。
用於計算非齊次遞迴的特解,並且顯示計算過程。
描述
輸入遞迴的非齊次部分
輸出遞迴的特解
組件參數
props. | Type | Description |
---|---|---|
recurCoef | Array<Frac> | 齊次部分的係數 |
nonHomoFunc | { key: Frac } | 非齊次部分的常數 |
cubic | SolveCubic | 來自 Recur.vue 的特徵方程式的解 |
recurNonHomogLatex | string | link 待補 |
recurCoef
nonHomoFunc
cubic
link 待補。
recurNonHomogLatex
link 待補。
emit
emit | Type | Description |
---|---|---|
particular | { key: Array<Frac> } | 非齊次遞迴的特解 |
particular
非齊次遞迴的特解,由 SolveNonHomog.getParticular
生成。
當未知係數 全部計算完成時,上傳結果至 Recur.vue
。
Example
jsparticular = [ "1/1": [ new Frac(0), new Frac(-2), new Frac(6) ], "-2/3": [ new Frac(-2, 7) ], "-3/1": [ new Frac(0), new Frac(0), new Frac(1) ] ];
表示:
SolveNonHomog
的變數
建構子參數 recurCoef
、nonHomoFunc
、cubic
同 組件參數。
this. | Type | Description |
---|---|---|
recurLevel | number ( int ) | 遞迴階數 |
combinedExpFunc | { key: Array<Frac> } | 含有相同指數項 的多項式之中的係數 |
varPjIndex | { key: Array<number> } | 特解的未知係數 的編號 |
PjNum | number ( int ) | 特解的未知係數 的數量 |
homogRootConflictNum | { key: number } | 齊次解的某個特徵值 的重根數 且 在 內 |
recurLevel
遞迴階數,與 recurCoef.length
的值相同。
combinedExpFunc
非齊次部分 nonHomoFunc
的形式為 ,合併含有相同 的項,
轉為 combinedExpFunc
的 形式。
會在 SolveNonHomog._initCombineExp()
內計算。
Example
jsnonHomoFunc = { "0,-2/1": new Frac(3), "1,-2/1": new Frac(3, 2), "2,-2/5": new Frac(-6) };
表示
轉為
jscombinedExpFunc = { "-2/1": [ new Frac(3), new Frac(3, 2) ], "-2/5": [ new Frac(0), new Frac(0), new Frac(-6) ] };
varPjIndex
特解當中的未知係數 的編號 。
因為特解 之中假設的 的次數要跟非齊次部分 當中的 相同,
所以結構與 combinedExpFunc
相同。
會在 SolveNonHomog._initNumberTheUnknownPj()
內計算。
Example
jscombinedExpFunc = { "1/1": [ new Frac(0), new Frac(2) ], "-2/1": [ new Frac(3), new Frac(3, 2) ], "-2/5": [ new Frac(0), new Frac(0), new Frac(-6) ] };
若非齊次部分為:
猜測特解的形式為:
jsvarPjIndex = { "1/1": [ 1, 2 ], "-2/1": [ 3, 4 ], "-2/5": [ 5, 6, 7 ] };
PjNum
特解的未知係數 的數量。
參考上個範例的 varPjIndex
,可知 PjNum = 7
。
會在 SolveNonHomog._initNumberTheUnknownPj()
內計算。
homogRootConflictNum
當齊次與非齊次部分都存在相同的指數部分 時,需要額外乘上 保證線性獨立。
- 若 存在 項,需要額外乘上 ,變成 。
- 若 存在 、 項,需要額外乘上 ,變成 。
以此類推
會在 SolveNonHomog._initConflictRoot()
內計算。
Example
若齊次部分為 、
非齊次部分為
則
homogRootConflictNum = { "1/1": 1, "-2/1": 2 };
SolveNonHomogExp
的方法
ml
是 makeLatex
的縮寫。
Method | Return | Description |
---|---|---|
_initCombineExp | void | 計算 combinedExpFunc |
_initNumberTheUnknownPj | void | 計算 varPjIndex 和 PjNum |
_initConflictRoot | void | 計算 homogRootConflictNum |
_mlExpTerm | string | 生成 " " ( LaTeX ) |
mlCombinedExp | string | 合併後的齊次部分 ( LaTeX ) |
mlParticularForm | string | 假設的特解形式 ( LaTeX ) |
mlExistHomogExp | string | 齊次部分之中的相同指數項 ( LaTeX ) |
mlExistParticularExp | string | 特解形式之中的相同指數項 ( LaTeX ) |
mlChangeExpList | Array<[string, string]> | 特解乘上 的前後變化 ( LaTeX ) |
mlNewParticularForm | string | 新的特解形式 ( LaTeX ) |
mlParticularIntoRecur | string | 填入原遞迴關係 ( LaTeX ) |
mlParticularIntoRecurTrans | string | mlParticularIntoRecur 移項後的結果 ( LaTeX ) |
mlParticularIntoRecurWhere | string | 再顯示一次 mlNewParticularForm 與 mlCombinedExp ( LaTeX ) |
mlParticular | string | 計算完成的特解 ( LaTeX ) |
getParticular | { key: Array<Frac> } | 生成特解的資訊, 用於 emit 至 Recur.vue |
_mlExpTerm
_mlExpTerm(s_frac_b, isUnknownCoef, extraNPow = 0) -> string
生成 " " 形式的 latex 語法。
Param | Type | Description |
---|---|---|
s_frac_b | string | 的底數 ,會透過 Frac.fromStr 轉為 Frac |
isUnknownCoef | boolean | isUnknownCoef == true 生成 " " ( 特解 )其中 為未知係數 isUnknownCoef == false 生成 " " ( 非齊次 )其中 為已知係數 |
extraNPow | number | 將生成結果乘上 可以參考 homogRootConflictNum |
mlParticular
計算完成的特解的 latex。
getParticular
生成特解的資訊,用於 emit
至 Recur.vue
。
回傳值的範例請參考 particular
。
組件顯示的解題過程
遞迴的非齊次部分為
props.recurNonHomogLatex
合併相同的指數項:
猜測特解的形式為:
recur.mlParticularForm()
其中多項式 的次數應與 相同。
檢查齊次解 和特解 之中是否存在相同的指數部分 :
如果... | 顯示的 ui ( 解題過程 ) |
---|---|
存在 | 由於 recur.mlExistHomogExp() 已出現在 之中,若特解 也包含同樣項次 recur.mlExistParticularExp() 會導致與齊次解重疊,為了保證特解與齊次解的線性獨立性,需要將 - 以下遍歷 recur.mlChangeExpList() 產生的列表 -... 改為 ... ... 改為 ... |
不存在 | 不存在相同的指數部分。 |
因此特解的形式為:
recur.mlNewParticularForm()
將 代入原遞迴關係: ( 將 替換為 即可,不要將形式代入 )
recur.mlParticularIntoRecur()
移項後得到: ( 式 1 )
recur.mlParticularIntoRecurTrans()
其中
recur.mlParticularIntoRecurWhere()
接下來需要對每個指數項 對應的多項式,分別求未知係數 。
...
一些組件 RecurNonHomogExp.vue
...
將 代回 ,得到特解為
particularLatex
ref 變數
ref | Type | Description |
---|---|---|
recur | SolveNonHomog | 特解的未知係數 的計算過程 |
PjBuffer | { key: Array<Frac> } | 用於暫存多個 RecurNonHomogExp.vue 回傳的 |
particularLatex | string | 計算完成的特解 ( LaTeX ) |
recur
特解的未知係數 的計算過程,計算所需的變數和方法都封裝在內。
當組件參數 recurCoef
、nonHomoFunc
、cubic
改變時會更新此值。
PjBuffer
用於暫存多個 RecurNonHomogExp.vue
回傳的 。
particularLatex
計算完成的特解 ( LaTeX ),由 SolveNonHomogExp.mlParticular
生成。
解題過程
請自行至 app 內測試。