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

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

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

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

Аппроксимировать табличную функцию
Аппроксимировать табличную функцию многочленом второй степени методом наименьших квадратов Значения xi=i´0,1; i=1,2…20 1 2,23 ...

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

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

11
Эксперт по математике/физике
 Аватар для jogano
6360 / 4067 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
14.09.2016, 13:40
Метод наименьших квадратов для зависимости 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
Модератор
Эксперт по математике/физике
 Аватар для VSI
5291 / 4073 / 1392
Регистрация: 30.07.2012
Сообщений: 12,490
14.09.2016, 14:13
Цитата Сообщение от oobarbazanoo Посмотреть сообщение
...имея набор точек
Присылайте свой набор точек, аппроксимируем...
1
 Аватар для oobarbazanoo
7 / 30 / 9
Регистрация: 13.05.2015
Сообщений: 1,835
14.09.2016, 17:18  [ТС]
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
Модератор
Эксперт по математике/физике
 Аватар для VSI
5291 / 4073 / 1392
Регистрация: 30.07.2012
Сообщений: 12,490
14.09.2016, 18:37
oobarbazanoo, выбирайте себе функцию по вкусу... (результаты расчетов в текстовом файле)
Миниатюры
Как аппроксимировать функцию?  
Вложения
Тип файла: txt oobarbazanoo.txt (9.8 Кб, 4 просмотров)
1
 Аватар для oobarbazanoo
7 / 30 / 9
Регистрация: 13.05.2015
Сообщений: 1,835
15.09.2016, 11:33  [ТС]
А чем Вы строили данную функцию?
Это какой-то МатЛаб?

Добавлено через 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
Модератор
Эксперт по математике/физике
 Аватар для VSI
5291 / 4073 / 1392
Регистрация: 30.07.2012
Сообщений: 12,490
15.09.2016, 11:39
Цитата Сообщение от oobarbazanoo Посмотреть сообщение
Это какой-то МатЛаб?
Программа называется Curve Expert Pro
Цитата Сообщение от oobarbazanoo Посмотреть сообщение
a*exp(b*x) что означает данная запись?
Это означает следующее:
a*eb*x
1
 Аватар для oobarbazanoo
7 / 30 / 9
Регистрация: 13.05.2015
Сообщений: 1,835
15.09.2016, 13:45  [ТС]
А как тогда можно перевести в а*(x^b)?
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
28.09.2016, 17:48
Цитата Сообщение от oobarbazanoo Посмотреть сообщение
А как тогда можно перевести в а*(x^b)?
Никак вообще.
Цитата Сообщение от oobarbazanoo Посмотреть сообщение
а именно в виде a*(x^b). Найти необходимо a и b.
Наверно подразумевали что a и b нужны просто числа коэффициенты?
А с чего вы взяли что эта задача имеет решение вообще? Ваша функция не может аппроксимировать ваши данные вообще, постройте ее меняя параметры a,b форма кривой вообще другая. Вот вам и выдали целый список решений где a и b это формулы. Построил выборочно, некоторые вышли бред =) но ведь некоторые неплохие.

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

Решение

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

Еще можно помучить полином Лагранжа\Ньютона но они очень не адекватные по Y когда точек больше 4, лучше брать параметрические кривые. Или вообще линейно интерполировать, разбить на 3 участка вашу кривую и все.
1
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
29.09.2016, 22:00
Вот придумал простое красивое решение. Строим 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
 Аватар для Таланов
1965 / 1073 / 163
Регистрация: 06.12.2012
Сообщений: 4,695
26.10.2016, 07:04
oobarbazanoo, ваша аппроксимация по Мне даёт 2,55*Е(-8)*х^2.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2016, 07:04
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru