翻譯|使用教程|編輯:況魚杰|2019-12-06 11:35:17.413|閱讀 791 次
概述:本文將會介紹如何使用LU分解,一旦從矩陣構造了LU分解,就可以將其重新用于求解不同的右側,計算逆,計算條件數,等等。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
NMath是一個適用于所有.NET語言,如C#、Visual Basic、F#和.NET的數學庫,它包含了.NET平臺上的面向對象數字計算的基礎類。我們將以連載的形式向大家介紹NMath的實用教程。
一旦從矩陣構造了LU分解>>,就可以將其重新用于求解不同的右側,計算逆,計算條件數,等等。
矩陣組成
只讀屬性提供對LU分解的組件矩陣的訪問:
P獲得置換矩陣。
L獲得下三角矩陣。
U獲取上三角矩陣。
Pivots獲取一系列樞紐索引,第i行與Pivots [i]互換。
解決右側
您可以使用Sol分解()方法使用LU分解來求解右側。例如,此代碼解決的一個右側問題:
代碼示例– C#LU分解
var A = new DoubleMatrix( "3x3 [2 1 1 4 1 0 -2 2 1]" ); var lu = new DoubleLUFact( A ); var v = new DoubleVector( "[8 11 3]" );DoubleVector x = lu.Solve( v );
代碼示例– VB LU分解
Dim A As New DoubleMatrix("3x3 [2 1 1 4 1 0 -2 2 1]") Dim LU As New DoubleLUFact(A) Dim V As New DoubleVector("[8 11 3]") Dim X As DoubleVector = LU.Solve(V)
返回的向量x是線性系統Ax = v的解。請注意,向量v的長度必須等于分解矩陣A中的行數,否則會引發MismatchedSizeException。
同樣,您可以使用Solve()方法來求解多個右側:
代碼示例– C#LU分解
var A = new FloatMatrix( "3x3 [2 1 1 4 1 0 -2 2 1]" ); var lu = new FloatLUFact( A ); var B = new FloatMatrix( "3x2[8 3 11 11 3 8]" );FloatMatrix X = fact.Solve( B );
代碼示例– VB LU分解
Dim A As New FloatMatrix("3x3 [2 1 1 4 1 0 -2 2 1]") Dim LU As New FloatLUFact(A) Dim B As New FloatMatrix("3x2[8 3 11 11 3 8]") Dim X As FloatMatrix = Fact.Solve(B)
返回的矩陣X是線性系統AX = B的解。也就是說,右側是B的列,解決方案是X的列。矩陣B的行數必須與因數相同。矩陣A還提供了SolveInPlace()方法,該方法將解決方案放置在給定的向量或矩陣中,而無需分配新的內存。給定的右側數據必須具有步幅。
計算逆數,行列式和條件數
您可以使用LU分解使用Inverse()方法來計算逆數,而行列式可以使用Determinant()方法來計算。例如:
代碼示例– C#LU分解
var A = new FloatMatrix( "3x3 [2 1 1 4 1 0 -2 2 1]" ); var lu = new FloatLUFact( A );FloatMatrix AInv = lu.Inverse(); float ADet = lu.Determinant();
代碼示例– VB LU分解
Dim A As New FloatMatrix("3x3 [2 1 1 4 1 0 -2 2 1]") Dim LU As New FloatLUFact(A) Dim AInv As FloatMatrix = LU.Inverse() Dim ADet As Single = LU.Determinant()
ConditionNumber()方法以指定的規范類型計算條件編號。 矩陣A的條件數為:
kappa = ||A|| ||AInv||
其中AInv是矩陣A的逆數。
注:ConditionNumber()方法返回條件數rho的倒數,其中rho = 1 / kappa。
提供的NormType枚舉包含用于指定矩陣范數的值。您您也可以選擇估計條件編號(更快但不準確),或直接計算它,對于小矩陣,結果通常是相同的。因此,此代碼估算無窮范數中的條件數:
代碼示例– C#LU分解
var A = new DoubleMatrix( "3x3 [2 1 1 4 3 3 8 7 9 ]" ); var lu = new DoubleLUFact( A ); double AEstimatedConditionNum = lu.ConditionNumber( NormType.InfinityNorm, true );
代碼示例– VB LU分解
Dim A As New DoubleMatrix("3x3 [2 1 1 4 3 3 8 7 9 ]") Dim LU As New DoubleLUFact(A) Dim AEstimatedConditionNum As Double = LU.ConditionNumber(NormType.InfinityNorm, True)
此代碼直接在1范數中計算條件編號:
代碼示例– C#LU分解
double AComputedConditonNum = lu.ConditionNumber( NormType.OneNorm, false );
代碼示例– VB LU分解
Dim AComputedConditonNum As Double = LU.ConditionNumber(NormType.OneNorm, False)
上一章:創建LU分解
下一章:靜態方法
==========================================
如果想要購買正版授權NMath的朋友,可以聯系
關注慧聚IT微信公眾號 ???,了解產品的最新動態及最新資訊。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: