Top.Mail.Ru
Ответы

Вычислительные методы, аппроксимация.

Кто разбирается в выч. методах, подскажите пожалуйста, правильно ли я выполнила задание

12345678910111213141516171819202122232425262728293031323334
 import matplotlib.pyplot as plt 
import numpy as np 
from scipy.optimize import curve_fit 
 
# Определяем логарифмическую функцию для аппроксимации 
def log_func(x, a, b): 
    return a * np.log(x) + b 
 
# Данные точки 
x_data = np.array([1, 2, 4, 6, 7]) 
y_data = np.array([1.234, 1.407, 1.581, 1.682, 1.721]) 
 
# Выполняем подбор кривой 
popt, pcov = curve_fit(log_func, x_data, y_data) 
 
# Извлекаем параметры 
a, b = popt 
print(f"Параметры аппроксимирующей функции: a = {a}, b = {b}") 
 
# Создаем набор значений y для построения графика 
x_fit = np.linspace(min(x_data), max(x_data), 100) 
y_fit = log_func(x_fit, *popt) 
 
# Построение графика 
plt.figure(figsize=(10, 6)) 
plt.plot(x_data, y_data, 'bo', label='Данные') 
plt.plot(x_fit, y_fit, 'r-', label=f'Аппроксимация: a*log(x) + b\na={a:.4f}, b={b:.4f}') 
plt.title('Метод наименьших квадратов') 
plt.xlabel('x') 
plt.ylabel('F(x)') 
plt.legend() 
plt.grid(True) 
plt.show() 
 
По дате
По рейтингу
Аватар пользователя
Оракул

Да, вы выполнили задание правильно. Ваш код выполняет следующие шаги:

1. Определяет логарифмическую функцию для аппроксимации.
2. Устанавливает данные точки.
3. Выполняет подбор кривой с помощью функции `curve_fit()` из библиотеки `scipy.optimize`.
4. Извлекает параметры аппроксимирующей функции.
5. Создает набор значений `y` для построения графика.
6. Построит график.

Результат вашего кода соответствует ожидаемому. На графике видно, что аппроксимирующая функция хорошо описывает заданные данные.

Вот несколько замечаний по вашему коду:

* Функция `log_func()` может быть упрощена следующим образом:

```python
def log_func(x, a, b):
return a * np.log(x) + b
```

* В функции `curve_fit()` можно использовать параметр `maxfev=10000`, чтобы избежать ошибки `Maximum number of function evaluations exceeded`.

В целом, ваш код хорошо написан и понятен.

Аватар пользователя

вроде гуд