2019年1月28日 星期一

例題6-8 求矩陣的行列式值

例題6-8 求矩陣的行列式值

NUM=0       #    //A的階數
size=0          #   //最大反覆運算次數
t=0             #//標記最大的數所在的行
Max=0.0         # //比較每列時暫時存放最大的數
tmp=0.0          # //用於交換時存放中間變數的
tmp1=0.0        # //存儲中間變數以減少計算量
sign=0         # //標記行交換的次數
n=5
A= [ [0.0 for i in range(n+1)]  for j in range(n+1) ]   #a [n][n]//係數矩陣
A =       [[-6.00, 0.00 , 1.00 ,3.00 , 2.00],
               [-1.00 , 5.00 , 0.00 ,  1.00 , 7.00],
               [8.00 , 3.00 , 2.00 , 1.00 , 7.00],
               [0.00 , 1.00 , 5.00 ,  -3.00 , 2.00],
               [1.00 ,15.00 , -3.00,  9.00 , 4.00]]

print("您輸入行列式A的階數:",n)
print("您輸入的矩陣A[][]:\n")
for i in range(0 ,n):
    for j in range(0,n):
        print( "A[",i,"][",j,"]=",round(A[i][j],4),'\t',end='')
    print("")


for i in range(0 , n):
    t=i;
    Max=A[i][i];
    for j in range (i+1 , n ):   # //判斷每列的最大數,並將其放到主對角線上
        if(abs(Max)<abs(A[j][i])):
            #//當某一行大於k時將其賦值給k,並將其所在行標記下來
            Max=A[j][i]
            t=j

        if(abs(Max)<0.000001):   # //判斷矩陣是否為奇異陣
            print("行列式的值是: 0 ")
            break;

        if(t != i):    #    //當t不等於i時交換這兩行的所有元素
            sign+=1
            for j in range (i , n):
                tmp=A[i][j];
                A[i][j]=A[t][j];
                A[t][j]=tmp;

    for j in range (i+1 , n):   # //消去過程,化為上三角的形式
        tmp1=A[j][i]/A[i][i]    # //tmp1避免了p每次變化時都要計算這個
        for k in range (i , n ):  #   //p=i注意了啊!!
            A[j][k]=A[j][k]-A[i][k]*tmp1;
            #print(round(A[j][k],4),'\t',end='')


print("\n\nSign=",sign)
for i in range(0 ,n):
    for j in range(0,n):
        print( "A[",i,"][",j,"]=",round(A[i][j],4),'\t',end='')
    print("")


tmp1=1
for i in range (0, n):    #  //求化簡後行列式的值
    print(round(A[i][i],4),'*',end='')
    tmp1*=A[i][i];

if(sign%2==0):
    print("行列式的值是:", round(tmp1,4))
else:
   print("行列式的值是:", round(-tmp1,4))

 


==== RESTART: F:/2018-09勤益科大數值分析/數值分析/PYTHON/EX6-8-3.py ============
您輸入行列式A的階數: 5
您輸入的矩陣A[][]:

A[ 0 ][ 0 ]= -6.0  A[ 0 ][ 1 ]= 0.0  A[ 0 ][ 2 ]= 1.0  A[ 0 ][ 3 ]= 3.0  A[ 0 ][ 4 ]= 2.0
A[ 1 ][ 0 ]= -1.0  A[ 1 ][ 1 ]= 5.0  A[ 1 ][ 2 ]= 0.0  A[ 1 ][ 3 ]= 1.0  A[ 1 ][ 4 ]= 7.0
A[ 2 ][ 0 ]= 8.0   A[ 2 ][ 1 ]= 3.0   A[ 2 ][ 2 ]= 2.0  A[ 2 ][ 3 ]= 1.0  A[ 2 ][ 4 ]= 7.0
A[ 3 ][ 0 ]= 0.0   A[ 3 ][ 1 ]= 1.0   A[ 3 ][ 2 ]= 5.0   A[ 3 ][ 3 ]= -3.0  A[ 3 ][ 4 ]= 2.0
A[ 4 ][ 0 ]= 1.0   A[ 4 ][ 1 ]= 15.0 A[ 4 ][ 2 ]= -3.0  A[ 4 ][ 3 ]= 9.0  A[ 4 ][ 4 ]= 4.0


Sign= 6
A[ 0 ][ 0 ]= 8.0  A[ 0 ][ 1 ]= 3.0 A[ 0 ][ 2 ]= 2.0      A[ 0 ][ 3 ]= 1.0 A[ 0 ][ 4 ]= 7.0
A[ 1 ][ 0 ]= 0.0  A[ 1 ][ 1 ]= 14.625  A[ 1 ][ 2 ]= -3.25  A[ 1 ][ 3 ]= 8.875 A[ 1 ][ 4 ]= 3.125
A[ 2 ][ 0 ]= 0.0  A[ 2 ][ 1 ]= 0.0  A[ 2 ][ 2 ]= 3.0 A[ 2 ][ 3 ]= 2.3846 A[ 2 ][ 4 ]= 6.7692
A[ 3 ][ 0 ]= 0.0 A[ 3 ][ 1 ]= 0.0  A[ 3 ][ 2 ]= 0.0 A[ 3 ][ 3 ]= -7.7578 A[ 3 ][ 4 ]= -9.9972
A[ 4 ][ 0 ]= 0.0  A[ 4 ][ 1 ]= 0.0 A[ 4 ][ 2 ]= 0.0 A[ 4 ][ 3 ]= 0.0  A[ 4 ][ 4 ]= 7.7003
8.0 *14.625 *3.0 *-7.7578 *7.7003 *行列式的值是: -20968.0
>>> 

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...