Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- Online Python Compiler.
- Code, Compile, Run and Debug python program online.
- Write your code in this editor and press "Run" button to execute it.
- '''
- x = [-1,-0.6,-0.2, 0.2, 0.6, 1]
- y = [20.085, 10.59095, 7.691, 7.0993, 5.1551, 2.7183]
- for i in range(1,6):
- 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])
- for i in range(2,6):
- print("c", i, "* 0.4 - d", i, "/2 * 0.16", " === b", i, " - b", i-1)
- for i in range(2,6):
- print("d", i, "* 0.4 === c", i, " - c", i-1)
- print("c1 - d1 * 0.4 === 0")
- print("c5 === 0")
- print("\nHello World \n")
- # --- исходные данные
- myA = [
- [ 0.4, -0.4**2/2, -0.4**3/6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [ 0, 0, 0, 0.4, -0.4**2/2, -0.4**3/6, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [ 0, 0, 0, 0, 0, 0, 0.4, -0.4**2/2, -0.4**3/6, 0, 0, 0, 0, 0, 0],
- [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.4, -0.4**2/2, -0.4**3/6, 0, 0, 0],
- [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.4, -0.4**2/2, -0.4**3/6],
- [ 1, 0, 0, -1, 0.4, -0.8, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [ 0, 0, 0, 1, 0, 0, -1, 0.4, -0.8, 0, 0, 0, 0, 0, 0],
- [ 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0.4, -0.8, 0, 0, 0],
- [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0.4, -0.8],
- [ 0, 1, 0, 0, -1, 0.4, -0.8, 0, 0, 0, 0, 0, 0, 0, 0],
- [ 0, 0, 0, 0, 1, 0, -1, 0.4, -0.8, 0, 0, 0, 0, 0, 0],
- [ 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0.4, -0.8, 0, 0, 0],
- [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0.4, -0.8],
- [ 0, 1, -0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
- [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
- ]
- myB = [
- 20.085-10.59095,
- 10.59095-7.691,
- 7.691 - 7.0993,
- 7.0993 - 5.1551,
- 5.1551 - 2.7183,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- # --- end of исходные данные
- # --- вывод системы на экран
- def FancyPrint(A, B, selected):
- for row in range(len(B)):
- print("(", end='')
- for col in range(len(A[row])):
- print("\t{1:10.2f}{0}".format(" " if (selected is None or selected != (row, col)) else "*", A[row][col]),
- end='')
- print("\t) * (\tX{0}) = (\t{1:10.2f})".format(row+1, B[row]))
- # --- end of вывод системы на экран
- # --- перемена местами двух строк системы
- def SwapRows (A, B, row1, row2):
- A[row1], A[row2] = A[row2], A[row1]
- B[row1], B[row2] = B[row2], B[row1]
- # --- end of перемена местами двух строк системы
- # --- деление строки системы на число
- def DivideRow (A, B, row, divider):
- A[row] = [a / divider for a in A[row]]
- B[row] /= divider
- # --- end of деление строки системы на число
- # --- сложение строки системы с другой строкой, умноженной на число
- def CombineRows (A, B, row, source_row, weight):
- A[row] = [(a + k * weight) for a,k in zip(A[row], A[source_row])]
- B[row] += B[source_row] * weight
- # --- end of сложение строки системы с другой строкой, умноженной на число
- # --- решение системы методом Гаусса (приведением к треугольному виду)
- def Gauss (A, B):
- column = 0
- while(column < len(B)):
- print ("Ищем максимальный по модулю элемент в {0}-м столбце:".format(column+1))
- current_row = None
- for r in range(column, len(A)):
- if current_row is None or abs(A[r][column]) > abs(A[current_row][column]):
- current_row = r
- if current_row is None:
- print ("решений нет")
- return None
- FancyPrint (A, B, (current_row, column))
- if current_row != column:
- print ("Переставляем строку с найденным элементом повыше:")
- SwapRows (A, B, current_row, column)
- FancyPrint(A, B, (column, column))
- print ("Нормализуем строку с найденным элементом:")
- DivideRow (A, B, column, A[column][column])
- FancyPrint(A, B, (column, column))
- print("Обрабатываем нижележащие строки:")
- for r in range(column+1, len(A)):
- CombineRows(A, B, r, column, -A[r][column])
- FancyPrint(A, B, (column, column))
- column += 1
- print("Матрица приведена к треугольному виду, считаем решение")
- X = [0 for b in B]
- for i in range(len(B)-1, -1, -1):
- X[i] = B[i] - sum(x*a for x,a in zip(X[(i+1):], A[i][(i+1):]))
- print("Получили ответ:")
- print( "\n".join("X{0} =\t{1:10.2f}".format(i+1,x) for i,x in enumerate(X)) )
- return X
- # --- end of решение системы методом Гаусса (приведением к треугольному виду)
- print("Исходная система:")
- FancyPrint(myA, myB, None)
- print("Решаем:")
- Gauss (myA, myB)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement