Javascript must be enabled in your browser to use this page.
Please enable Javascript under your Tools menu in your browser.
Once javascript is enabled Click here to go back to �нтеллектуальная Кобринщина

Solve a Partial Differential Equation - Wolfram Mathematica

Решение дифференциальных уравнений в частных производных

Функции Mathematica для решения дифференциальных уравнений могут применяться ко многим различным классам дифференциальных уравнений, автоматически выбирая соответствующие алгоритмы, без необходимости их предварительной обработки пользователем. Одним из таких классов являются дифференциальные уравнения в частных производных (УРЧП).

Воспользуемся функцией D для задания производных, создадим уравнение переноса при  c=2, SolveAPartialDifferentialEquationRU_1.gif, и сохраним его под именем pde:

In[14]:=

SolveAPartialDifferentialEquationRU_2.gif

Out[14]=

SolveAPartialDifferentialEquationRU_3.gif

Применим функцию DSolve для решения уравнения и сохраним решение под именем  soln. Первым аргументом DSolve является урав нение, вторым аргументом является функция относительно которой решается уравнение, а третьим аргументом является список независимых переменных:

In[15]:=

SolveAPartialDifferentialEquationRU_4.gif

Out[15]=

SolveAPartialDifferentialEquationRU_5.gif

Ответ дается в виде правила, где SolveAPartialDifferentialEquationRU_6.gif является произвольной функцией.

Для того, чтобы использовать полученное решение в качестве функции, скажем f[x,t], воспользуемся /. (краткая форма записи для ReplaceAll) и [[...]] (краткая форма записи для Part):

In[16]:=

SolveAPartialDifferentialEquationRU_7.gif

Out[16]=

SolveAPartialDifferentialEquationRU_8.gif

После этого, Вы можете рассчитывать f[x,t] как и любую другую функцию:

In[17]:=

SolveAPartialDifferentialEquationRU_9.gif

Out[17]=

SolveAPartialDifferentialEquationRU_10.gif

Вы также можете добавить начальное условие, например такое как y(0,t)?sin(t), задав первый аргумент DSolve в виде списка. Сохраним решение под именем sol:

In[18]:=

SolveAPartialDifferentialEquationRU_11.gif

Out[18]=

SolveAPartialDifferentialEquationRU_12.gif

Используем функцию Plot3D для отображения решения графически:

In[20]:=

SolveAPartialDifferentialEquationRU_13.gif

Out[20]=

SolveAPartialDifferentialEquationRU_14.gif

    

Применим функцию DSolve к неоднородному УРЧП SolveAPartialDifferentialEquationRU_15.gif с начальным условием y(0,t)?cos(t):

In[1]:=

SolveAPartialDifferentialEquationRU_16.gif

Out[1]=

SolveAPartialDifferentialEquationRU_17.gif

Извлечем решение из вложенного списка:

In[2]:=

SolveAPartialDifferentialEquationRU_18.gif

Out[2]=

SolveAPartialDifferentialEquationRU_19.gif

Рассчитаем решение для заданных значений параметров:

In[3]:=

SolveAPartialDifferentialEquationRU_20.gif

Out[3]=

SolveAPartialDifferentialEquationRU_21.gif

Теперь используем функцию Plot3D для графического отображения решения:

In[5]:=

SolveAPartialDifferentialEquationRU_22.gif

Out[5]=

SolveAPartialDifferentialEquationRU_23.gif

    

Вы также можете работать с УРЧП, которые содержат нечисловые коэффициенты.

Применим функцию DSolve для решения неоднородного УРЧП, например, SolveAPartialDifferentialEquationRU_24.gif с начальным условием y(0,t)?a cos(t). Сохраним решение под именем pdesol:

In[6]:=

SolveAPartialDifferentialEquationRU_25.gif

Out[6]=

SolveAPartialDifferentialEquationRU_26.gif

Определим функцию Fsol, соответствующую полученному решению pdesol:

In[7]:=

SolveAPartialDifferentialEquationRU_27.gif

Out[7]=

SolveAPartialDifferentialEquationRU_28.gif

Рассчитаем решение для заданных значений параметров:

In[8]:=

SolveAPartialDifferentialEquationRU_29.gif

Out[8]=

SolveAPartialDifferentialEquationRU_30.gif

Подставим значения параметров:

In[9]:=

SolveAPartialDifferentialEquationRU_31.gif

Out[9]=

SolveAPartialDifferentialEquationRU_32.gif

Отобразим графически решение Fsol для заданного набора значений параметров:

In[10]:=

SolveAPartialDifferentialEquationRU_33.gif

Out[10]=

SolveAPartialDifferentialEquationRU_34.gif

Воспользуемся функцией Manipulate, чтобы показать как изменяется решение Fsol при изменении значений параметров a, b и c:

In[11]:=

SolveAPartialDifferentialEquationRU_35.gif

Out[11]=

    

До сих пор, в примерах использовалась функция DSolve для получения символьных решений УРЧП. Но если заданное УРЧП не содержит параметров, можно приме&# 1085;ить функцию NDSolve для получения численных решений. Результаты NDSolve даются как объекты функции InterpolatingFunction.

Здесь приводится решение, полученное при помощи NDSolve, сохраненное под именем nsol1:

In[12]:=

SolveAPartialDifferentialEquationRU_37.gif

Out[12]=

SolveAPartialDifferentialEquationRU_38.gif

Построим график решения при помощи функции Plot3D:

In[15]:=

SolveAPartialDifferentialEquationRU_39.gif

Out[15]=

SolveAPartialDifferentialEquationRU_40.gif

Объекты функции InterpolatingFunction могут быть использованы в вычислениях, отображены графически и использованы в других операциях.

Извлечем решение, данное в объектах функции InterpolatingFunction из nsol1 и присвоим ему новое обозначение nsol2:

In[13]:=

SolveAPartialDifferentialEquationRU_41.gif

Out[13]=

SolveAPartialDifferentialEquationRU_42.gif

Рассчитаем решение для значений, указанных для x и t:

In[14]:=

SolveAPartialDifferentialEquationRU_43.gif

Out[14]=

SolveAPartialDifferentialEquationRU_44.gif

Построим график решения nsol2 при помощи функции Plot3D:

In[24]:=

SolveAPartialDifferentialEquationRU_45.gif

Out[24]=

SolveAPartialDifferentialEquationRU_46.gif

    

Если УРЧП содержит параметры, NDSolve может быть использована для каждого конкретного значения параметров. Вдобавок, Вы можете создать функцию, которая использует NDSolve и принимает значения параметров.

Используем выражение ?NumericQ для того, чтобы предупредить вычисление функции fsol для нечисленных значений параметров:

In[7]:=

SolveAPartialDifferentialEquationRU_47.gif

Найдем решение, соответствующее определенному значению параметра, в данном случае 5:

In[9]:=

SolveAPartialDifferentialEquationRU_48.gif

Out[9]=

SolveAPartialDifferentialEquationRU_49.gif

Построим график решения при помощи функции Plot3D. Команда Evaluate необходима для того, чтобы вычисления были выполнены в правил ьном порядке:

In[10]:=

SolveAPartialDifferentialEquationRU_50.gif

Out[10]=

SolveAPartialDifferentialEquationRU_51.gif

NDSolve также может быть использована вместе с другими функциями Mathematica, такими как Manipulate.

Решим УРЧП в соответствии с заданным значением параметра k, а затем построим график результирующего решения:

In[11]:=

SolveAPartialDifferentialEquationRU_52.gif

Out[11]=