LINUX.ORG.RU
ФорумTalks

Формула последовательности

 ,


1

1

Приветствую, господа

Есть некая последовательность:

14636
13401
12331
11395
10572
9844
9196
8616
8094
7622
7196
6807
6452
6128
5828
5554
5299
5064
4846
4643
4452
4276
4112
3955
3810
3674
3545
3422

Значения не точные, могут плясать, но в пределах одного десятка.

Помогите вывести формулу этой последовательности.

Спасибо.

★★

Последнее исправление: sambist (всего исправлений: 1)

Ответ на: комментарий от beastie

Я подозреваю здесь скорее квадратный корень, чем exp. И да, я с этой последовательностью минут 15 уже люблюсь, пока никак.

sambist ★★
() автор топика

y = 19072.0945141486 - 4698.76359565508*log(1.34372145908955 + N)

Устроит?

Если нет:

y = 19158.8610959615 + 212.572534656767*N + 1.92113758202907*N^2 - 4373.07901767011*sqrt(N)

Ну, или просто:

y = 20020.5869184788 + 366.961584686416*N - 5078.61647655241*sqrt(N)

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 1)
Ответ на: комментарий от sambist

Генетикой: http://www.nutonian.com/products/eureqa/

Вот ещё вариантик красивый:

y = 23.6367387047272*N + 990777.264580147/(52.3296379918632 + 4.49449116676136*N) - 2797.49916040759

y = 183885.160789653/(10.397499469825 + N) - 1394.38465601982

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 1)
Ответ на: комментарий от Sadler

Что-то уровень совпадения как-то маловат, +-300. Построил в либре по формулам, как-то не очень оно совпадает(

sambist ★★
() автор топика
Ответ на: комментарий от sambist

Какая ошибка устроит? Вот с Max Error 1.4303323:

x = 96.8640910566672/<row> + 665.319309772118*sqrt(<row>) + 1115012.14869592/(52.412224761695 + 4.51386911269824*<row>) - 5690.09926007587 - 23.0972907290558*<row>

Sadler ★★★
()
Ответ на: комментарий от Sadler

О. Спасибо большое. Теперь мне надо принять побольше веществ тобы математически хоть как-то эти результаты обосновать)

sambist ★★
() автор топика
Ответ на: комментарий от djzielony

Таблица поправок квадратного корня для шестнадцатирично-основанной схемы вычисления. Достаточно?

sambist ★★
() автор топика
Ответ на: комментарий от djzielony

Это не та поправка. Это поправка для значений тетрады X в 0xAABX, при уже построенной таблице для arr[AA] = sqrt((AA << 4) | B) * 16777216.0;

sambist ★★
() автор топика
Ответ на: комментарий от sambist

Генетика, если задать нулевой Error вам просто всю таблицу в параметры функции вынесет, если не найдет простого решения.

djzielony
()
Ответ на: комментарий от Sadler

http://paste.org.ru/?roccwu

Вот. Я ее эмпирически получил, около 10% удалось автоматически интерполяцией получить, часть ячеек пришлось руками считать, часть удалось подбором. Так что в ней возможны неточности (по крайней мере из 1048575 тестов проваливаются 479). Могу даже указать номера ячеек, в которых проваливаются тесты.

sambist ★★
() автор топика
Ответ на: комментарий от djzielony

Генетика, если задать нулевой Error вам просто всю таблицу в параметры функции вынесет, если не найдет простого решения.

Потому все решения сравниваются только с другими решениями такой же или большей сложности. Если решение меньшей сложности лучше решения большей сложности, все решения большей сложности уничтожаются.

Sadler ★★★
()
Ответ на: комментарий от djzielony

Здесь *должно* быть простое решение. Значения ячеек может колбасить в некоторых пределах (Баст знает в каких), я могу только сказать когда начнут проваливаться тесты, см. объяснение в сообщении Формула последовательности (комментарий)

sambist ★★
() автор топика
Ответ на: комментарий от Sadler

В таблице ясно видно, что разница по X линейна. Это можно использовать для получения более точного значения для столбца - усреднить разницы всей строки и взять это значение).

sambist ★★
() автор топика
Последнее исправление: sambist (всего исправлений: 1)
Ответ на: комментарий от beastie

Так, уже, приложил апроксимированое и со всем рапортом :) Абсолютные ошибки в районе 10-20 единиц

Relative error так вообще на уровне доли процента

djzielony
()
Последнее исправление: djzielony (всего исправлений: 1)

Очевидно же

Wo-wo-wo, погодите. Есть набор точек, можно подобрать максимально близкую к ним экспоненту, можно подобрать максимально близкую степенную функцию, можно хоть прямую прочертить. Можно даже пытаться подобрать сумму экспоненты и степенной функции. Чего хотите то и получите.

Camel ★★★★★
()
Ответ на: комментарий от sambist

После нескольких попыток получилось такое:

A + B + C + D + E + F + G + H + I + J + K + L + M + N + O + P = sqrt(247391204388310/(15.019702168223 + <row>))

«Correlation Coefficient» 0.99999988

То есть, если переменные линейно зависимы, далее достаточно лишь знать соотношения переменных, чтобы выразить нужную. Сорри, у меня уже глубокая ночь, не могу сейчас нормально этим заниматься.

Sadler ★★★
()
Ответ на: комментарий от Sadler

Простите, но эта функция как то не совпадает с данными, или я что то не понял?

http://fooplot.com/#W3sidHlwZSI6MCwiZXEiOiIoMjQ3MzkxMjA0Mzg4MzEwLygxNS4wMTk3M... А моя таки весьма http://fooplot.com/#W3sidHlwZSI6MywiZXEiOltbIjEiLCIgMTQ2MzYiXSxbIjIiLCIgMTM0M...

djzielony
()
Последнее исправление: djzielony (всего исправлений: 2)
Ответ на: комментарий от ZERG

На стакэксчейндж тебе дорога.

Хотел привести цитату модератора оттуда, но тред уже потерли. Короче там ненавидят треды по которым никто другой ему-то не может научиться. Оптимизация конкретной функции, вопрос на узкоспециализированную тему и пр.

sambist ★★
() автор топика
Ответ на: комментарий от sambist

Вбиваешь значения в один массив и делаешь аппроксимацию. На английском языке это называется curve fitting. Собствено, так и сможешь найти в подходящем тебе математическом пакете эту функцию.

Quasar ★★★★★
()

Загоняешь числа в октаву. Делаешь plot. Видишь, что похоже на экспоненту с минусовым аргументом. Делаешь plot(log(Y)), видишь, что это не так — все равно остается квадратичная зависимость. ОК, аппроксимируешь log(Y) параболой, а потом вычисляешь более-менее точную зависимость.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от beastie

Не, там не совсем экспонента: логарифм этой шняги тоже кривой. Проще туда либо полином 4-6 порядка впихнуть, либо степенной функцией аппроксимировать. В зависимости от пожеланий ТСа.

Если бы он еще сказал природу этих данных...

Eddy_Em ☆☆☆☆☆
()

Формула: 15273. - 445.563 x + 8.19037 x^2 - 1696.21 Log[x]

Говнокод

data = {14636, 13401, 12331, 11395, 10572, 9844, 9196, 8616, 8094, 
   7622, 7196, 6807, 6452, 6128, 5828, 5554, 5299, 5064, 4846, 4643, 
   4452, 4276, 4112, 3955, 3810, 3674, 3545, 3422};
func = Fit[Table[{i, data[[i]]}, {i, 1, Length[data]}], {1, x, x^2, Log[x]}, x]
Show[ListPlot[data, PlotStyle -> Red], Plot[func, {x, 1, Length[data]}]]
Картинка http://i.piccy.info/i9/76ef8501c580a05f09c7a8f7b8f72f98/1413959133/16501/7751...

nikitos ★★★
()
Последнее исправление: nikitos (всего исправлений: 1)
Ответ на: комментарий от sambist

Но так ты же вбросы делаешь. Вот тебе уже сделали кучу вариантов решений, ты ща переберёшь, никого не научишь, да и самому не поможет, потому что не знаешь, что тебе нужно конкретно.

ZERG ★★★★★
()

надеюсь ты понимаешь, что это можно сделать бесконечным количеством способов?

cvs-255 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.