Можете объяснить, почему вы приравниваете производную от x1 по a к значению x1 из модели? У них даже размерность разная. Почему вы игнорируете вторую компоненту решения, хотя она явно фигурирует в МНК?
У вас нет шума, метод Рунге-Кутты, который вы используете, дает 6-7 верных знаков при стандартных настройках. В моем понимании, оценка для а должна с самого начала совпадать с точным значением (с теми же 6-7 верными знаками). Возможно (пальцем в небо), проблема в том, что вы сравниваете численное решение с аналитическим в разных точках. Метод сравнения мне кажется очень странным, вы сравниваете два решения всего лишь в одной точке (текущей) и по этой точке оцениваете параметр. На мой взгляд, с шумом это будет работать крайне плохо. Более логично сравнивать, например, интеграл квадрата отклонения за весь промежуток времени. Хотя я бы сравнивал локальные куски решения (например, в окрестности текущего момента времени), либо вообще подставлял траекторию в диффур и искал МНК оценку для а.
. У вас параметр a оценивается непрерывно во времени? Или когда уже известны обе траектории — модельная и фактическая? Почему такая значительная ошибка в определении а, если шума у вас нет? Самую интересную часть спрятали в код.
А с чем в Матлабе сравнивали? Я помню там есть PDEToolbox, но он конечно-элементный, а не конечно-разностный. У вас же на картинках из Матлаба явно результаты расчета какого-то конечно-объемного метода.
А для проверки критичности кросс-диффузии попробуйте сетку сильно растянуть по одной координате и запустить просто с точечным начальным условием. В моем понимании, вместо кругового пятна у вас получится эллиптическое.
Ваше утверждение про точность в четвертом знаке неверно. Ошибка аппроксимации данной схемы — , константа устойчивости — единица. Очевидно, что ошибка не фиксирована, она зависит от гладкости решения. Похоже, что о зануднсти вычислительной математики вы судите исключительно из своего опыта.
А как обстоит дело с более сложными областями, в которых расщепление переменных не работает? Например, решить уравнение Лапласа в области Polygon[{{0, 0}, {0, 1}, {3, 3}, {1, 0}}]. А в качестве общего решения уравнения Лапласа Математика по-прежнему выдает C1[x + I y] + C2[x - I y]?
Я лишь говорю, что ваш алгоритм соответствует по сложности алгоритму работы с денормализованными числами в IEEE. В любом случае, без сравнения конкретных алгоритмов или их железной реализации, это лишь впечатление, которое может быть неверным.
Поставили бы они лучше зеркальный модулятор в фокальную плоскость вместо рассеивающей пластинки — было бы больше похоже на оптический сопроцессор, а это непонятно что. Много ли задач полагается на умножение на случайную матрицу?
В одномерной теплопроводности у вас не осцилляции, а обычная неустойчивость от большого шага по времени. Проверьте условие Куранта, скорее всего, оно у вас нарушено. Осцилляциями обычно называют немонотонность численного решения при сохранении устойчивости.
А для проверки критичности кросс-диффузии попробуйте сетку сильно растянуть по одной координате и запустить просто с точечным начальным условием. В моем понимании, вместо кругового пятна у вас получится эллиптическое.
C1[x + I y] + C2[x - I y]?