числовой::

Числовое решение обыкновенного дифференциального уравнения

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

numeric::odesolve2(f, t0, Y0, <method>, <RememberLast>, <RelativeError = rtol>, <AbsoluteError = atol>, <Stepsize = h>, <MaxStepsize = hmax>)

Описание

numeric::odesolve2( f, t0, Y0, … ) возвращает функцию, представляющую числовое решение Y (t) дифференциального уравнения первого порядка (динамическая система), Y (t 0) = Y 0 с и.

Служебная функция numeric::ode2vectorfield может использоваться, чтобы произвести входные параметры f, t0, Y0 из набора дифференциальных выражений, представляющих ОДУ. Cf. Пример 1.

Функция, сгенерированная Y := numeric::odesolve2(f, t0, Y0), по существу

Y := t -> numeric::odesolve(t_0..t, f, Y_0).

Численное интегрирование запускается, когда Y вызван действительным числовым аргументом. Y(t) вызова возвращает вектор решения в формате, соответствующем типу начального условия Y 0, с которым был задан Y: Y(t) или приводит к списку или 1-мерному массиву.

Если t не является действительным численным значением, то Y(t) возвращает символьный вызов функции.

Смотрите страницу справки numeric::odesolve для получения дополнительной информации о параметрах и опциях.

Опции Alldata = n и Symbolic, принятый numeric::odesolve, не имеют никакого эффекта: numeric::odesolve2 игнорирует эти опции.

Примечание

Без RememberLast функциональный Y помнит все значения, которые это вычислило. При вызове Y (T) это ищет помнить таблицу в течение времени t0 < T < t, самый близкий к t, и объединяется от T до t с помощью ранее вычисленного Y (T) в качестве начального значения. Здесь, t0 является временем, в течение которого дано начальное значение ОДУ. Это уменьшает затраты на вызов значительно, если Y должен много раз оцениваться, например, при графическом выводе решения для ОДУ. Лучший подход должен вызвать Y только с монотонно увеличением (или уменьшение) последовательность значений t, начинающий с t0. Далее, функция должна быть повторно инициализирована каждый раз, когда DIGITS увеличен. Смотрите Пример 3.

Взаимодействия среды

Функция, возвращенная numeric::odesolve2, чувствительна к переменной окружения DIGITS, который определяет числовую рабочую точность.

Без RememberLast функция, возвращенная numeric::odesolve2, использует option remember.

Примеры

Пример 1

Числовое решение задачи с начальными значениями, y (0) = 2 представлен следующим функциональным Y = [y]:

f := (t, Y) -> [t*sin(Y[1])]:

Также служебная функция numeric::ode2vectorfield может использоваться, чтобы сгенерировать входные параметры более интуитивным способом:

[f, t0, Y0] :=
  [numeric::ode2vectorfield({y'(t) = t*sin(y(t)), y(0) = 2}, [y(t)])]

Y := numeric::odesolve2(f, t0, Y0)

Процедура Y запускает численное интегрирование, когда названо числовым аргументом:

Y(-2), Y(0), Y(0.1), Y(PI + sqrt(2))

Вызов Y с символьным аргументом приводит к символьному вызову:

Y(t), Y(t + 5), Y(t^2 - 4)

eval(subs(%, t = PI))

Числовое решение может быть построено. Обратите внимание на то, что Y(t) возвращает список, таким образом, мы строим элемент списка Y(t)[1]:

plotfunc2d(Y(t)[1], t = -5..5):

delete f, t0, Y0, Y:

Пример 2

Мы считаем дифференциальное уравнение с начальными условиями y (0) = 0. Уравнение второго порядка преобразовано в систему первого порядка для:

.

f := (t, Y) -> [Y[2], Y[1]^2]:
t0 := 0: Y0 := [0, 1]:
Y := numeric::odesolve2(f, t0, Y0): 
Y(1), Y(PI)

delete f, t0, Y0, Y:

Пример 3

Мы рассматриваем систему

:

f := (t, Y) -> [Y[1] + Y[2], Y[1] - Y[2]]:
Y := numeric::odesolve2(f, 0, [1, I]):
DIGITS := 5:
Y(1)

Увеличение DIGITS не приводит к более точному результату из-за помнить механизма:

DIGITS := 15: Y(1)

Это - предыдущее значение, вычисленное с 5 цифрами, распечатанными с 15 цифрами. Действительно, только 5 цифр правильны. Для получения результата, который является с точностью до полной точности, нужно стереть помнить таблицу через Y:=subsop(Y,5=NIL). Также можно создать новое числовое решение с (пустым) новым, помнят таблицу:

Y := numeric::odesolve2(f, 0, [1, I]): 
Y(1)

delete f, Y, DIGITS:

Пример 4

Мы демонстрируем эффект опции RememberLast. Мы рассматриваем ОДУ

:

f := (t, Y) -> [-Y[1] + sin(t)]:
Y := numeric::odesolve2(f, 0, [1]):
Z := numeric::odesolve2(f, 0, [1], RememberLast):

После многих вызовов Y, помнить таблицу стал большим. В каждом вызове, ища помнить таблицу входные параметры близко к значению настоящего времени становится дорогим. Созданный с RememberLast, процедура Z не помнит всех своих ранее вычисленных значений кроме последнего. Следовательно, это становится быстрее, чем Y:

time(for i from 1 to 1000 do Y(i/100) end)*msec,
time(for i from 1 to 1000 do Z(i/100) end)*msec

Кроме эффективности, совпадают значения, возвращенные Y и Z:

Y(10.5), Z(10.5)

delete f, Y, Z, i:

Параметры

f

Процедура, представляющая векторное поле динамической системы

t0

Числовое действительное значение в течение начального времени

Y0

Список или 1-мерный массив численных значений, представляющих начальное значение

method

Одна из схем Runge-Kutta описана ниже.

Опции

BUTCHER6, CK45, CK54, DOPRI45, DOPRI54, DOPRI56, DOPRI65, DOPRI78, DOPRI87, EULER1, GAUSS, RK4, RKF34, RKF43, RKF45a, RKF45b, RKF54a, RKF54b, RKF78, RKF87, xCK45, xCK54, xDOPRI45, xDOPRI54, xDOPRI56, xDOPRI65, xDOPRI78, xDOPRI87, xRKF34, xRKF43, xRKF45a, xRKF45b, xRKF54a, xRKF54b, xRKF78, xRKF87

Опция, заданная как GAUSS = s

Имя схемы Runge-Kutta. Для получения дополнительной информации см. документацию numeric::odesolve.

RememberLast

Изменяет внутреннее, помнят механизм: процедура, возвращенная numeric::odesolve2, не помнит результаты всех предыдущих вызовов, но только результат последней возможности.

Без этой опции процедура, возвращенная numeric::odesolve2, использует option remember, чтобы помнить результаты всех предыдущих вызовов. Если функция вызывается очень часто (сотни или тысячи времен), помнить таблица становится большой, и ищущий эту таблицу для записей близко к значению текущего времени может стать дорогостоящим. С RememberLast процедура, возвращенная numeric::odesolve2, не использует option remember, чтобы помнить все предыдущие результаты, но реализует очень простой и недорогой механизм, чтобы помнить только результат самого последнего вызова.

Эта опция настоятельно рекомендована, когда числовая процедура, возвращенная numeric::odesolve2, должна часто называться (сотни тысяч времен) с монотонно увеличением или уменьшением временных стоимостей. Cf. Пример 4.

RelativeError

Опция, заданная как RelativeError = rtol

Обеспечивает внутренние числовые шаги Рунге-Кутта, чтобы использовать размеры шага с относительными локальными ошибками дискретизации ниже rtol. Этот допуск должен быть положительным числовым действительным значением, не меньшим, чем. Допуском по умолчанию является RelativeError = 10^(-DIGITS). Смотрите страницу справки numeric::odesolve для получения дальнейшей информации.

AbsoluteError

Опция, заданная как AbsoluteError = atol

Обеспечивает внутренние числовые шаги Рунге-Кутта, чтобы использовать размеры шага с абсолютными локальными ошибками дискретизации ниже atol. Этот допуск должен быть неотрицательным числовым действительным значением. Допуском по умолчанию является AbsoluteError = 10^(-10*DIGITS). Смотрите страницу справки numeric::odesolve для получения дальнейшей информации.

Stepsize

Опция, заданная как Stepsize = h

Выключает внутренний контроль ошибок и использует итерацию Рунге-Кутта с постоянным размером шага h. h должен быть положительным действительным значением. Смотрите страницу справки numeric::odesolve для получения дальнейшей информации.

MaxStepsize

Опция, заданная как MaxStepsize = hmax

Ограничивает адаптивные размеры шага значениями, не больше, чем hmax; hmax должен быть положительным численным значением. Смотрите страницу справки numeric::odesolve для получения дальнейшей информации.

Возвращаемые значения

Процедура.

Смотрите также

Функции MuPAD

MuPAD графические примитивы

Для просмотра документации необходимо авторизоваться на сайте