7 / 30 / 9
Регистрация: 13.05.2015
Сообщений: 1,835
|
|
1 | |
Как аппроксимировать функцию?14.09.2016, 10:21. Показов 3409. Ответов 11
Метки нет (Все метки)
Как аппроксимировать функцию?
Я провёл опыт, получил несколько точек двухмерного пространства. Теперь мне необходимо найти функцию в приближённом виде, а именно в виде a*(x^b). Найти необходимо a и b. Как это сделать наиболее простым способом, имея набор точек?
0
|
14.09.2016, 10:21 | |
Ответы с готовыми решениями:
11
Аппроксимировать табличную функцию Аппроксимировать или интерполировать функцию двух переменных Аппроксимировать функции Используя МНК аппроксимировать данные линейной зависимостью. |
Модератор
5240 / 4027 / 1385
Регистрация: 30.07.2012
Сообщений: 12,300
|
|
14.09.2016, 14:13 | 3 |
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, выбирайте себе функцию по вкусу... (результаты расчетов в текстовом файле)
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 |
Программа называется Curve Expert Pro
Это означает следующее: 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 |
Никак вообще.
Наверно подразумевали что 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 | |
26.10.2016, 07:04 | |
Помогаю со студенческими работами здесь
12
аппроксимировать функцию Аппроксимировать функцию С++ Аппроксимировать функцию с помощью МНК Аппроксимировать кубическим сплайном полином-функцию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |