Как реализовать обратное преобразование Лапласа в JavaScript?

Я пишу апплет javascript, чтобы другим было легко увидеть, как работает система с пропорциональным контроллером и без него и каковы результаты.

Сначала небольшое пояснение к апплету (Вы можете пропустить это, если хотите, реальный вопрос в последнем абзаце.):

Мне удалось реализовать способ ввода для системы (в частотной области), чтобы апплет мог выполнять математические вычисления и показывать пользователям предоставленную ими систему. В настоящий момент апплет вычисляет полюсы и нули системы, строит их вместе с корневыми локусами, строит кривую Найквиста системы и строит диаграммы Боде системы.

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

Теперь реальный вопрос: у меня есть функция (передаточная функция) в частотной области. Функция является рациональной функцией, хранящейся в программе в виде двух полиномов (числитель и знаменатель хранятся по их коэффициентам). Как лучше всего преобразовать эту функцию во временную область? (обратный Лаплас). Или есть библиотека с открытым исходным кодом, которая реализует это уже. Я уже искал его, но нашел только некоторые математические библиотеки для более простой математики.

заранее спасибо

2 ответа

Решение

Это довольно сложная и интересная проблема. Пара идей.

(1) Если решение должно быть строго JS: обратная LT некоторых рациональных функций может быть найдена путем разложения по частичным дробям. У вас есть числовые коэффициенты для полиномов, верно? Вы можете попробовать реализовать частичную дробную дробь в JS или, возможно, найти такую. Трудность заключается в том, что не гарантируется, что вы можете найти обратный LT через частичные дроби.

(2) Используйте JS в качестве связующего кода и отправьте рациональную функцию другому процессу (выполняющемуся, например, Sympy или Maxima) для вычисления обратного LT. Таким образом, вы можете воспользоваться всеми доступными функциями, но потребуется некоторая работа, чтобы подключиться к другому процессу и проанализировать результат. По крайней мере, для Maxima было много проектов, которые используют Maxima в качестве вычислительной серверной части; см.: http://maxima.sourceforge.net/relatedprojects.html

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

Спасибо за ваши предложения;)

Спросите меня, хотите ли вы посмотреть код.

Другие вопросы по тегам