Как правильно создать алгоритм решения такой задачи?
Всем привет
Как правильно создать алгоритм решения такой задачи :
Допустим у нас есть числа 1,9,25,49,81
формула xn = (2n-1)^2
То есть если вместо n поставить число 1 то у нас будет результаты тоже 1 а если вместо n поставим 2 то результаты будет 9 .
Как сделать мини алгоритм который бы при воде чисел выводил формулу допустим у нас есть 2,4,8,16,32 и мне выводит что xn =
Ломаю голову уже второй день.
Как вы себе это представляете? Думаете существует формула под каждый набор чисел?
А если я ввиду числа 3,16,17,46,135,400
Какой результат должен быть? Вы можете под эти числа хотя бы вручную составить формулу?
di23: на самом деле да, существует конкретная формула под ваш (и вообще любой) набор чисел. Но вручную находить такие формулы практически невозможно. Первое, что на ум приходит - использовать нейронные сети, но они будут находить лишь приближенные формулы, а точность будет зависеть от размера входных данных.
Мне кажется, что Вы чего-то не договариваете. Либо есть конечный набор формул, из которого нужно выбрать подходящую, либо описание формулы типа "полином с целыми коэффициентами", либо что-то ещё. А существование решения в такой общей формулировке сомнительно.
Nwton: допустим мне дают числа 1 ; -2 ; 3 ; -4 ; 5 мне надо найти формулу в ручную , она есть и как мне сделать это через алг просто будет долго искать по бумаге
di23: Конечно это возможно. Никаких генетических алгоритмов, просто интерполяционный полином Лагранжа. Он даст точные значения в этих точках. Но не думаю, что это то, что нужно автору :-D
При чем тут ряды? Если есть значения 1,2,3,4,5 и значение функции в этих точках, например, 1,9,25,49,81, то можно легко получить интерполяционный многочлен
Ну ему формула нужна по имеющийся таблично-заданной функции, это как раз аппроксимация, а интерполяция это нахождение значения любого f(x) внутри отрезка, а если вне отрезка то это экстраполяция. Разве не так?
Какой Лагранж ? Какая интерполяция ? Это школьная программа. Но как верно заметили коллеги, здесь нужно задействовать нейронную сеть. К сожалению они не сообщили какую. Я сообщу: задействовать нужно сеть в своей голове, или голове соседа.
P.S. бонусом решение "... числа 1 ; -2 ; 3 ; -4 ; 5 ... " - формула: (-n)*(-1)^n
Действительно. Я попробовал сначала подключиться к нейронной сети гугла, но не нашёл ответа. Затем подключился к нейронной сети в своей голове... и был удивлён таким простым ответом решения задачи: xn = 2^n Ого! Это же геометрическая прогрессия!
Делали похожее на лабе. Использовали генетические алгоритмы. Но - прямо для любого набора вы не получите точную формулу. Особенно зависит от разрешенных математических операторов.
Jony1337 ок, вы ее находите как? Есть какие то правила? Скорее всего вы делаете это с т.з. программирования полным перебором. Если вы это делаете как то по другому - то у вас должен быть алгоритм
GavriKos: ну вот если у меня ряд 1/2 ; 1/4 ; 1/6 то я предполагаю и проверяю и выходит что формула 1/2n , где n это число от 1 до бесконечность в зависимость от типа ряда
Jony1337 Геналгоритмы не перебирают все варианты. Ну так если у вас нет никаких дополнительных параметров по этому ряду - то что ж делать. Ограничивайте математическими операциями, например. Выведите хорошую оценочную функцию.
GavriKos: Jony1337: я вот читаю и удивляюсь. Ну риали, ребят. Это же изи. Просто нужен интерполяционный полином, который в точках даёт точное значение. Лагранжа, самое простое.
Jony1337: четные -, нечетные +. Следовательно: если (число %2 = без остатка) { вывод: -число} иначе { вывод: число}, за исключением единицы. И все это обернуть в for, где i=пределу
Если бы это было просто так возможно, уже бы давно нашли формулу описывающую закономерность в ряде простых чисел. Но пока нет ее, такой формулы.
Другое дело если известно какого типа последовательность, например геометрическая, тогда задача сводится к поиску (перебору) параметров функции.