Dr. K. L. Metlov (dr_klm) wrote,
Dr. K. L. Metlov
dr_klm

Category:

jnum -- численные методы для J

Выложил затравочную версию дополнительного пакета jnum для J. Скачать можно здесь, пока есть версия только для (32-битного x86) Linux (Ну нет, нет у меня Windows ;-).

Идея в том, чтобы сделать доступными из под J качественные и бесплатные подпрограммы для (многомерного) численного интегрирования, численного решения (систем) ОДУ, уравнений в частных производных (и систем), вычисления спецфункций... и т.д.

На данный момент (версия 0.01) подключена только реализация адаптивного численного векторного интегратора Cuhre из библиотеки Cuba. Главным для меня моментом в этой версии является отработка техники вызова из J функций внутри внешних динамических библиотек, причем так, чтобы эти функции, в свою очередь, могли вызвать функции внутри J. Добавить другие подпрограммы теперь будет совсем несложно, что я и собираюсь делать по мере необходимости.

1. Скачайте архив и раскройте его в (существующем) под-каталоге "addons" установленной у Вас системы J. При этом будет создан под-каталог jnum.

2. Запустите интерпретатор и подключите определения командой:
   load '~addons\jnum\jnum.ijs'
3. Вычислите тестовый интеграл:
   a=:(([: +/ %:), [: +/ *:) niCuhre 0 0 ,: 2 2
┌─┬─┬─┬───────────┬───┬───┬─────┬────┬─┬─┬─────┬─┬──┬───┬─┬───────────────┬─────
│0│2│2│_1491610624│0 0│2 2│0.001│1e_5│0│0│50000│9│15│957│0│7.54278 10.6667│0.006
└─┴─┴─┴───────────┴───┴───┴─────┴────┴─┴─┴─────┴─┴──┴───┴─┴───────────────┴─────
   a
7.54278  0.00680075          0
10.6667 2.35625e_15 1.00238e_6
Интегратор определен в виде наречия niCuhre. Его (единственным левым глагольным) аргументом является подинтегральная функция (в данном случае ([: +/ %:), [: +/ *:). Правым (и, на данный момент, единственным) аргументом произведенного глагола является массив размерности 2 x ndim , задающий пределы интегрирования по каждой из ndim переменных. Заметьте, что ndim должно быть 2 или больше (одномерные интегралы я добавлю позже). Подинтегральная функция может быть векторной с произвольным количеством компонент (ncomp). Количество компонент определяется путем начального вызова функции в центре области интегрирования.

Таким образом, в приведеном примере вычисляются два интеграла:
   2 2
   / /    1/2   1/2
   | | ( x   + y    ) dx dy
   / /
   0 0

   и

   2 2
   / /    2    2
   | | ( x  + y  ) dx dy
   / /
   0 0
После вычисления выводится информационное сообщение (в коробке), содержащее количество разбиений и вызовов подинтегральной функции, другую диагностическую информацию.

Результат вычисления представляет собой таблицу ncomp x 3, содержащую в столбцах для каждой компоненты подинтегральной вектор-функции:
1) значение интеграла
2) абсолютную погрешность этого значения
3) вероятность того, что действительная ошибка _не_ попадает в указанный интервал (для ее определения используется статистический тест χ2).
Tags: j
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments