Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=53)
-   -   Непростая задачка по нахождению прогрессии (http://www.flasher.ru/forum/showthread.php?t=197331)

caseyryan 05.04.2013 15:15

[Решено] Непростая задачка по нахождению прогрессии
 
Тема во флейме, потому что ни под один другой раздел не подходит.

Нужна помощь, с нахождением формулы по которой высчитывается число
в общем, представим что есть целочисленная шкала от 1 до бесконечности. 1, 2, 3...
к каждому из этих делений привязано число. Точно известны некоторые числа:
1 -> 100
2 -> 110
3 -> 130
4 -> 150
15 -> 700
34 -> 10060
40 -> 23290
50 -> 94230
52 -> 124620
70 -> 1 542230
74 -> 2 697380


Нужна формула для вычисления остальных, если она тут вообще возможна. Уже всю голову сломал, но логическая цепочка обрывается на 70.

п.с. Не принципиально, чтобы получались именно такие числа. Но нужно чтобы что-то примерное. Примерно такая же прогрессия. Даже если к 70 числа будут отличаться от этих на 250 - 500 тысяч, это уже хорошо.

iflamberg 05.04.2013 15:48

Похоже на какую-то квадратичную функцию вида f(x) = a + bx^x. Кажется, в пакетах, типа mapple, matchcad, были возможности экстраполяции.

caseyryan 05.04.2013 15:50

Понятно, что похожа, но их полно. Нужна подходящая.

iflamberg 05.04.2013 16:15

Я ж говорю. Есть математические пакеты, которые умеют это делать. Куча методик в "численных методах", в зависимости от цели и желания заморачиваться: интерполяция, экстраполяция, аппроксимация, поиск минимальной функции.

Берем, скажем, вольфрам, и пробуем, скажем что-нибудь такое

Ну или берем карандаш в руки, делам предположение, что это ф-я определенного типа, строим систему уравнений, пытаемся ее решить.

caseyryan 05.04.2013 18:48

Не. Не вариант. Поробовал этот вольфрам. Никаких результатов. Тут даже цифры слишком большие, чтобы зрительно функцию нарисовать. Так что не выдал они ни графической функции (что естественно), ни формулы.
Цитата:

Ну или берем карандаш в руки, делам предположение, что это ф-я определенного типа, строим систему уравнений, пытаемся ее решить.
Да да, это как раз то, чем я занимаюсь уже несколько дней. И то, после чего и решил создать эту тему )

wvxvw 05.04.2013 19:53

Вложений: 1
Код:

function [Poly] = fitLevelDataToSecondLevelPoly ()
  xdata = [1, 2, 3, 4, 15, 34, 40, 50, 52, 70, 74];
  ydata = [100, 110, 130, 150, 700, 10060, 23290, 94230, 124620, 1542230, 2697380];
  order = 2;
  p = polyfit (xdata, ydata, order);
  x = linspace (min (xdata), max (xdata), 101);
  y = polyval (p, x);
  plot (x, y, '-', xdata, ydata, 's');
  legend ('Fitted polynomial', 'Level Data');
  ## 1.0220e+03 * x^2 + -4.7642e+04 * x + 1.7550e+05
  Poly = p;
endfunction

function [Poly] = fitLevelDataToFourthLevelPoly ()
  xdata = [1, 2, 3, 4, 15, 34, 40, 50, 52, 70, 74];
  ydata = [100, 110, 130, 150, 700, 10060, 23290, 94230, 124620, 1542230, 2697380];
  order = 4;
  p = polyfit (xdata, ydata, order);
  x = linspace (min (xdata), max (xdata), 101);
  y = polyval (p, x);
  plot (x, y, '-', xdata, ydata, 's');
  legend ('Fitted polynomial', 'Level Data');
  ## 8.2722e-01 * x^4 + -9.3058e+01 * x^3  3.3344e+03 * x^2 + -3.8139e+04 * x + 7.2091e+04
  Poly = p;
endfunction

function [Poly] = fitLevelDataToEighthLevelPoly ()
  xdata = [1, 2, 3, 4, 15, 34, 40, 50, 52, 70, 74];
  ydata = [100, 110, 130, 150, 700, 10060, 23290, 94230, 124620, 1542230, 2697380];
  order = 8;
  p = polyfit (xdata, ydata, order);
  x = linspace (min (xdata), max (xdata), 101);
  y = polyval (p, x);
  plot (x, y, '-', xdata, ydata, 's');
  legend ('Fitted polynomial', 'Level Data');
  ## 9.2922e-08 * x^8 + -2.0911e-05 * x^7 +  1.9908e-03 * x^6 + -1.0071e-01 * x^5 +
  ## 2.8741e+00 * x^4 + -4.4839e+01 * x^3 + 3.4286e+02 * x^2 + -9.5543e+02 * x +
  ## 8.3935e+02
  Poly = p;
endfunction

Вот что можно получить, если делать аппроксимацию разной степени полиномами.
Проблема в том, что последнее значение "вываливается" из общей тенденции...

Вложение 29358

caseyryan 05.04.2013 22:44

Цитата:

Проблема в том, что последнее значение "вываливается" из общей тенденции...
wvxvw, да у меня тоже на 70 точке получалось не то, что до этого. Такое впечатление, что после 70 нужно все значения на 2 делить

п.с. Вообще, график очень похож на ease out expo графики в твин движках. Надо попробовать их задействовать.

wvxvw 06.04.2013 03:10

Так а чего, разве последняя функция не подошла? Я просто надеялся, что более коротким полиномом можно будет обойтись, но полином восьмой степени вроде как очень даже крсивую кривую нарисовал.

caseyryan 06.04.2013 09:43

Цитата:

Так а чего, разве последняя функция не подошла?
Мне бы ее привести в более подходящий для меня вид. Я что-то не врубаюсь..
Нужно передать в нее "контрольную точку", скажем 35, а на выходе получить соответствующее ей второе число. Это возможно?

wvxvw 06.04.2013 17:14

Код:

y = 9.2922e-08 * x^8 + -2.0911e-05 * x^7 + 1.9908e-03 * x^6 + -1.0071e-01 * x^5 +
    2.8741e+00 * x^4 + -4.4839e+01 * x^3 + 3.4286e+02 * x^2 + -9.5543e+02 * x +
    8.3935e+02

Т.е. Х в восьмой умножить на 9.2922e-08 плюс Х в седьмой умножить на -2.0911e-05 ... и т.д.


Часовой пояс GMT +4, время: 19:33.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.