Решение СЛАУ

Тема в разделе "WASM.A&O", создана пользователем _qwe8013, 8 окт 2017.

  1. _qwe8013

    _qwe8013 Member

    Публикаций:
    2
    Регистрация:
    30 ноя 2016
    Сообщения:
    90
    Есть функция [math]f:\mathbb{R}^n\to\mathbb{R}[/math], но сама она не задана, а задан конечный набор точек и значений функции в них. Понадобилось мне тут посчитать частные производные этой функции в данных точках. Для этого я решил интерполировать точку и соседние с ней полиномом второй степени, а потом взять от него частные производные. (Если есть способ получше - напишите) Для интерполяции нужно решить систему линейных уравнений, причём если [math]n[/math] - количество переменных функции [math]f[/math], то порядок матрицы будет [math]\frac{(n+1)\cdot(n+2)}{2}[/math]. Так как большинство итерационных методов хорошо работают с симметричными положительно определёнными матрицами, то я умножил обе части системы линейных уравнений на транспонированную матрицу коэффициентов (решение, очевидно не поменяется). Далее решил систему одним из итерационных методов:
    [math] \begin{cases} \tau=\frac{1}{MatrixSize^2}\\ \vec{a}^{k+1}=-\tau(Aa^k-b)+a^k \end{cases} [/math]
    где [math]A[/math] - симметричная матрица, [math]\vec{a}[/math] - искомый вектор коэффициентов полинома. Останавливаю итерации, когда норма разности [math]\|\vec{a}^k-\vec{a}^{k+1}\|[/math] становится достаточно малой. Для проверки решил сравнить значение полинома в узлах интерполяции с исходными данными, и получил больше ошибки при [math]n[/math] порядка двадцати. Кто-нибудь знает, как с этими ошибками бороться?

    PS
    Да, вообще-то мне нужны производные, а значения функции уже даны, но раз получается такое противоречие, возможно и производные будут неправильными.
     
  2. SadKo

    SadKo Владимир Садовников

    Публикаций:
    1
    Регистрация:
    4 июн 2007
    Сообщения:
    1.096
    Адрес:
    г. Санкт-Петербург
    Погодите-погодите, у вас функция n-го порядка, как вы её интерполировать полиномом второй степени собрались?

    Да, в принципе, способа-то лучше нет, если вы не знаете изначально как задана ваша функция или не имеете хотя бы её график. Между имеющимися у вас в наличии точками могут быть и разрывы, и резкие пики/провалы, и уходы в бесконечность. Поэтому интерполяция - лишь процесс замещения функции похожей, но более простой функцией.

    Уже плохо. Чем больше порядок матрицы - тем быстрее растёт ошибка (она здесь не аддитивная, а мультипликативная). Вы получили инверсную матрицу - у вас уже ошибка. Потом эту матрицу помножили на систему и получили дополнительную ошибку.

    Попробуйте решить вашу матрицу методом Гаусса: http://mathprofi.ru/metod_gaussa_dlya_chainikov.html
     
  3. SadKo

    SadKo Владимир Садовников

    Публикаций:
    1
    Регистрация:
    4 июн 2007
    Сообщения:
    1.096
    Адрес:
    г. Санкт-Петербург
    Ещё глянул на всякий случай описание метода Гаусса в википедии: https://ru.wikipedia.org/wiki/Метод_Гаусса
    Цитата:
    Помимо аналитического решения СЛАУ, метод Гаусса также применяется для:
    • нахождения матрицы, обратной к данной (к матрице справа приписывается единичная такого же размера, что и исходная: [​IMG], после чего [​IMG] приводится к виду единичной матрицы методом Гаусса—Жордана; в результате на месте изначальной единичной матрицы справа оказывается обратная к исходной матрица: [​IMG];
    • определения ранга матрицы (согласно следствию из теоремы Кронекера—Капелли ранг матрицы равен числу её главных переменных);
    • численного решения СЛАУ в технических приложениях (для уменьшения погрешности вычислений используется Метод Гаусса с выделением главного элемента, суть которого заключена в том, чтобы на каждом шаге в качестве главной переменной выбирать ту, при которой среди оставшихся после вычёркивания очередных строк и столбцов стоит максимальный по модулю коэффициент).
     
  4. _qwe8013

    _qwe8013 Member

    Публикаций:
    2
    Регистрация:
    30 ноя 2016
    Сообщения:
    90
    А что мешает?
    Обратную матрицу я не считал, я считал транспонированную. Хотя действительно, я проверил, ошибка нарастает из-за симметризации.
    Метод Гаусса не позволяет контролировать погрешность вычислений, при маленьких порядках матрицы это будет незаметно, но при больших - ошибка будет большой (даже с выделением главного элемента).
     
  5. Pavia

    Pavia Active Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.162
    Адрес:
    Fryazino
    SadKo, Гауса не применяют у него ошибка растёт. Метод ведущего элемента пригоден для матри N=7-10. Для матриц до 100 применяют метод SVD разложение к примеру методу Гивенса-Якоби
    АКАДЕМИЯ НАУК СССР СИБИРСКОЕ ОТДЕЛЕНИЕ ИНСТИТУТ МАТЕМАТИКИ
    Гарантированная ТОЧНОСТЬ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ
    в евклидовых пространствах
    Ответственный редактор доктор физико-математических наук
    В. А. Булавский НОВОСИБИРСК «НАУК А» СИБИРСКОЕ ОТДЕЛЕНИЕ 1988



    _qwe8013,
    C dx,dy - выгнали к нам пришли?
    По поводу недопустимости интерполяции многочленом 2-ой степени читаем:
    Каханер, Моулер, Наш.-Численные методы и программное обеспечение-Мир (1998)

    А интерполировать надо сплайнами либо обратным взвешенным расстоянием. Причём второе гораздо проще. И вообще для выбора интерполяции, но надо знать как ваша функция выглядит.