Advertisement
GNikko

VT

Feb 2nd, 2023 (edited)
700
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.48 KB | None | 0 0
  1. ЛР1. Метод Гаусса с выбором главного элемента. Выбор главного элемента по строкам и по столбцам. Можно сделать только для квадратных матриц.
  2. ЛР2. Решение нелинейных уравнений. Выбор метода - самостоятельно.
  3. ЛР3. Численное интегрирование. Порядок точности, устойчивость, сходимость и т.д.
  4. ЛР4. Численное решение дифференциальных уравнений. Выбор метода - самостоятельно.
  5. ЛР5 . Быстрое преобразование Фурье.
  6.  
  7. ЛР2.
  8. Один из простых методов решения нелинейных уравнений на Python - это метод половинного деления (деления на половину). Этот метод основан на идее, что если функция f(x) имеет разные знаки в двух разных точках a и b, то должна существовать точка c между a и b, где f(c) = 0. Он ищет решение, деля область поиска на две части и выбирает ту часть, в которой знак функции меняется. Затем процедура повторяется для выбранной части, пока точность не достигнет необходимого уровня.
  9.  
  10. def bisection(func, a, b, tol=10e-5):
  11.     c = (a + b) / 2
  12.     while abs(func(c)) > tol:
  13.         if func(c) == 0:
  14.             return c
  15.         elif func(a) * func(c) < 0:
  16.             b = c
  17.         else:
  18.             a = c
  19.         c = (a + b) / 2
  20.     return c
  21.  
  22. Здесь функция func - это функция, удовлетворяющая условию f(x) = 0, a и b - точки, между которыми ищется решение, tol - допустимая точность. Вы можете использовать эту функцию для решения конкретных нелинейных уравнений. Для этого нужно определить функцию func, задать область поиска a и b, и вызвать функцию bisection.
  23.  
  24. Например, для решения уравнения cos(x) - x = 0 можно написать следующий код:
  25.  
  26. import math
  27.  
  28. def func(x):
  29.     return math.cos(x) - x
  30.  
  31. a = 0
  32. b = 2
  33.  
  34. result = bisection(func, a, b)
  35.  
  36. print("The solution is:", result)
  37.  
  38.  
  39. ЛР4.
  40. Численное решение дифференциальных уравнений может быть выполнено с помощью метода Эйлера, который представляет собой простой численный метод интегрирования.
  41.  
  42. def euler(f, x0, y0, x_max, h):
  43.     x = x0
  44.     y = y0
  45.     while x < x_max:
  46.         y = y + h * f(x, y)
  47.         x = x + h
  48.     return y
  49.  
  50. def f(x, y):
  51.     return x + y
  52.  
  53. x0 = 0
  54. y0 = 1
  55. x_max = 2
  56. h = 0.1
  57.  
  58. result = euler(f, x0, y0, x_max, h)
  59.  
  60. print("The solution is:", result)
  61.  
  62. Обратите внимание, что этот метод является неточным и имеет ограниченную точность. Для более точных решений рекомендуется использовать сторонние библиотеки, такие как scipy, numpy, sympy и т.д.
  63.  
  64. ЛР5.
  65. Быстрое преобразование Фурье (FFT) может быть реализовано с использованием встроенных функций Python, таких как cmath и numpy. Вот пример реализации FFT для действительных чисел:
  66.  
  67. import cmath
  68.  
  69. def fft(x):
  70.     N = len(x)
  71.     if N <= 1:
  72.         return x
  73.     even = fft(x[0::2])
  74.     odd = fft(x[1::2])
  75.     T = [cmath.exp(-2j*cmath.pi*k/N)*odd[k] for k in range(N//2)]
  76.     return [even[k] + T[k] for k in range(N//2)] + [even[k] - T[k] for k in range(N//2)]
  77.  
  78. x = [1, 2, 3, 4]
  79. result = fft(x)
  80.  
  81. print("The FFT of", x, "is", result)
  82.  
  83. Обратите внимание, что вышеприведенный код является упрощенным и не является оптимальным. Для более эффективных и полных реализаций рекомендуется использовать сторонние библиотеки, такие как numpy или scipy.
  84. Для вывода графиков в Python можно использовать библиотеку matplotlib. Для этого нужно добавить следующие строки кода:
  85.  
  86. import matplotlib.pyplot as plt
  87.  
  88. # ... остальной код FFT
  89.  
  90. x_axis = range(len(x))
  91. plt.plot(x_axis, x, label="Input")
  92.  
  93. real_part = [result[i].real for i in range(len(result))]
  94. imag_part = [result[i].imag for i in range(len(result))]
  95.  
  96. plt.plot(x_axis, real_part, label="Real Part")
  97. plt.plot(x_axis, imag_part, label="Imaginary Part")
  98.  
  99. plt.xlabel("Sample Number")
  100. plt.ylabel("Amplitude")
  101. plt.title("FFT Plot")
  102. plt.legend()
  103. plt.show()
  104.  
  105. Этот код выведет график, показывающий входные данные, часть действительных и часть мнимых чисел в результате Быстрого преобразования Фурье.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement