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