Форум программистов, компьютерный форум, киберфорум
Численные методы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
7 / 30 / 9
Регистрация: 13.05.2015
Сообщений: 1,835
1

Как аппроксимировать функцию?

14.09.2016, 10:21. Показов 3409. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как аппроксимировать функцию?
Я провёл опыт, получил несколько точек двухмерного пространства. Теперь мне необходимо найти функцию в приближённом виде, а именно в виде a*(x^b). Найти необходимо a и b. Как это сделать наиболее простым способом, имея набор точек?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2016, 10:21
Ответы с готовыми решениями:

Аппроксимировать табличную функцию
Аппроксимировать табличную функцию многочленом второй степени методом наименьших квадратов ...

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

Аппроксимировать функции
Из данных только рисунок. Для каждой кривой: Вход: X от 0 до 1 с плавающей. Выход: Y от 0 до...

Используя МНК аппроксимировать данные линейной зависимостью.
Экспериментальные данные о значениях переменных x и y приведены в таблице: x| -3 | -1 | 1 | 3...

11
Эксперт по математике/физике
6358 / 4065 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
14.09.2016, 13:40 2
Метод наименьших квадратов для зависимости https://www.cyberforum.ru/cgi-bin/latex.cgi?\ln y_i \approx \ln a +b \ln x_i, \: i=\bar{1;N}. Ищете пару https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(\ln a; b \right) как решение линейной системы
https://www.cyberforum.ru/cgi-bin/latex.cgi?\left (\begin{matrix}N & \sum_{i=1}^{N}\ln x_i\\ \sum_{i=1}^{N}\ln x_i & \sum_{i=1}^{N}\ln^2 x_i\end{matrix}\left | \begin{matrix}\sum_{i=1}^{N}\ln y_i\\ \sum_{i=1}^{N}\ln x_i \ln y_i\end{matrix}\right.\right )
1
Модератор
Эксперт по математике/физике
5240 / 4027 / 1385
Регистрация: 30.07.2012
Сообщений: 12,300
14.09.2016, 14:13 3
Цитата Сообщение от oobarbazanoo Посмотреть сообщение
...имея набор точек
Присылайте свой набор точек, аппроксимируем...
1
7 / 30 / 9
Регистрация: 13.05.2015
Сообщений: 1,835
14.09.2016, 17:18  [ТС] 4
N: 1000; T(N): 0.136.
N: 2000; T(N): 0.148.
N: 3000; T(N): 0.25.
N: 4000; T(N): 0.399.
N: 5000; T(N): 0.53.
N: 6000; T(N): 0.624.
N: 7000; T(N): 0.785.
N: 8000; T(N): 2.105.
N: 9000; T(N): 2.363.
N: 10000; T(N): 2.549.
Вот набор точек. N - ось икс, T(N) - ось игрик.
Необходимо подобрать такую функцию, которая имела бы вид a*(N^b).
Тo есть суть задания - найти a и b.

После вычислений получил
b = 1.8117258956353854.
a = 1.6626989031869018E-7.

Подскажите, пожалуйста правильно ли?
0
Модератор
Эксперт по математике/физике
5240 / 4027 / 1385
Регистрация: 30.07.2012
Сообщений: 12,300
14.09.2016, 18:37 5
oobarbazanoo, выбирайте себе функцию по вкусу... (результаты расчетов в текстовом файле)
Миниатюры
Как аппроксимировать функцию?  
Вложения
Тип файла: txt oobarbazanoo.txt (9.8 Кб, 4 просмотров)
1
7 / 30 / 9
Регистрация: 13.05.2015
Сообщений: 1,835
15.09.2016, 11:33  [ТС] 6
А чем Вы строили данную функцию?
Это какой-то МатЛаб?

Добавлено через 1 минуту
a*exp(b*x) что означает данная запись?
а умножить на b в степени x?

Добавлено через 6 минут
Спасибо ОГРОМНОЕ за помощь.
Кстати, я сам тоже решал.
Я имею десять точек, я брал все возможные пары из двух точек.
Потом строил плоскость, где ось икс - log(N), а ось игрик - log(T(N)).
Находил положение каждой из двух взяты точек на данной плоскости, проводил прямую через эти две точки, находил её наклон (как тангенс угла наклона к оси икс, то есть просто вычитал из координаты первой точки по игрику, координаты второ точки по игрику, то есть находил дельта по игрику, потом так же находил дельта по иксу и отношение дельта игрика к дельта иксу).
Далее получал разный наклон для каждой взятой пары, сохранял его.
Потом складывал все наклоны и делил на количество пар, таким образом находил b.
Далее, имея формулу T(N) = a* (N^b) я, поочерёдно подставляя T(N) и N находил разные a, так как точек 10, то имел десять а, складывал данные а и делил результат на 10, таким образом находил а.
Правильно ли?
0
Модератор
Эксперт по математике/физике
5240 / 4027 / 1385
Регистрация: 30.07.2012
Сообщений: 12,300
15.09.2016, 11:39 7
Цитата Сообщение от oobarbazanoo Посмотреть сообщение
Это какой-то МатЛаб?
Программа называется Curve Expert Pro
Цитата Сообщение от oobarbazanoo Посмотреть сообщение
a*exp(b*x) что означает данная запись?
Это означает следующее:
a*eb*x
1
7 / 30 / 9
Регистрация: 13.05.2015
Сообщений: 1,835
15.09.2016, 13:45  [ТС] 8
А как тогда можно перевести в а*(x^b)?
0
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
28.09.2016, 17:48 9
Цитата Сообщение от oobarbazanoo Посмотреть сообщение
А как тогда можно перевести в а*(x^b)?
Никак вообще.
Цитата Сообщение от oobarbazanoo Посмотреть сообщение
а именно в виде a*(x^b). Найти необходимо a и b.
Наверно подразумевали что a и b нужны просто числа коэффициенты?
А с чего вы взяли что эта задача имеет решение вообще? Ваша функция не может аппроксимировать ваши данные вообще, постройте ее меняя параметры a,b форма кривой вообще другая. Вот вам и выдали целый список решений где a и b это формулы. Построил выборочно, некоторые вышли бред =) но ведь некоторые неплохие.

Кстати задача также может решаться делением на 2 и 4-мя уникальными коэффициентами или проще говоря кривой Безье 3 степени. Которую удобно настроить визуально таская точки. Для процессора намного удобней и быстрей делить на 2 чем дикие степени с плавающей, но и построение будет рекурсивной формулой а не обычной…
Как аппроксимировать функцию?
1
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
28.09.2016, 18:37 10
Лучший ответ Сообщение было отмечено oobarbazanoo как решение

Решение

Аппроксимация вручную вышла даже лучше чем в Pro версии сгенереной компом .
Кубическая кривая это две квадратичных. Значит можно найти t зная значение B(t) по X вроде так…формулы есть на вики, кривую разбить на 2 участка. Или проще выбрать одно из решений в одну строчку из списка VSI, пусть намного грубей но зато проще.
Как аппроксимировать функцию?

Еще можно помучить полином Лагранжа\Ньютона но они очень не адекватные по Y когда точек больше 4, лучше брать параметрические кривые. Или вообще линейно интерполировать, разбить на 3 участка вашу кривую и все.
1
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
29.09.2016, 22:00 11
Вот придумал простое красивое решение. Строим 3 прямые по двум точкам KL,LM,MN.
Находим им параметрическую форму типа y=kx+b. Будет линейная аппроксимация ломанной которая очень быстро работает: X(O) это вход X координата точки O.
Синтаксис такой: If[ <Condition>, <Then>, <Else> ]
Мне кажется, получается проще, быстрей, точней чем любые другие методы и легко настроить вручную.
If[
x(O)<x(L),
0.0001*x(O)+0.06285,
If[
x(O)<x(M),
0.00143*x(O)-9.27448,
0.00024*x(O)+0.23545
]]
Как аппроксимировать функцию?
1
1957 / 1066 / 162
Регистрация: 06.12.2012
Сообщений: 4,677
26.10.2016, 07:04 12
oobarbazanoo, ваша аппроксимация по Мне даёт 2,55*Е(-8)*х^2.
1
26.10.2016, 07:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2016, 07:04
Помогаю со студенческими работами здесь

аппроксимировать функцию
помогите пожалуйста решить задачу: аппроксимировать функцию методом наименьших квадратов к...

Аппроксимировать функцию С++
Аппроксимировать таблично заданную функцию, выразив параметры a и b в явном виде. Для работы с...

Аппроксимировать функцию с помощью МНК
Добрый день. Поставлена задача аппроксимировать: x=0...30; \Delta x=1.5; y=4\cdot...

Аппроксимировать кубическим сплайном полином-функцию
Доброго времени суток. Не могу понять почему не компилируется, указывает на , которая находится в 5...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru