Задача для любознательных программистов

 
Задача заключается в том, чтобы попробовать найти автоматический способ нахождения вида формул для определения коэффициентов линейного уравнения множественной регрессии вида у = а0 + а1х1 + а2х2 + а3х3 + а4х4 + ... + anxn по логике, приведенной мною  здесь  https://www.mql5.com/ru/forum/86249/page3 . Для случаев до n=4 формулы найдены "ручным" способом. Нужна программа генерации формул для общего случая n=N. Для начала нужно найти для случая N=5. Если получится, то, будем увеличивать N до 50 (количество валютных пар) и более. Предположу, что, если удастся осуществить задуманное, то, это будет достойным вкладом в решении одной из сложных задач прикладной математики и поможет исследователям во многих отраслях науки и техники, включая исследование рынка.
Назовите 4 фактора, от которых, на Ваш взгляд, зависит цена
Назовите 4 фактора, от которых, на Ваш взгляд, зависит цена
  • www.mql5.com
Уважаемые форумчане, назовите, пожалуйста, 4 фактора, от которых на Ваш взгляд, зависит уровень цены...
 

Что значит "определение ВИДА формул" ? Насколько я понимаю, вид формулы задается, исходя из логических соображений. И потом, если есть разные формулы - можно проверить, какая из них ближе аппроксимирует исходную последовательность.

В указанном посте - дана система из N уравнений с N неизвестными, которая решается стандартными способами - нахождением обратной матрицы, и умножением ее на вектор результатов. Задача - чисто вычислительная, но вид формулы уже задан изначально. (Те длинные формулы, что там предложены - вроде, на первый взгляд, правильны, но зачем так усложнять стандартное решение ?)

А как можно вид формулы найти автоматически ?

 
George Merts:

Что значит "определение ВИДА формул" ? Насколько я понимаю, вид формулы задается, исходя из логических соображений. И потом, если есть разные формулы - можно проверить, какая из них ближе аппроксимирует исходную последовательность.

В указанном посте - дана система из N уравнений с N неизвестными, которая решается стандартными способами - нахождением обратной матрицы, и умножением ее на вектор результатов. Задача - чисто вычислительная, но вид формулы уже задан изначально. (Те длинные формулы, что там предложены - вроде, на первый взгляд, правильны, но зачем так усложнять стандартное решение ?)

А как можно вид формулы найти автоматически ?

Вид формул для случая n=4 приведены в указанном примере. Хотя общая логика их нахождения известна, чрезвычайно трудно находить вручную в каждом конкретном случае. На счет использования матриц - это чрезвычайно трудоемкий процесс - имеет сложность 3-го порядка https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9A%D1%80%D0%B0%D0%BC%D0%B5%D1%80%D0%B0

Процесс определения вида формул предполагает использовать циклы по определенной логике. Вот эти циклы нужно находить, если говорить образно. Формулы для случая N=3 очень похожи на случай с N=4. Нужно попытаться найти общий алгоритм составления этих формул. 

 
Yousufkhodja Sultonov:

...

использования матриц - это чрезвычайно трудоемкий процесс - имеет сложность 3-го порядка https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9A%D1%80%D0%B0%D0%BC%D0%B5%D1%80%D0%B0

...

Тем не менее, изучить существующее на много легче, чем изобретать новое велосипед. В кодабазе есть библиотеки по работе с матрицами, в том числе даже непосредственно с примером решения системы методом Крамера.
 
Yousufkhodja Sultonov:

Вид формул для случая n=4 приведены в указанном примере. Хотя общая логика их нахождения известна, чрезвычайно трудно находить вручную в каждом конкретном случае. На счет использования матриц - это чрезвычайно трудоемкий процесс - имеет сложность 3-го порядка https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9A%D1%80%D0%B0%D0%BC%D0%B5%D1%80%D0%B0

Процесс определения вида формул предполагает использовать циклы по определенной логике. Вот эти циклы нужно находить, если говорить образно. Формулы для случая N=3 очень похожи на случай с N=4. Нужно попытаться найти общий алгоритм составления этих формул. 

Не вижу ничего особо сложного. Указанный пример - легко расширяется хоть на N=10 хоть на N=50, смысл-то один и тот же - подставляй значения сумм для всех переменных, и решай себе матрицу.

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

И насчет "чрезвычайно сложного процесса", боюсь, вы погорячились - Excel c легкостью решает системы уравнений, где N=10 (думаю, без проблем решил бы и больше - я просто не проболвал)


Но вы ж говорите про "вид формул" - а в них могут быть и експоненты, и логарифмы, и обратные величины, и любые их комбинации всех вариантов переменных - все "охватить" невозможно. Поэтому, обычно, выводятся некоторые формулы, исходя из логики, а уже потом - они расширяются на N неизвестных и решаются. В данном случае - исходя, из четырех неизвестных - я не вижу проблем расширить эту систему на столько уравнений, сколько требуется.  

 
George Merts:

Не вижу ничего особо сложного. Указанный пример - легко расширяется хоть на N=10 хоть на N=50, смысл-то один и тот же - подставляй значения сумм для всех переменных, и решай себе матрицу.

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

И насчет "чрезвычайно сложного процесса", боюсь, вы погорячились - Excel c легкостью решает системы уравнений, где N=10 (думаю, без проблем решил бы и больше - я просто не проболвал)


Но вы ж говорите про "вид формул" - а в них могут быть и експоненты, и логарифмы, и обратные величины, и любые их комбинации всех вариантов переменных - все "охватить" невозможно. Поэтому, обычно, выводятся некоторые формулы, исходя из логики, а уже потом - они расширяются на N неизвестных и решаются. В данном случае - исходя, из четырех неизвестных - я не вижу проблем расширить эту систему на столько уравнений, сколько требуется.  

Вид формул. в Вашем понимании, не меняются. Меняется "длина" и количество этих формул с увеличением N.
 
Yousufkhodja Sultonov:
Вид формул. в Вашем понимании, не меняются. Меняется "длина" и количество этих формул с увеличением N.

Именно.

Если задаться указанными формулами - в задаче ничего сложного нет. Увеличивай себе N до 50, подсчитывай 2500 сумм-коэффициентов при а(i) и значение 50 свободных членов, запускай нахождение обратной матрицы, умножай на вектор результатов - и получай вектор  a(i)

 

Сходил в Википедию и удивился тому, что одинаковые по смыслу величины там и в https://www.mql5.com/ru/forum/86249/page3 (*) обозначены одинаково (V, C).

https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B8%D1%85_%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%BE%D0%B2

Сами формулы  в начале (*) дают скалярную запись основного уравнения метода наименьших квадратов, матричное равенство перед словами

"Если в модель включена константа (как обычно)",

а дальше в (*) опять идет скалярная расшифровка матричной записи решения (после этих слов) , причем с наводящим на размышления совпадением обозначений.

"Это мой ответ Гауссу и Крамеру, которые не смогли или не посчитали нужным, найти такой прямой метод определения коэффициентов системы линейных уравнений." - а что с ним делать?

Как любознательный программист, могу сказать, что линейная алгебра, и особенно в части, пригодной в методе наименьших квадратов, давным-давно располосована на алгоритмы, удобные в тех или иных случаях. Уже для ЭВМ Единой Серии (ЕС 1022, 1970-е - копия IBM 360) имелась белорусская библиотека научных программ для Фортрана с употребительными в МНК функциями. Размерность задачи n в них задавалась значением входной переменной, вся сложность заключалась в подготовке массивов исходных данных. Длиннющие формулы некуда складывать, гораздо удобнее и надежнее использовать их матричную запись. У Гаусса и Крамера, не сомневайтесь, были и скалярные формулы для решения систем линейных алгебраических уравнений методом исключения (методом Гаусса, он называется прямым в отличие от итерационных методов), а ведь именно этот метод в (*) и дает "прямые" формулы.

Не вижу никакого смысла выписывать громоздкие формулы в скалярном виде. В матричном, векторном они гораздо нагляднее и чрезвычайно компактнее, отражают смысл. О том, что скалярное их расписывание не даст новых знаний, думаю, говорить не нужно.

Метод наименьших квадратов — Википедия
  • ru.wikipedia.org
Метод наименьших квадратов (МНК, англ.  ) — математический метод, применяемый для решения различных задач, основанный на минимизации суммы квадратов отклонений некоторых функций от искомых переменных. Он может использоваться для «решения» переопределенных систем уравнений (когда количество уравнений превышает количество неизвестных), для поиска...
 
Vladimir:
 

Сами формулы  в начале (*) дают скалярную запись основного уравнения метода наименьших квадратов, матричное равенство перед словами

....

Не вижу никакого смысла выписывать громоздкие формулы в скалярном виде. В матричном, векторном они гораздо нагляднее и чрезвычайно компактнее, отражают смысл. О том, что скалярное их расписывание не даст новых знаний, думаю, говорить не нужно.

Да я вобще не пойму, в чем проблема у автора. В исходной задаче предлагается совершенно обычная линейная многомерная регрессия. Все формулы для нее давно известны, и ничего нового автор не внес - просто "расписал" матричную запись в конкретные действия, но для решения задачи - все это лишнее, поскольку ничуть не уменьшает сложности алгоритма решения. Берем готовые алгоритмы из ALGLIB, а наша задача заключается только в том, чтобы подготовить для них массив данных, и потом сохранить результаты вычислений.

Что еще не так, что хочет еще Yousufkhodja Sultonov - мне не понятно.

Причина обращения: