Уважаемые знатоки ООо. Помогите решить задачку. Есть у

Автор ForumOOo (бот), 24 ноября 2013, 19:28

0 Пользователи и 1 гость просматривают эту тему.

ForumOOo (бот)

Компонент: Calc
Версия продукта:
Сборка:
ОС:

Уважаемые знатоки ООо. Помогите решить задачку. Есть уравнение вида K1X1+K2X2+...K20X20=0 В уравнении Кі - константа. Каждый из Х - целое число в определенном
диапазоне (например Х1={0...10}, X2={0...1000} и т.д.) Необходимо сформировать матрицу ВСЕХ возможных корней уравнения. Как это можно сделать?

--
Подпись: Евгений

VlhOwn

А Вы знаете, как эта задача решается математически, без всяких калков и экселей? Если знаете, опишите или дайте ссылку, потом подумаем, как это представить программно.

Hasim

Цитата: ForumOOo (бот) от 24 ноября 2013, 18:28Есть уравнение вида K1X1+K2X2+...K20X20=0 В уравнении Кі - константа. Каждый из Х - целое число
Если Кі -целые числа, то это - линейное диофантово уравнение.
Если Кі - не целые числа, то все намного сложнее и решений  в целых числах, как правило, нет.

E.O.

Цитата: Hasim от 25 ноября 2013, 09:25Если Кі -целые числа,
Если Ki - не целое, но конечная десятичная дробь, то умножив левую и правую части на 10, 100 и т.д. мы получим уравнение с целыми числами.
Решение возможно рассмотреть исключительно перебором возможных сочетаний Xi, т.е. присваиваем Х1...Х19 значение 0, Х20=1. Выполняем проверку тождества. Если выполняется, в таблицу корней заносим значения Х1...Х20, Х20прибавляем 1, проверяем на нахождение Х20 в заданном диапазоне. Если не вышли - снова проверка тождества. Если Х20 за пределами диапазона - Х20 обнуляем, а Х19 увеличиваем на 1. И так до тех пор, пока не будут перебраны все возможные варианты.

kompilainenn

задача явно не для табличного процессора, а скорее для маткада
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

E.O.

Цитата: kompilainenn от 25 ноября 2013, 20:38задача явно не для табличного процессора
Ну почему же не для табличного процессора? Ведь один из корней можно найти используя функцию "поиск решения". А вот как найти все остальные корни, это вопрос. Да и задача стоит решить эту проблему средствами Calc или Excel.

JohnSUN

Евгений, фразу насчет "Х1={0...10}, X2={0...1000} и т.д." воспринимаю как шутку: для "и т.д." Calc'у просто не хватит строк в таблице. Даже для восьми иксов, пробегающих целые значения от нуля до 10, при предложенном алгоритме строк не хватит. Разве что переходить в соседние столбцы и новые листы...

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

"     -- Г-голубчики, -- сказал Федор Симеонович озадаченно, разобравшись в почерках. -- Это же п-проблема Бен Б-бецалеля. К-калиостро же доказал, что она н-не имеет р-решения.
     -- Мы сами знаем,  что она  не  имеет  решения,  --  сказал  Хунта, немедленно ощетиниваясь. -- Мы хотим знать, как ее решать.
     -- К-как-то ты странно рассуждаешь,  К-кристо...  К-как  же  искать решение, к-когда его нет? Б-бессмыслица какая-то...
     -- Извини, Теодор, но это ты очень странно рассуждаешь. Бессмыслица -- искать решение, если оно и так есть. Речь идет о том, как поступать с задачей,  которая решения не имеет.  Это глубоко принципиальный  вопрос, который,  как  я  вижу,  тебе,  прикладнику,  к сожалению,  не доступен. По-видимому, я напрасно начал с тобой беседовать на эту тему."
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

kompilainenn

Цитата: E.O. от 26 ноября 2013, 11:05Ну почему же не для табличного процессора?
потому что стоит задача "создать МАТРИЦУ ВСЕХ! возможных корней УРАВНЕНИЯ"! из терминов видно, что это Вам не баланс предприятия по закупкам ночных горшков считать, а это чистейшая МАТЕМАТИКА, для решения задач которой есть соответствующие инструменты. имхо
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

JohnSUN

В общем, если действительно свести задачу к перебору всех возможных целочисленных значений X(i), то это просто пачка вложенных циклов с проверкой тождества в самой глубине... Не увлекает:много ручной писанины ради предсказуемого результата

[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

E.O.

Цитата: JohnSUN от 26 ноября 2013, 15:17много ручной писанины ради предсказуемого результата
Спасибо, это именно то, что требовалось

VlhOwn

Цитата: JohnSUN от 26 ноября 2013, 16:17
В общем, если действительно свести задачу к перебору всех возможных целочисленных значений X(i), то это просто пачка вложенных циклов с проверкой тождества в самой глубине... Не увлекает:много ручной писанины ради предсказуемого результата

Ну, количество ручной писанины можно несколько сократить.

Сначала рассмотрим задачу нахождения всех целочисленных корней уравнения ax+T=b, где x - неизвестная, a и b - константы, а T целочисленно изменяется в диапазоне от Tmin до Tmax.
Очевидно, что искомый результат получится, если разделить все целые числа диапазона [b-Tmax,b-Tmin] на a и отфильтровать целые.

Теперь представим наше уравнение в виде системы
k1*x1+Y=0
k2*x2+...kn*xn=Y

Очевидно, что Y целочисленно изменяется от значения Ymin = для всех ki>0 сумма ki*min(xi) + для всех ki<0 сумма ki*max(xi) до значения Ymax=для всех ki<0 сумма ki*min(xi) + для всех ki>0 сумма ki*max(xi)
Тогда первое уравнение мы решать умеем, а второе - рекурсивный вызов исходной процедуры в цикле по значениям Y.

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

kompilainenn

Цитата: VlhOwn от 28 ноября 2013, 21:49что считать эта программа будет быстрее
программа! отдельная желательно, а не как не табличный процессор...
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут