Я пытаюсь решить уравнение типа:
Где имеет простой полюс в для наименьших собственных значений и собственных векторов. Граничные условия: и , и я только смотрю на функцию над .
Однако, если я сделаю очень простой, равномерно распределенный метод конечных разностей, наименьшее собственное значение будет очень неточным (иногда встречается «ложное» собственное значение, которое на несколько порядков более отрицательное, чем то, которое, как я знаю, должно быть), реальное «первое собственное значение» становится вторым, но все еще бедно).
Что влияет на точность такой конечно-разностной схемы? Я предполагаю, что именно сингулярность является причиной проблемы, и что неравномерно распределенная сетка могла бы значительно улучшить ситуацию, есть ли какие-либо статьи, которые могут указать мне на хороший неоднородный метод конечных разностей? Но, возможно, схема разности более высокого порядка улучшит это больше? Как вы решаете (или это просто "попробуй и посмотри")
примечание: моя схема конечных разностей является симметричной трехугольной, где 3 диагонали:
Где - интервал сетки. И я решаю матрицу, используя прямой симметричный решатель (я предполагаю, что решатель не сильно влияет на точность, я ошибаюсь?)
источник
Ответы:
Если вы хотите повысить точность схемы конечных разностей, вы всегда можете попробовать увеличить степень вашего трафарета. В эквидистантных точках это может привести к численной нестабильности. Чтобы избежать этих проблем и при этом получить высокую точность, я бы предложил использовать спектральные методы .
Если ваша проблема имеет фиксированные полюса, вы можете попытаться обойти их, разделив свой домен и решив две связанные проблемы.
Система Chebfun (отказ от ответственности: одним из разработчиков которой я являюсь) использует вышеупомянутые методы, и вы могли бы быстро развернуть свою проблему вf(x)
chebgui
интерфейсе. Я бы попробовал сам, но я не знаю, какой у вас домен или .Я прикрепил скриншот−u′′(x)−u(x)x=λu [−1,1]
chebgui
окна для вычисления первых шести собственных значений и собственных мод на .Обновить
Если вы хотите решить эту проблему, не вдаваясь в подробности об Chebfun, все детали должны быть в главе 9 книги Ника Трефетена « Спектральные методы в Matlab ».
источник
Один из способов быстро улучшить ситуацию (хотя, вероятно, не намного лучше) - рассмотреть сходство используемых вами методов конечных разностей самого низкого порядка и метода конечных элементов самого низкого порядка. Если вы вычисляете трехдиагональную матрицу, полученную при использовании линейных функций формы конечных элементов в 1d, то дискретизация вторых производных будет выглядеть точно так же (до фактора но вы получите другой термин для того, что происходит от . Я не знаю, как выглядит в вашем случае, но где сейчас вы используете , вместо этого это будет что-то вроде гдеΔx f(x)ψ(x) f(x) f(xi) ∫xi+1xi−1f(x)φi(x) φi(x) это функция шляпы, которая достигает максимума в . Если достаточно прост, то вы можете точно вычислить этот интеграл, и он предоставит более точную матрицу, из которой вы должны найти собственное значение.xi f(x)
Конечно, если вы уже используете конечные элементы, вы также можете инвестировать в использование элементов более высокого порядка, которые не намного сложнее в 1d.
источник