Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.37 KB | None | 0 0
  1. '''
  2.  
  3.                            Online Python Compiler.
  4.                Code, Compile, Run and Debug python program online.
  5. Write your code in this editor and press "Run" button to execute it.
  6.  
  7. '''
  8.  
  9. x = [-1,-0.6,-0.2, 0.2, 0.6, 1]
  10. y = [20.085, 10.59095, 7.691, 7.0993, 5.1551, 2.7183]
  11.  
  12. for i in range(1,6):
  13.     print(y[i]," + b",i,"(",x[i-1]," - " , x[i] , ") - c" , i, "/2 * (", x[i-1], "-", x[i], ")**2 - ", "d", i, "/6 * (", x[i-1], "-", x[i], ")**3 === ", y[i-1])
  14.  
  15. for i in range(2,6):
  16.     print("c", i, "* 0.4 - d", i, "/2 * 0.16", " === b", i, " - b", i-1)
  17.  
  18. for i in range(2,6):
  19.     print("d", i, "* 0.4 === c", i, " - c", i-1)
  20.    
  21. print("c1 - d1 * 0.4 === 0")
  22. print("c5 === 0")
  23.  
  24. print("\nHello World \n")
  25.  
  26. # --- исходные данные
  27. myA = [
  28.        [ 0.4, -0.4**2/2, -0.4**3/6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  29.        [ 0, 0, 0, 0.4, -0.4**2/2, -0.4**3/6, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  30.        [ 0, 0, 0, 0, 0, 0, 0.4, -0.4**2/2, -0.4**3/6, 0, 0, 0, 0, 0, 0],
  31.        [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.4, -0.4**2/2, -0.4**3/6, 0, 0, 0],
  32.        [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.4, -0.4**2/2, -0.4**3/6],
  33.        
  34.        [ 1, 0, 0, -1, 0.4, -0.8, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  35.        [ 0, 0, 0, 1, 0, 0, -1, 0.4, -0.8, 0, 0, 0, 0, 0, 0],
  36.        [ 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0.4, -0.8, 0, 0, 0],
  37.        [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0.4, -0.8],
  38.        
  39.        [ 0, 1, 0, 0, -1, 0.4, -0.8, 0, 0, 0, 0, 0, 0, 0, 0],
  40.        [ 0, 0, 0, 0, 1, 0, -1, 0.4, -0.8, 0, 0, 0, 0, 0, 0],
  41.        [ 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0.4, -0.8, 0, 0, 0],
  42.        [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0.4, -0.8],
  43.        
  44.        [ 0, 1, -0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  45.        [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
  46.        
  47.        ]
  48.  
  49. myB = [
  50.         20.085-10.59095,
  51.         10.59095-7.691,
  52.         7.691 - 7.0993,
  53.         7.0993 - 5.1551,
  54.         5.1551 - 2.7183,
  55.         0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  56. # --- end of исходные данные
  57.  
  58.  
  59. # --- вывод системы на экран
  60. def FancyPrint(A, B, selected):
  61.     for row in range(len(B)):
  62.         print("(", end='')
  63.         for col in range(len(A[row])):
  64.             print("\t{1:10.2f}{0}".format(" " if (selected is None or selected != (row, col)) else "*", A[row][col]),
  65.                   end='')
  66.         print("\t) * (\tX{0}) = (\t{1:10.2f})".format(row+1, B[row]))
  67. # --- end of вывод системы на экран
  68.  
  69.  
  70. # --- перемена местами двух строк системы
  71. def SwapRows (A, B, row1, row2):
  72.     A[row1], A[row2] = A[row2], A[row1]
  73.     B[row1], B[row2] = B[row2], B[row1]
  74. # --- end of перемена местами двух строк системы
  75.  
  76.  
  77. # --- деление строки системы на число
  78. def DivideRow (A, B, row, divider):
  79.     A[row] = [a / divider for a in A[row]]
  80.     B[row] /= divider
  81. # --- end of деление строки системы на число
  82.  
  83.  
  84. # --- сложение строки системы с другой строкой, умноженной на число
  85. def CombineRows (A, B, row, source_row, weight):
  86.     A[row] = [(a + k * weight) for a,k in zip(A[row], A[source_row])]
  87.     B[row] += B[source_row] * weight
  88. # --- end of сложение строки системы с другой строкой, умноженной на число
  89.  
  90.  
  91. # --- решение системы методом Гаусса (приведением к треугольному виду)
  92. def Gauss (A, B):
  93.  
  94.     column = 0
  95.     while(column < len(B)):
  96.    
  97.         print ("Ищем максимальный по модулю элемент в {0}-м столбце:".format(column+1))
  98.         current_row = None
  99.         for r in range(column, len(A)):
  100.             if current_row is None or abs(A[r][column]) > abs(A[current_row][column]):
  101.                 current_row = r
  102.         if current_row is None:
  103.             print ("решений нет")
  104.             return None
  105.         FancyPrint (A, B, (current_row, column))
  106.    
  107.         if current_row != column:
  108.             print ("Переставляем строку с найденным элементом повыше:")
  109.             SwapRows (A, B, current_row, column)
  110.             FancyPrint(A, B, (column, column))
  111.  
  112.         print ("Нормализуем строку с найденным элементом:")
  113.         DivideRow (A, B, column, A[column][column])
  114.         FancyPrint(A, B, (column, column))
  115.        
  116.         print("Обрабатываем нижележащие строки:")
  117.         for r in range(column+1, len(A)):
  118.             CombineRows(A, B, r, column, -A[r][column])
  119.         FancyPrint(A, B, (column, column))
  120.        
  121.         column += 1
  122.        
  123.     print("Матрица приведена к треугольному виду, считаем решение")
  124.     X = [0 for b in B]
  125.     for i in range(len(B)-1, -1, -1):
  126.         X[i] = B[i] - sum(x*a for x,a in zip(X[(i+1):], A[i][(i+1):]))
  127.    
  128.     print("Получили ответ:")
  129.     print( "\n".join("X{0} =\t{1:10.2f}".format(i+1,x) for i,x in enumerate(X)) )
  130.    
  131.     return X
  132. # --- end of решение системы методом Гаусса (приведением к треугольному виду)
  133.  
  134.  
  135.  
  136. print("Исходная система:")
  137. FancyPrint(myA, myB, None)
  138.  
  139. print("Решаем:")
  140. Gauss (myA, myB)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement