Есть функция [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 Да, вообще-то мне нужны производные, а значения функции уже даны, но раз получается такое противоречие, возможно и производные будут неправильными.
Погодите-погодите, у вас функция n-го порядка, как вы её интерполировать полиномом второй степени собрались? Да, в принципе, способа-то лучше нет, если вы не знаете изначально как задана ваша функция или не имеете хотя бы её график. Между имеющимися у вас в наличии точками могут быть и разрывы, и резкие пики/провалы, и уходы в бесконечность. Поэтому интерполяция - лишь процесс замещения функции похожей, но более простой функцией. Уже плохо. Чем больше порядок матрицы - тем быстрее растёт ошибка (она здесь не аддитивная, а мультипликативная). Вы получили инверсную матрицу - у вас уже ошибка. Потом эту матрицу помножили на систему и получили дополнительную ошибку. Попробуйте решить вашу матрицу методом Гаусса: http://mathprofi.ru/metod_gaussa_dlya_chainikov.html
Ещё глянул на всякий случай описание метода Гаусса в википедии: https://ru.wikipedia.org/wiki/Метод_Гаусса Цитата: Помимо аналитического решения СЛАУ, метод Гаусса также применяется для: нахождения матрицы, обратной к данной (к матрице справа приписывается единичная такого же размера, что и исходная: , после чего приводится к виду единичной матрицы методом Гаусса—Жордана; в результате на месте изначальной единичной матрицы справа оказывается обратная к исходной матрица: ; определения ранга матрицы (согласно следствию из теоремы Кронекера—Капелли ранг матрицы равен числу её главных переменных); численного решения СЛАУ в технических приложениях (для уменьшения погрешности вычислений используется Метод Гаусса с выделением главного элемента, суть которого заключена в том, чтобы на каждом шаге в качестве главной переменной выбирать ту, при которой среди оставшихся после вычёркивания очередных строк и столбцов стоит максимальный по модулю коэффициент).
А что мешает? Обратную матрицу я не считал, я считал транспонированную. Хотя действительно, я проверил, ошибка нарастает из-за симметризации. Метод Гаусса не позволяет контролировать погрешность вычислений, при маленьких порядках матрицы это будет незаметно, но при больших - ошибка будет большой (даже с выделением главного элемента).
SadKo, Гауса не применяют у него ошибка растёт. Метод ведущего элемента пригоден для матри N=7-10. Для матриц до 100 применяют метод SVD разложение к примеру методу Гивенса-Якоби АКАДЕМИЯ НАУК СССР СИБИРСКОЕ ОТДЕЛЕНИЕ ИНСТИТУТ МАТЕМАТИКИ Гарантированная ТОЧНОСТЬ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ в евклидовых пространствах Ответственный редактор доктор физико-математических наук В. А. Булавский НОВОСИБИРСК «НАУК А» СИБИРСКОЕ ОТДЕЛЕНИЕ 1988 _qwe8013, C dx,dy - выгнали к нам пришли? По поводу недопустимости интерполяции многочленом 2-ой степени читаем: Каханер, Моулер, Наш.-Численные методы и программное обеспечение-Мир (1998) А интерполировать надо сплайнами либо обратным взвешенным расстоянием. Причём второе гораздо проще. И вообще для выбора интерполяции, но надо знать как ваша функция выглядит.
На dxdy профессиональные недоучки не знают своей области (т.е. классического анализа с теорией де Рама, языком расслоений и связностей), не говоря уже о высших разделах алгебры. Как-то несколько лет назад задавал там вопрос о пространствах Римана-Роха и алгебро-геометрических кодах на алгебраических кривых. Мне там никто не ответил. Зато треды про интегральчики там взлетают на отлично.
Aoizora, На dxdy не здоровая атмосфера была, нельзя было ничего спросить и получить ответ, сразу банили, если что то не соответствует классике. За вопрос про корреляции ТО сразу бан. Лучше туда не ходить.