Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 27.03.2019
Сообщений: 17

Получить функцию, описывающую экспериментальную зависимость

07.11.2024, 21:08. Показов 751. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
31_data.txt
Здравствуйте! Помогите пожалуйста. Не могу подобрать правильную функцию! Спасибо!

На основе данных из .txt файла:
• Получить функцию, описывающую экспериментальную зависимость
• Вычислить среднее отклонение (среднюю относительную погрешность) точек от получившейся
• Найти точку пересечения этой функции осью абсцисс
Вид этой функции должен явно выводиться с неизвестным х. На отдельной строке сообщение о величине отклонения в процентах и на следующей - ноль функции

Изначальное выражение содержит 2 слагаемых и 3 числовых параметра, которые нужно подобрать функцией из Scipy.
Ожидаемую ошибку можно свести до 10 в -10 степени, 0.01, при использовании curve_fit и выбора нужной функции

Получается такое:
Code
1
2
3
4
5
6
<ipython-input-2-33ebd497065e>:25: RuntimeWarning: The iteration is not making good progress, as measured by the 
  improvement from the last ten iterations.
  intersection_x = fsolve(zero_func_power, x0=1, xtol=1e-8)[0]
Функция, описывающая зависимость: y = 0.3812 * x^(-1.6190) + 2.8906
Среднее относительное отклонение: 7.15%
Точка пересечения с осью абсцисс: x = 2726.01
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import numpy as np
import pandas as pd
from scipy.optimize import curve_fit, fsolve
import matplotlib.pyplot as plt
 
data = pd.read_csv('/content/31_data.txt', sep="\s+", comment='#', header=None, names=["x", "y"])
data['x'] = pd.to_numeric(data['x'], errors='coerce')
data['y'] = pd.to_numeric(data['y'], errors='coerce')
data.dropna(inplace=True)
 
def power_func(x, a, b, c):
    return a * x**(-b) + c
 
params, _ = curve_fit(power_func, data['x'], data['y'], p0=[1, 1, 1], maxfev=10000)
 
data['fitted_y'] = power_func(data['x'], *params)
 
data['relative_error'] = np.abs((data['y'] - data['fitted_y']) / data['y']) * 100
mean_relative_error = data['relative_error'].mean()
 
def zero_func_power(x):
    return power_func(x, *params)
 
try:
    intersection_x = fsolve(zero_func_power, x0=1, xtol=1e-8)[0]
except RuntimeError:
    intersection_x = None
    print("Не удалось найти пересечение с осью абсцисс")
 
power_func_str = f"{params[0]:.4f} * x^(-{params[1]:.4f}) + {params[2]:.4f}"
 
print(f"Функция, описывающая зависимость: y = {power_func_str}")
print(f"Среднее относительное отклонение: {mean_relative_error:.2f}%")
if intersection_x is not None:
    print(f"Точка пересечения с осью абсцисс: x = {intersection_x:.2f}")
else:
    print("Пересечение с осью абсцисс не найдено")
 
plt.plot(data['x'], data['y'], label="Экспериментальные данные", color='blue')
plt.plot(data['x'], data['fitted_y'], label="Аппроксимация", color='orange')
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.show()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.11.2024, 21:08
Ответы с готовыми решениями:

Вычислить величину описывающую зависимость гравитационной потэнциальной энергии от растояния до центра земли
Вычислить величину описывающую зависимость гравитационной потэнциальной энергии от растояния до цэнтра земли ( на ростоянии большем R...

Реализовать файл-функцию описывающую стандартную функцию системы Matlab norm
Реализовать файл-функцию описывающую стандартную функцию системы Matlab norm

Разработать функцию, описывающую поселение отдельного туриста
В гостиницу прибыла группа из M туристов. Каждый турист хочет занять номер определенной категории (с душем, с ванной, люкс) и должен быть...

6
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
08.11.2024, 06:19
hjititk, из графика очевидно, что таким видом функции, как у вас, на маленькую ошибку можно не расчитывать.
Вы зачем-то пытаетесь аппроксимировать данные с явными экстремумами монотонной функцией.
По виду это больше похоже на функцию sinc или Бесселя. Явно должна быть какая-то периодическая составляющая. Вобщем советую вспомнить мат. анализ, хотя бы на школьном уровне, и описать функцию и ее свойства.
0
0 / 0 / 0
Регистрация: 27.03.2019
Сообщений: 17
08.11.2024, 07:06  [ТС]
u235, вот что вышло из этого по синсу и Бесселю
Среднее относительное отклонение для функции sinc: 13.3623%
Среднее относительное отклонение для функции Бесселя: 12.9033%
Попробую дальше подумать в этом направлении

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
from scipy.special import j0, j1
import matplotlib.pyplot as plt
 
data = pd.read_csv('/content/31_data.txt', sep="\s+", comment='#', header=None, names=["x", "y"])
 
def combined_bessel_model(x, A, B, C, D, E):
    return A * j0(B * x) + C * j1(D * x) + E
 
initial_guess = [1, 1, 1, 1, 1]
 
params_bessel_combined, _ = curve_fit(combined_bessel_model, data['x'], data['y'], p0=initial_guess, maxfev=20000)
data['bessel_combined_fitted'] = combined_bessel_model(data['x'], *params_bessel_combined)
 
data['bessel_combined_relative_error'] = np.abs((data['y'] - data['bessel_combined_fitted']) / data['y']) * 100
mean_relative_error_bessel_combined = data['bessel_combined_relative_error'].mean()
 
print(f"Среднее относительное отклонение для комбинированной модели Бесселя: {mean_relative_error_bessel_combined:.4f}%")
 
plt.plot(data['x'], data['y'], label="Исходные данные", color='blue')
plt.plot(data['x'], data['bessel_combined_fitted'], label="Комбинированная модель Бесселя", linestyle='--', color='purple')
plt.xlabel("x")
plt.ylabel("y")
plt.title("Аппроксимация данных комбинированной моделью Бесселя")
plt.legend()
plt.show()
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
08.11.2024, 08:13
Ну так тот же sinc не тупо использовать, а подрастянуть по оси х. Нет?
0
0 / 0 / 0
Регистрация: 27.03.2019
Сообщений: 17
08.11.2024, 08:41  [ТС]
u235,
Попробовал комбинированную модель. Sinc + бессель и затуханием.
Получилось куда лучше, но все равно не то

Среднее относительное отклонение для комбинированной модели: 3.4484%


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
from scipy.special import j1
import matplotlib.pyplot as plt
 
data = pd.read_csv('/content/31_data.txt', sep="\s+", comment='#', header=None, names=["x", "y"])
 
def combined_sinc_bessel_damped(x, A, B, C, D, E, F):
    return A * np.sin(B * x) / x * np.exp(-C * x) + D * j1(E * x) + F
 
initial_guess_combined_sinc_bessel_damped = [1, 1, 0.1, 1, 1, 1]
 
params_combined, _ = curve_fit(combined_sinc_bessel_damped, data['x'], data['y'], p0=initial_guess_combined_sinc_bessel_damped, maxfev=20000)
data['combined_fitted'] = combined_sinc_bessel_damped(data['x'], *params_combined)
 
data['combined_relative_error'] = np.abs((data['y'] - data['combined_fitted']) / data['y']) * 100
mean_relative_error_combined = data['combined_relative_error'].mean()
 
print(f"Среднее относительное отклонение для комбинированной модели: {mean_relative_error_combined:.4f}%")
 
plt.plot(data['x'], data['y'], label="Исходные данные", color='blue')
plt.plot(data['x'], data['combined_fitted'], label="Комбинированная модель с sinc, Бесселем и затуханием", linestyle='--', color='purple')
plt.xlabel("x")
plt.ylabel("y")
plt.title("Аппроксимация данных комбинированной моделью")
plt.legend()
plt.show()
0
56 / 56 / 4
Регистрация: 10.06.2023
Сообщений: 820
08.11.2024, 09:37
Существует метод Прони, позволяющий функцию Бесселя аппроксимировать тремя элементарными функциями. Ссылок не помню, но давным-давно проверял.
0
0 / 0 / 0
Регистрация: 27.03.2019
Сообщений: 17
09.11.2024, 21:48  [ТС]
Среднее относительное отклонение для сплайновой модели: 0.0000%
Результат конечно хороший получится методом сплайна, но никак не удовлетворяет моему заданию

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import numpy as np
import pandas as pd
from scipy.interpolate import CubicSpline
import matplotlib.pyplot as plt
 
data = pd.read_csv('/content/31_data.txt', sep="\s+", comment='#', header=None, names=["x", "y"])
 
cubic_spline = CubicSpline(data['x'], data['y'])
 
data['spline_fitted'] = cubic_spline(data['x'])
 
data['spline_relative_error'] = np.abs((data['y'] - data['spline_fitted']) / data['y']) * 100
mean_relative_error_spline = data['spline_relative_error'].mean()
 
print(f"Среднее относительное отклонение для сплайновой модели: {mean_relative_error_spline:.4f}%")
 
plt.figure(figsize=(12, 6))
 
 
plt.plot(data['x'], data['y'], 'b-', label="Исходные данные")
 
 
plt.plot(data['x'], data['spline_fitted'], 'g--', label="Сплайновая модель")
 
plt.xlabel("x")
plt.ylabel("y")
plt.title("Аппроксимация экспериментальных данных методом прони (сплайнов)")
plt.legend()
plt.show()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.11.2024, 21:48
Помогаю со студенческими работами здесь

Написать функцию, описывающую формулу вычисления длины кривой
x= y= sum(abs(diff(complex(x,y)))) не подскажите, правильно ли это?

Запишите логическую функцию, описывающую состояние схемы, составьте таблицу истинности
Пожалуйста помогите!

Запишите логическую функцию, описывающую состояние схемы, составьте таблицу истинности
Пожалуйста подскажите!

Запишите логическую функцию, описывающую состояние схемы, составьте таблицу истинности
Помогите, пожалуйсто последнее задание Запишите логическую функцию, описывающую состояние схемы, составьте таблицу истинности

Запишите логическую функцию, описывающую состояние схемы, составьте таблицу истинности:
помогите:wall:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru