Здравствуйте!
Я не студент и не математик,и даже не программер,а просто интересующийся различными сферами деятельности.
Возникла необходимость написать софтинку, которая бы раскладывала число на составляющие по заданному уравнению:
дано число S, которое может принмать значения от 8 до 234881024
S=x*(y*(4+z1)+4+z2)+z3 , где
x может принимать значение от 1 до 255
y - от 1 до 65535
z1,z2,z3 - от нуля, до 20
Имея на входе значение S необходимо вычислить: x,y,z1,z2,z3
Хотя-бы одно из множеств решений.
Вариант перебора отпадает - это некрасиво как-то и неинтересно.
Была мысль начать с того, на какие числа вообще делится S, но это опять-же только перебором.
Поэтому у меня вопрос к профессионалам, возможно-ли это решить красиво и каким образом?
Спасибо!
p.s. прошу прощения если не в тот топик, просто я не знаю что такое дифуры и относится-ли к ним моя задача.
с каждого промежутка можно выбрать любое число)и подставить в формулу)
Хорошая задача для линейного или нелинелийногопрограммирования. грубо говоря оптимизации.
Зайдите на Excel, вызовите solver, сформулируйте и
через секунду получите ответ.
составляете функцию abs(S- ваша формула.) (
Задаете произвольный набор исходных переменных внутри
разрешенной области
1. изменяете первую переменную на +1
-если функция уменьшается продолжаете увеличивать первую переменную до тех пор пока она не начнет увеличиваться или
вы не упретесь в ограничение
- если увеличилась, то изменяете на -1 и далее как выше
2. Далее последовательно для всех переменных п.1
3. Если любое изменение любых переменных приводит к увеличению
функции - найдено решение
Метод без производных, проэтому походит abs, иначе лучше использовать квадрат, чтобы сохранить непр. производной
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)