Mathemat wrote:
P.S. Кажется, я начинаю понимать, что вычисление определителя
через миноры низших порядков - и правда задачка не по зубам чистому
MQL4...
Дело не в МКЛ: в количестве и "вычислительной стоимости"
операций - очень много операций деления для которых нужно держать
максимально возможную точность представления чисел (в С это
double, long double) иначе все заканчивается потерей точности, а не получением
результата. На 1990 год вообще не существовало компьютеров способных
в конечный период времени (менее тысячелетия, если не ошибаюсь)
решать этим методом системы порядка выше 10 (цифры примерные
- сейчас уже точно не помню, а лазить по старым лекциям лень).
Вы это легко найдете в любом профессиональном курсе по численным
методам.
В тоже время для реализации МКЭ (метод конечных элементов) мы
( кафедра Динамики и прочности машин. кафедра Прикладной математики
Харьковского Политеха - тогда еще там работал) решали ситемы
свыше 64К степеней свободы - там правда симметричные матрицы
и разряженные (то есть не полностью заполненные), что несколько
снижает требования к железу :).
Возьмите Гаусса с выбором главного элемента и получите нормальный
метод - лучше пока ничего нет. Еще раз повторюсь - ранги матриц
проверяйте.
Успехов.
ЗЫ Эксел решает методом Ньютона(если не ошибаюсь). Это итерационный
метод, более дорогостоящий в плане вычислительных затрат, но
более и универсальный - подходит не только для СЛАУ.
Спасибо, VladislavVG. У меня такой вопрос к Вам. Может ли при выборе метода решения
как-то помочь тот факт, что все коэффициенты и свободные члены
положительны и имеют небольшой разброс (ну, скажем, не более
15-20%)? Я понимаю, что есть вероятность слабой обусловленности
матрицы. Вот потому и спрашиваю: Гаусс с выбором гл. элемента
в этом случае адекватен - или лучше что-нибудь итерационное?
На 1990 год вообще не существовало компьютеров способных в конечный
период времени (менее тысячелетия, если не ошибаюсь) решать
этим методом системы порядка выше 10
Вы не ошиблись порядком? Уж больно маленькая циферка (правда,
и год древний совсем для ЭВМ)...
Mathemat:
Спасибо, VladislavVG. У меня такой вопрос к Вам. Может ли при выборе метода решения
как-то помочь тот факт, что все коэффициенты и свободные члены
положительны и имеют небольшой разброс (ну, скажем, не более
15-20%)? Я понимаю, что есть вероятность слабой обусловленности
матрицы. Вот потому и спрашиваю: Гаусс с выбором гл. элемента
в этом случае адекватен - или лучше что-нибудь итерационное?
На 1990 год вообще не существовало компьютеров способных в конечный
период времени (менее тысячелетия, если не ошибаюсь) решать
этим методом системы порядка выше 10
Вы не ошиблись порядком? Уж больно маленькая циферка (правда,
и год древний совсем для ЭВМ)...
Помочь может - вероятность работоспособности метода без выбора
главного элемента (если брать Гаусса) возрастает. Но там, в методе
с выбором, добавляется один иф и один цикл перестановок, что
на скорость работы метода в целом (по сравнению с временем, необходимым
для прямого и обратного хода) не существенно влияет. Но зато
при совместных матрицах Вы 100% получите точное решение.
По поводу итерационных методов - не думаю, лучше возьмите Гаусса.
Для того круга задач вполне и решение дает точное.
По поводу порядков - если и ошибся то не сильно. Кстати не факт,
что сейчас машины позволяют решать намного большие задачи этим
методом - там при возрастании порядка матрицы степенная (точнее,
факториальная) зависимость количества операций. Условно: если
тогда пороговая величина была 10, то сейчас 11-12, что, согласитесь,
весьма немного.
Спасибо, chv, за кучу умных буковок, с налёту ниасилить :) Будем разбираться, попробуем приложить ее к своей системе, которая вполне может оказаться плохо обусловленной. (В каждом уравнении системы все коэффициенты мало отличаются друг от друга, включая и свободный член.)
P.S. Сам пытаюсь сотворить итерационный алгоритм по очень простой геометрической идее. Грубо говоря: выбираем произвольную точку в пространстве решений и строим от нее "перпендикуляры" ко всем гиперплоскостям, соответствующим уравнениям системы. Затем берем среднее арифметическое всех полученных векторов и получаем новую исходную точку, от которой снова строим "перпендикуляры". Оценка точности - по норме вектора ошибки между значением левой части системы в полученной точке и вектором свободного столбца. Так как над матрицей исходной системы мы при этом не производим никаких преобразований, то есть надежда, что процесс должен сходиться к решению независимо от степени обусловленности матрицы системы. Скорость сходимости, начиная с некоторого момента, похоже, стремится к экспоненциальной, хотя показатель экспоненты может не сильно отличаться от единицы, особенно если все гиперплоскости почти параллельны (т.е. система плохо обусловлена).
Получится - погоняю и сравню. У Вас, как я понял, Гаусс с выбором главного элемента?
Я наткнулся на этот интеловский пакет после усердного поиска
оптимизированных-по-скорости алгоритмов для разных математических
проблем. Например, я нашёл следующее сравнение БПФ алгоритмов,
в котором интеловский оказался победителем
Получится - погоняю и сравню. У Вас, как я понял, Гаусс с выбором
главного элемента?
Не могу 100% утверждать, не помню точно определение алгоритма
Гаусса, но похоже, что так. Здесь матрица последовательно сводится
к диагональной, и в обрабатываемом столбце выбирается элемент,
максимальный по модулю. Как я помню из курса линейной алгебры,
такой метод помогает в нахождении устойчивого решения. Хотя,
как уже писал, после 12-15 порядка матрицы оно всё равно "расползалось",
слишком велик был разброс порядков чисел в матрице после сведения
к диагонали.
Я вот сколько не думал так и не смог придумать куда можно ввернуть метод решения системы линейных уровнения ? Разве что только для метода наименьших квадратов только. Просветите пожалуйста, а то уж больно интересно =)
chv wrote:
Хотя, как уже писал, после 12-15 порядка матрицы оно всё равно "расползалось",
слишком велик был разброс порядков чисел в матрице после сведения
к диагонали.
Я в своих экспериментах предполагаю решать системы с порядком
матрицы до сотни (ну как минимум до нескольких десятков), которая
к тому же может быть хило обусловленной. Поэтому интенсивные
преобразования матрицы нецелесообразны, вот я и ищу нечто устойчивое.
Симплекс-метод вспомнить, что ли? Не зря ведь за него Нобеля
дали...
2 shobvas: например, в индикаторе полиномиальной регрессии в Code Base (см.
код индикатора). Или в НС, состоящей из одного перцептрона с
линейной функцией активации. Или в генетическом алгоритме с
линейной аппроксимирующей функцией. Вообще говоря, к рынкету
можно что угодно применить, совсем не обязательно зацикливаться
на стандартных фильтрах и осцилляторах. Просто сам метод должен
иметь статистическое основание для применения... А твой ник
мне нравится :)
P.S. Кажется, я начинаю понимать, что вычисление определителя через миноры низших порядков - и правда задачка не по зубам чистому MQL4...
В тоже время для реализации МКЭ (метод конечных элементов) мы ( кафедра Динамики и прочности машин. кафедра Прикладной математики Харьковского Политеха - тогда еще там работал) решали ситемы свыше 64К степеней свободы - там правда симметричные матрицы и разряженные (то есть не полностью заполненные), что несколько снижает требования к железу :).
Возьмите Гаусса с выбором главного элемента и получите нормальный метод - лучше пока ничего нет. Еще раз повторюсь - ранги матриц проверяйте.
Успехов.
ЗЫ Эксел решает методом Ньютона(если не ошибаюсь). Это итерационный метод, более дорогостоящий в плане вычислительных затрат, но более и универсальный - подходит не только для СЛАУ.
На 1990 год вообще не существовало компьютеров способных в конечный период времени (менее тысячелетия, если не ошибаюсь) решать этим методом системы порядка выше 10
Вы не ошиблись порядком? Уж больно маленькая циферка (правда, и год древний совсем для ЭВМ)...
Спасибо, VladislavVG. У меня такой вопрос к Вам. Может ли при выборе метода решения как-то помочь тот факт, что все коэффициенты и свободные члены положительны и имеют небольшой разброс (ну, скажем, не более 15-20%)? Я понимаю, что есть вероятность слабой обусловленности матрицы. Вот потому и спрашиваю: Гаусс с выбором гл. элемента в этом случае адекватен - или лучше что-нибудь итерационное?
На 1990 год вообще не существовало компьютеров способных в конечный период времени (менее тысячелетия, если не ошибаюсь) решать этим методом системы порядка выше 10
Вы не ошиблись порядком? Уж больно маленькая циферка (правда, и год древний совсем для ЭВМ)...
По поводу итерационных методов - не думаю, лучше возьмите Гаусса. Для того круга задач вполне и решение дает точное.
По поводу порядков - если и ошибся то не сильно. Кстати не факт, что сейчас машины позволяют решать намного большие задачи этим методом - там при возрастании порядка матрицы степенная (точнее, факториальная) зависимость количества операций. Условно: если тогда пороговая величина была 10, то сейчас 11-12, что, согласитесь, весьма немного.
Успехов.
И вызов решения:
Спасибо, chv, за кучу умных буковок, с налёту ниасилить :) Будем разбираться, попробуем приложить ее к своей системе, которая вполне может оказаться плохо обусловленной. (В каждом уравнении системы все коэффициенты мало отличаются друг от друга, включая и свободный член.)
P.S. Сам пытаюсь сотворить итерационный алгоритм по очень простой геометрической идее. Грубо говоря: выбираем произвольную точку в пространстве решений и строим от нее "перпендикуляры" ко всем гиперплоскостям, соответствующим уравнениям системы. Затем берем среднее арифметическое всех полученных векторов и получаем новую исходную точку, от которой снова строим "перпендикуляры". Оценка точности - по норме вектора ошибки между значением левой части системы в полученной точке и вектором свободного столбца. Так как над матрицей исходной системы мы при этом не производим никаких преобразований, то есть надежда, что процесс должен сходиться к решению независимо от степени обусловленности матрицы системы. Скорость сходимости, начиная с некоторого момента, похоже, стремится к экспоненциальной, хотя показатель экспоненты может не сильно отличаться от единицы, особенно если все гиперплоскости почти параллельны (т.е. система плохо обусловлена).
Получится - погоняю и сравню. У Вас, как я понял, Гаусс с выбором главного элемента?
http://www.intel.com/cd/software/products/asmo-na/eng/307757.htm
Я наткнулся на этот интеловский пакет после усердного поиска оптимизированных-по-скорости алгоритмов для разных математических проблем. Например, я нашёл следующее сравнение БПФ алгоритмов, в котором интеловский оказался победителем
http://www.fftw.org/speed/
Я скачал демо версию. Есть исходники кода, но всё по частям и разбросано.
Получится - погоняю и сравню. У Вас, как я понял, Гаусс с выбором главного элемента?
Не могу 100% утверждать, не помню точно определение алгоритма Гаусса, но похоже, что так. Здесь матрица последовательно сводится к диагональной, и в обрабатываемом столбце выбирается элемент, максимальный по модулю. Как я помню из курса линейной алгебры, такой метод помогает в нахождении устойчивого решения. Хотя, как уже писал, после 12-15 порядка матрицы оно всё равно "расползалось", слишком велик был разброс порядков чисел в матрице после сведения к диагонали.
Драсьте Всем!
Я вот сколько не думал так и не смог придумать куда можно ввернуть метод решения системы линейных уровнения ?
Разве что только для метода наименьших квадратов только.
Просветите пожалуйста, а то уж больно интересно =)
Хотя, как уже писал, после 12-15 порядка матрицы оно всё равно "расползалось", слишком велик был разброс порядков чисел в матрице после сведения к диагонали.
Я в своих экспериментах предполагаю решать системы с порядком матрицы до сотни (ну как минимум до нескольких десятков), которая к тому же может быть хило обусловленной. Поэтому интенсивные преобразования матрицы нецелесообразны, вот я и ищу нечто устойчивое. Симплекс-метод вспомнить, что ли? Не зря ведь за него Нобеля дали...
2 shobvas: например, в индикаторе полиномиальной регрессии в Code Base (см. код индикатора). Или в НС, состоящей из одного перцептрона с линейной функцией активации. Или в генетическом алгоритме с линейной аппроксимирующей функцией. Вообще говоря, к рынкету можно что угодно применить, совсем не обязательно зацикливаться на стандартных фильтрах и осцилляторах. Просто сам метод должен иметь статистическое основание для применения... А твой ник мне нравится :)