IPB

Здравствуйте, гость ( Вход | Регистрация )

> Как разложить число на составляющие по заданному уравнению?, S=x*(y*(4+z1)+4+z2)+z3
&y JOKER
сообщение 15.9.2009, 11:33
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 2
Регистрация: 15.9.2009
Город: Chelyabinsk city
Учебное заведение: слава Богу, уже закончил ;)
Вы: другое



Здравствуйте!
Я не студент и не математик,и даже не программер,а просто интересующийся различными сферами деятельности.
Возникла необходимость написать софтинку, которая бы раскладывала число на составляющие по заданному уравнению:

дано число 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
Хотя-бы одно из множеств решений.

Вариант перебора отпадает - это некрасиво как-то и неинтересно. (IMG:style_emoticons/default/smile.gif)
Была мысль начать с того, на какие числа вообще делится S, но это опять-же только перебором.
Поэтому у меня вопрос к профессионалам, возможно-ли это решить красиво и каким образом? (IMG:style_emoticons/default/smile.gif)
Спасибо!

p.s. прошу прощения если не в тот топик, просто я не знаю что такое дифуры и относится-ли к ним моя задача.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов(1 - 5)
kaa
сообщение 18.9.2009, 18:35
Сообщение #2


Аспирант
***

Группа: Активисты
Сообщений: 422
Регистрация: 7.1.2009
Город: Украина Киев
Вы: школьник



с каждого промежутка можно выбрать любое число)и подставить в формулу)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
тень
сообщение 18.9.2009, 18:51
Сообщение #3


Студент
**

Группа: Продвинутые
Сообщений: 135
Регистрация: 10.9.2009
Город: москва



Хорошая задача для линейного или нелинелийногопрограммирования. грубо говоря оптимизации.
Зайдите на Excel, вызовите solver, сформулируйте и
через секунду получите ответ.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
tig81
сообщение 18.9.2009, 19:23
Сообщение #4


Академик
********

Группа: Преподаватели
Сообщений: 15 617
Регистрация: 15.12.2007
Город: Украина, Запорожье
Учебное заведение: ЗНУ
Вы: преподаватель



Цитата(&y JOKER @ 15.9.2009, 14:33) *

p.s. прошу прощения если не в тот топик, просто я не знаю что такое дифуры и относится-ли к ним моя задача.

Раздел действительно не тот, переехали.
Дифуры не знаете, а вот дифференциальные уравнения "сократили" правильно.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
&y JOKER
сообщение 25.9.2009, 6:49
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 2
Регистрация: 15.9.2009
Город: Chelyabinsk city
Учебное заведение: слава Богу, уже закончил ;)
Вы: другое



Цитата
Дифуры не знаете, а вот дифференциальные уравнения "сократили" правильно.

ну это вот единственнное, чему меня научили в ВУЗе. (IMG:style_emoticons/default/smile.gif)

формула претерпела некоторые изменения, но суть осталась та-же:
S=(x*((y*(4+z1))+5+z2))+1+z3
в общем, алгоритм получился примерно следующий:
1. находим x перебором от 1 до 255 и z3 от 0 до 10 проверяем делится-ли (S-1-z3) на x без остатка и находится-ли частное n в пределе 65535. Таким образом нашли x, z3 и частное n.
2. получается: S=(x*n)+1+z3. Далее работаем с n.
перебором z1 и z2 от 0 до 10 проверяем целочисленное деление выражения: y=n-5-z2/(4+z1)

И вроде-бы все работает замечательно, но только в пределах до значаения S=9387296. Далее, диапазон "поправочного" коэфф. z3 приходится увеличивать, что собссно не есть гуд. (IMG:style_emoticons/default/sad.gif)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
тень
сообщение 25.9.2009, 7:52
Сообщение #6


Студент
**

Группа: Продвинутые
Сообщений: 135
Регистрация: 10.9.2009
Город: москва



составляете функцию abs(S- ваша формула.) (
Задаете произвольный набор исходных переменных внутри
разрешенной области
1. изменяете первую переменную на +1
-если функция уменьшается продолжаете увеличивать первую переменную до тех пор пока она не начнет увеличиваться или
вы не упретесь в ограничение
- если увеличилась, то изменяете на -1 и далее как выше
2. Далее последовательно для всех переменных п.1
3. Если любое изменение любых переменных приводит к увеличению
функции - найдено решение
Метод без производных, проэтому походит abs, иначе лучше использовать квадрат, чтобы сохранить непр. производной
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 25.5.2025, 12:18

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru