numeric::odesolve2

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

Блокноты 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 от набора дифференциальных выражений, представляющих ОДУ. См. Пример 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 должен часто называться (сотни тысяч времен) с монотонно увеличением или уменьшением временных стоимостей. См. Пример 4.

RelativeError

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

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

AbsoluteError

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

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

Stepsize

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

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

MaxStepsize

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

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

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

Процедура.

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

Функции MuPAD

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