2019年1月19日 星期六

例題6-1 利用高斯消去法計算下面聯立方程式

例題6-1
利用高斯消去法計算下面聯立方程式


-1.0 x1 + 1.0  x2  + 2.0  x3 = 2.0
 3.0 x1  - 1.0  x2  + 1.0  x3 = 6.0
-1.0 x1 +  3.0 x2  + 4.0  x3 = 4.0


==============程式====================
'''
/* Based on Gaussian Elimination method
 * for solving the n x n linear algebra system
 * a11 x1+a12 x2+...+a1n xn=b1
 * a21 x1+a22 x2+...+a2n xn=b2
 * .       .         .       .
 * .       .         .       .
 * an1 x1+an2 x2+...+ann xn=bn
 * Input number of unknowns and equations n
 * with coefficent a11,a12,...,ann and b1,b2,
 * ...bn. Output solution x1,x2,x3,...,xn.
 */
 '''
#Gauss Elimination
print("\nEnter the no. of equations\n")
n=3
print(n)
#input the no. of equations

a=  [ [0.0 for i in range(n+1)]  for j in range(n+1) ]       #[n][n+1],
x= [0.0 for i in range(n+1)];                                             # //declare an array to store the elements of augmented-matrix
print("\nEnter the elements of the augmented-matrix row-wise:\n")
a=[[-1.0 ,  1.0 , 2.0 , 2.0],
      [3.0 , -1.0 , 1.0,  6.0],
      [-1.0 ,  3.0 , 4.0 , 4.0]]

for i in range(0 ,n):
    for j in range(0,n+1):
        print( "a[",i,"][",j,"]=",round(a[i][j],4),'\t',end='')
    print("")
   
# print(a)  #debug
for i in range (0 , n):                   # //Pivotisation
    for k in range (i+1 , n):
         if (abs(a[i][i])<abs(a[k][i])):
             for j in range (0, n+1 ) :
                 temp=a[i][j]
                 a[i][j]=a[k][j]
                 a[k][j]=temp
             
print("\nThe matrix after Pivotisation is:\n")

for i  in range (0,n) :     # //print the new matrix
    for j in range (0, n+1) :
         print( round(a[i][j],4),"\t",end='')
    print("\n")

for i in range (0,n-1) :    # //loop to perform the gauss elimination
    for k in range (i+1,n):
        t=a[k][i]/a[i][i];
        for j in range (0, n +1):
            a[k][j]=a[k][j]-t*a[i][j]    #   //make the elements below the pivot elements equal to zero or elimnate the variables

print("\n\nThe matrix after gauss-elimination is as follows:\n")
for i in range (0,n) :      # //print the new matrix
        for j in range(0,n+1):
                print( round(a[i][j],4),"\t",end='')
        print("\n")

for i in range(n-1,0 ,-1):   # //back-substitution
     # //x is an array whose values correspond to the values of x,y,z..
    x[i]=a[i][n];                #//make the variable to be calculated equal to the rhs of the last equation
    for j in range (i+1, n ) :
        if (j!=i):             #//then subtract all the lhs values except the coefficient of the variable whose value    is being calculated
            x[i]=x[i]-a[i][j]*x[j];
    x[i]=x[i]/a[i][i];         #   //now finally divide the rhs by the coefficient of the variable to be calculated

print ("\nThe values of the variables are as follows:\n")
for i in range(0 ,n):
        print( "x",i,"=",round(x[i],4))         #// Print the values of x, y,z,....   



輸出結果 :

========= RESTART: F:/2018-09勤益科大數值分析/數值分析/PYTHON/EX6-1.py ==============

Enter the no. of equations

3

Enter the elements of the augmented-matrix row-wise:

a[ 0 ][ 0 ]= -1.0 a[ 0 ][ 1 ]= 1.0 a[ 0 ][ 2 ]= 2.0 a[ 0 ][ 3 ]= 2.0
a[ 1 ][ 0 ]= 3.0 a[ 1 ][ 1 ]= -1.0 a[ 1 ][ 2 ]= 1.0 a[ 1 ][ 3 ]= 6.0
a[ 2 ][ 0 ]= -1.0 a[ 2 ][ 1 ]= 3.0 a[ 2 ][ 2 ]= 4.0 a[ 2 ][ 3 ]= 4.0

The matrix after Pivotisation is:

3.0 -1.0 1.0 6.0

-1.0 3.0 4.0 4.0

-1.0 1.0 2.0 2.0



The matrix after gauss-elimination is as follows:

3.0 -1.0 1.0 6.0

0.0 2.6667 4.3333 6.0

0.0 0.0 1.25 2.5


The values of the variables are as follows:

x 0 = 0.0
x 1 = -1.0
x 2 = 2.0
>>> 

沒有留言:

張貼留言

113 學年度第 1 學期 RFID應用課程 Arduino程式

113 學年度第 1 學期 RFID應用課程 Arduino程式 https://www.mediafire.com/file/zr0h0p3iosq12jw/MFRC522+(2).7z/file 內含修改過後的 MFRC522 程式庫 (原程式有錯誤) //定義MFRC522...