DiffusionPDETerm[vars]
モデル変数 vars の拡散項
を表す.
DiffusionPDETerm[vars,c]
拡散係数が
の拡散項
を表す.
DiffusionPDETerm[vars,c,pars]
モデルパラメータ pars を使う.
DiffusionPDETerm
DiffusionPDETerm[vars]
モデル変数 vars の拡散項
を表す.
DiffusionPDETerm[vars,c]
拡散係数が
の拡散項
を表す.
DiffusionPDETerm[vars,c,pars]
モデルパラメータ pars を使う.
詳細
- 拡散は物理学における中心概念で,熱力学,音響学,構造力学,流体力学等,数多くの分野で使われている.
- 拡散は伝導としても知られている.
- 拡散係数
がある拡散は,従属変数
の勾配のみに駆動される平衡過程である. - DiffusionPDETermは,偏微分方程式の一部として使われる微分演算子項を返す.
- DiffusionPDETermを使って,従属変数
,独立変数
,時間変数
の拡散方程式がモデル化できる. - 定常モデル変数 vars は vars={u[x1,…,xn],{x1,…,xn}}である.
- 時間依存モデル変数 vars は vars={u[t,x1,…,xn],{x1,…,xn}}または vars={u[t,x1,…,xn],t,{x1,…,xn}}である.
- 他のPDE項との関連における拡散項
は以下で与えられる. - 拡散の間,拡散が起こる媒体は静止したままであるのに対し,対流の場合は媒体が輸送機構となる.
- 拡散係数
は次の形を持つことができる. -


スカラー
,等方性拡散{c1,…,cn} 
ベクトル
,直交異方性拡散{{c11,…,c1n},…,{cn1,…,cnn}} 
行列
,異方性拡散 - 従属変数が{u1,…,um}の偏微分方程式系についての拡散は以下を表す.
- PDE項の系との関連における拡散項.
- 拡散係数
は
の形の階数4のテンソルである.各部分行列
は単一の従属変数と同じ方法で指定できる
行列である. - 記号拡散係数はMatrixSymbolで指定できる. »
- 拡散係数
は,時間,空間,パラメータ,従属変数に依存することがある. - 次は,使用可能なパラメータ pars である.
-
パラメータ デフォルト シンボル "CoordinateChart" "Cartesian" 
"RegionSymmetry" None 
- パラメータ"RegionSymmetry"の可能な選択肢には"Axisymmetric"がある.
- "Axisymmetric"領域対称性は,以下のように角度変数を削除することで円柱座標が縮小された,切り取られた円柱座標系を表す.
-
次元 縮小 方程式 1D 
2D 

- 係数
はNeumannValueの意味をもたらす. - 与えられた独立変数に明示的に依存しないすべての数量の偏導関数は0であるとみなされる.
例題
すべて開く すべて閉じる例 (6)
DiffusionPDETerm[{u[x], {x}}, 1]Activate[%]DiffusionPDETerm[{u[x], {x}}, κ, <|κ -> 1|>]Activate[%]DiffusionPDETerm[{u[x], {x}}, {{κ[x]}}]Activate[%]NDEigenvalues[DiffusionPDETerm[{u[x], {x}}], u, {x}∈Line[{{0}, {1}}], 3]基本項で構築されたポアソン(Poisson)方程式を構築し,記号的に解く:
vars = {u[x, y], {x, y}};
DSolveValue[Activate[DiffusionPDETerm[vars] == SourcePDETerm[vars, 1]], u[x, y], {x, y}]ufun = NDSolveValue[{D[u[t, x], t] + DiffusionPDETerm[{u[t, x], {x}}, 1] == 0, u[0, x] == Exp[-x ^ 2]}, u, {t, 0, 1}, {x, -π, π}]Plot[Evaluate[Table[ufun[t, x], {t, 0, 1, 0.25}]], {x, -π, π}, Rule[...]]NIntegrate[ufun[0, x], {x, -π, π}] - NIntegrate[ufun[1, x], {x, -π, π}]スコープ (36)
1D (6)
DiffusionPDETerm[{u[t, x], {x}}, MatrixSymbol["c", {1, 1}]]Activate[%]DiffusionPDETerm[{u[x], {x}}]DiffusionPDETerm[{u[t, x], {x}}, {{1 + t}}]Activate[%]κ = MatrixSymbol["c", {1, 1}];
DiffusionPDETerm[{u[x], {x}}, κ, <|{κ -> {{1}}}|>]Activate[%]固有値問題のモデル化にDiffusionPDETermを使う:
NDEigensystem[DiffusionPDETerm[{u[x], {x}}, 1], u, {x, 0, 1}, 3]DiffusionPDETermを使って1Dポアソン方程式を設定する:
NDSolveValue[{DiffusionPDETerm[{u[x], {x}}, 1] == 1, DirichletCondition[u[x] == 0, True]}, u, {x, 0, 1}]Plot[%[x], {x, 0, 1}]1D線対称 (1)
DiffusionPDETerm[{u[r], {r}}, 1, <|"RegionSymmetry" -> "Axisymmetric"|>]これにActivateを適用する:
Activate[%]軸対称のケースは拡散方程式を構成する演算子を使って切り取られた円柱座標系を使った結果であることを確認する:
Div[-1 * Grad[u[r], {r, θ, z}, "Cylindrical"], {r, θ, z}, "Cylindrical"]2D (13)
DiffusionPDETerm[{u[x, y], {x, y}}, 1]Activate[%]DiffusionPDETerm[{u[x, y], {x, y}}]DiffusionPDETerm[{u[x, y], {x, y}}, 1] == 0Activate[%]DiffusionPDETerm[{u[x, y], {x, y}}, MatrixSymbol["c", {2, 2}]]Activate[%]D[u[t, x, y]] + DiffusionPDETerm[{u[t, x, y], {x, y}}, 1] == 0Activate[%]DiffusionPDETerm[{u[x, y], {x, y}}, {10, 20}]DiffusionPDETerm[{u[x, y], {x, y}}, {{2, 1}, {0, 1}}]DiffusionPDETerm[{u[t, x, y], t, {x, y}}, {{2, 1}, {0, 1}}]DiffusionPDETermを使って2Dポアソン方程式を設定する:
NDSolveValue[{DiffusionPDETerm[{u[x, y], {x, y}}, 1] == 1, DirichletCondition[u[x, y] == 0, True]}, u, {x, y}∈Rectangle[]]ContourPlot[%[x, y], {x, y}∈Rectangle[]]基本的なPDE項からポアソン方程式を構築し,これを数値的に解く:
vars = {u[x, y], {x, y}};
NDSolveValue[{DiffusionPDETerm[vars] == SourcePDETerm[vars, 1], DirichletCondition[u[x, y] == 0, True]}, u[x, y], {x, y}∈Disk[]]Plot3D[%, {x, y}∈Disk[]]
方向の拡散定数の方が
方向よりも大きいベクトル値拡散係数を使う:
NDSolveValue[{DiffusionPDETerm[{u[x, y], {x, y}}, {10, 1}] == 1, DirichletCondition[u[x, y] == 0, True]}, u, {x, y}∈Rectangle[]]ContourPlot[%[x, y], {x, y}∈Rectangle[]]
方向の拡散定数の方が
方向よりも大きいベクトル値拡散係数を使う:
NDSolveValue[{DiffusionPDETerm[{u[x, y], {x, y}}, {1, 10}] == 1, DirichletCondition[u[x, y] == 0, True]}, u, {x, y}∈Rectangle[]]ContourPlot[%[x, y], {x, y}∈Rectangle[]]NDSolveValue[{DiffusionPDETerm[{u[x, y], {x, y}}, {{1, 1 / 2}, {1 / 2, 1}}] == 1, DirichletCondition[u[x, y] == 0, True]}, u, {x, y}∈Rectangle[]]ContourPlot[%[x, y], {x, y}∈Rectangle[]]2D線対称 (3)
DiffusionPDETerm[{u[r, z], {r, z}}, 1, <|"RegionSymmetry" -> "Axisymmetric"|>] == 0これにActivateを適用する:
Activate[%]軸対称性のケースは,拡散方程式を構成する演算子を使って切り取られた円柱座標系を使った結果であることを確認する:
Div[{{-1, 0, 0}, {0, -1, 0}, {0, 0, -1}}. Grad[u[r, z], {r, θ, z}, "Cylindrical"], {r, θ, z}, "Cylindrical"]DiffusionPDETerm[{u[r, z], {r, θ, z}}, 1, <|"RegionSymmetry" -> "Axisymmetric"|>]これにActivateを適用する:
Activate[%]D[u[t, r, z]] + DiffusionPDETerm[{u[t, r, z], {r, z}}, 1, <|"RegionSymmetry" -> "Axisymmetric"|>] == 0これにActivateを適用する:
Activate[%]3D (1)
DiffusionPDETermを使って3Dポアソン方程式を設定する:
usol = NDSolveValue[
{DiffusionPDETerm[{u[x, y, z], {x, y, z}}, -1] == 1,
DirichletCondition[u[x, y, z] == x y z, True]}, u, {x, y, z}∈ Ball[]]DensityPlot3D[usol[x, y, z], {x, y, z}∈Ball[], PlotLegends -> Automatic, AxesLabel -> Automatic]座標チャート (3)
DiffusionPDETerm[{u[r, z], {r, z}}, 1, <|"CoordinateChart" -> "Polar"|>]Activate[%]Laplacianと比較する:
Laplacian[u[r, z], {r, z}, "Polar"]{vals, funs} = NDEigensystem[{DiffusionPDETerm[{u[r, θ], {r, θ}}, 1, <|"CoordinateChart" -> "Polar"|>], DirichletCondition[u[r, θ] == 0, r == π], PeriodicBoundaryCondition[u[r, θ], θ == -π && r < π, Function[X, X + {0, 2π}]]}, u, {r, θ}∈Rectangle[{0, -π}, {π, π}], 4]RevolutionPlot3D[#[r, θ], {r, 0, π}, {θ, -π, π}, PlotRange -> All]& /@ funsifun = NDSolveValue[{DiffusionPDETerm[{u[r, θ], {r, θ}}, 1, <|"CoordinateChart" -> "Polar"|>] == 0, DirichletCondition[u[r, θ] == Sin[4 θ], r == π], DirichletCondition[u[r, θ] == 0, θ == -π || θ == π]}, u, {r, θ}∈Rectangle[{0, -π}, {π, π}]]Plot3D[Evaluate[ifun[r, θ] /. {r -> Sqrt[x ^ 2 + y ^ 2], θ -> ArcTan[x, y]}], {x, y}∈Disk[{0, 0}, π]]連結 (6)
DiffusionPDETerm[{{u[x], v[x]}, {x}}]DiffusionPDETerm[{{u[x], v[x]}, {x}}, 1]DiffusionPDETerm[{{u[x], v[x]}, {x}}, {{Subscript[c, 11], Subscript[c, 12]}, {Subscript[c, 21], Subscript[c, 22]}}]DiffusionPDETerm[{{u[x, y], v[x, y]}, {x, y}}, {{Subscript[c, 11], {Subscript[c, 1211], Subscript[c, 1222]}}, {0, {{Subscript[c, 2211], Subscript[c, 2212]}, {Subscript[c, 2221], Subscript[c, 2222]}}}}]cIn = Array[Subscript[c, ##]&, {2, 2, 2, 2}]DiffusionPDETerm[{{u[x, y], v[x, y]}, {x, y}}, cIn]MatrixForm[coefficients = {{{{1, 0}, {0, 1}}, {{0, 2}, {2, 0}}}, {{{0, 0}, {0, 0}}, {{1, 0}, {0, 1}}}}]{uif, vif} = NDSolveValue[{DiffusionPDETerm[{{u[x, y], v[x, y]}, {x, y}}, coefficients] == {1, 1}, DirichletCondition[{u[x, y] == 0, v[x, y] == 0}, True]}, {u, v}, {x, y}∈Rectangle[]];GraphicsRow[{ContourPlot[uif[x, y], {x, y}∈Rectangle[]], ContourPlot[vif[x, y], {x, y}∈Rectangle[]]}]連結線対称 (3)
DiffusionPDETermを使って複数の従属変数を持つ1D軸対称方程式を設定する:
eqn = DiffusionPDETerm[{{u[r], v[r]}, {r}}, {{2.4, 3}, {3, 3}}, <|"RegionSymmetry" -> "Axisymmetric"|>] == {1, 1}bcs = {u[0.1] == 200, v[0.1] == 200, u[0.5] == 50, v[0.5] == 5};{uif, vif} = NDSolveValue[{eqn, bcs}, {u, v}, {r, 0.1, 0.5}]{fufun, fvfun} = DSolveValue[{eqn, bcs}, {u, v}, {r}]Plot[{fufun[r] - uif[r], fvfun[r] - vif[r]}, {r, 0.1, 0.5}, PlotLegends -> "Expressions", PlotRange -> All]DiffusionPDETerm[{{u[r, z], v[r, z]}, {r, z}}, 1, <|"RegionSymmetry" -> "Axisymmetric"|>]これにActivateを適用する:
Activate[%]複数の従属変数と複数の拡散係数を持つ2D拡散軸対称項を定義する:
MatrixForm[
coefficients = {{{{25, 0}, {0, 25}}, {{0, 10}, {5, 0}}}, {{{0, 15}, {20, 0}}, {{50, 0}, {0, 25}}}}]coupledPDEs = DiffusionPDETerm[{{u[r, z], v[r, z]}, {r, z}}, coefficients, <|"RegionSymmetry" -> "Axisymmetric"|>];{uif, vif} = NDSolveValue[{coupledPDEs == {1, 1}, DirichletCondition[{u[r, z] == 0, v[r, z] == 0}, z == 0]}, {u, v}, {r, z}∈Rectangle[]];GraphicsRow[{ContourPlot[uif[r, z], {r, z}∈Rectangle[]], ContourPlot[vif[r, z], {r, z}∈Rectangle[]]}]アプリケーション (9)
DiffusionPDETermを変数拡散係数と一緒に使う:
model = DiffusionPDETerm[{u[x], {x}}, {{If[x ≤ 3 / 4, 1, 2]}}]solution = NDSolveValue[{model == 0, DirichletCondition[u[x] == 1, x == 0], DirichletCondition[u[x] == 0, x == 1]}, u, {x, 0, 1}]flux = model /. Inactive[Div][flux_, _] :> Activate[flux]Plot[Evaluate[{solution[x], flux /. u -> solution}], {x, 0, 1}, ...]DiffusionPDETermと軸対称幾何学を使って伝導性熱伝達をモデル化する.
分析領域は2D領域である.直交座標
で完全な2D領域を定義する代りに,1D
の切取り円柱座標で領域を定義することができる.この系は
軸の周りで回転対称なので,円柱座標の変数
と
は消失する.
eqn = DiffusionPDETerm[{u[r], {r}}, 2.4, <|"RegionSymmetry" -> "Axisymmetric"|>] == 0bcs = {u[1 / 10] == 200, u[1 / 2] == 50};numericSolution = NDSolveValue[{eqn, bcs}, u, {r, 0.1, 0.5}]DSolveValueで記号的に解くこともできる:
analytocalSolution = DSolveValue[{eqn, bcs}, u, r]Plot[analytocalSolution[r] - numericSolution[r], {r, 0.1, 0.5}, PlotRange -> All]DiffusionPDETermを使ってダムの下の種の拡散をモデル化する.領域を設定する:
Subscript[Ω, dam] = Rectangle[{6, 3}, {12, 18}];
Subscript[Ω, sediment] = RegionDifference[Rectangle[{0, 0}, {18, 6}], Subscript[Ω, dam]];model = DiffusionPDETerm[{u[x, y], {x, y}}, 10 ^ -4]solution = NDSolveValue[{model == 0, DirichletCondition[u[x, y] == 16, x ≤ 6 && y == 6], DirichletCondition[u[x, y] == 8, x ≥ 12 && y == 6]}, u, {x, y}∈Subscript[Ω, sediment]]flux = model /. Inactive[Div][flux_, _] :> Activate[flux]Show[
...,
VectorPlot[Evaluate[flux /. u -> solution], {x, y}∈Subscript[Ω, sediment], Rule[...]]]op = DiffusionPDETerm[{c[x, y], {x, y}}, 1] + ConvectionPDETerm[{c[x, y], {x, y}}, flux /. u -> solution] + 2 * 10 ^ -5c[x, y];concentration = NDSolveValue[{op == 0,
DirichletCondition[c[x, y] == 100, x ≤ 6 && y == 6], DirichletCondition[c[x, y] == 50, x ≥ 12 && y == 6]
}, c, {x, y}∈Subscript[Ω, sediment]]Show[
...,
ContourPlot[concentration[x, y], {x, y}∈Subscript[Ω, sediment], ...],
VectorPlot[Evaluate[flux /. u -> solution], {x, y}∈Subscript[Ω, sediment], Rule[...]]
]helmholtzModel[vars_, k_] := DiffusionPDETerm[vars, 1] + ReactionPDETerm[vars, k]NDEigenvalues[{helmholtzModel[{u[x, y], {x, y}}, 4]}, u, {x, y}∈Disk[], 5]vars = {u[x, y], {x, y}};
NDSolveValue[{helmholtzModel[vars, 4] == SourcePDETerm[vars, 1], DirichletCondition[u[x, y] == 0, True]}, u[x, y], {x, y}∈Disk[]]Plot3D[%, {x, y}∈Disk[]]DiffusionPDETermと軸対称幾何学を使って伝導性熱伝達をモデル化する.分析領域は3Dの中空の円柱である.直交座標
で完全な3D領域を定義する代りに,2Dの切取り円柱座標
で領域を定義することができる.この系は
軸の周りで回転対称なので,円柱座標の変数
は消失する.
Ω = Rectangle[{0.02, 0}, {0.1, 0.14}];model = DiffusionPDETerm[{u[r, z], {r, z}}, 52, <|"RegionSymmetry" -> "Axisymmetric"|>]solution = NDSolveValue[{model == NeumannValue[5 * 10 ^ 5, r == 0.02 && (0.04 <= z <= 0.1)], DirichletCondition[u[r, z] == 273.15, z == 0 || r == 0.1 || z == 0.14]}, u, {r, z}∈Ω]ContourPlot[solution[r, z], {r, z}∈Ω, ...]Legended[RegionPlot3D[0.02^2 ≤ x^2 + y^2 ≤ 0.1^2 && 0 ≤ PlanarAngle[{0, 0} -> {{0.02, 0}, {x, y}}] ≤ (4 π/3), {x, -0.1, 0.1}, {y, -0.1, 0.1}, {z, 0, 0.14}, ...], BarLegend[...]]DiffusionPDETermと軸対称幾何学を使って非線形伝達性熱伝導をモデル化する.
radius = 3;
height = 8;
Ω2D = Rectangle[{0, 0}, {radius, height}];Subscript[k, air] = QuantityMagnitude[ThermodynamicData["Air", "ThermalConductivity"]];flux = 10;
temperature = 10;
model2D = {DiffusionPDETerm[{u[r, z], {r, z}}, (Subscript[k, air] + 10^-3u[r, z]) * IdentityMatrix[2], <|"RegionSymmetry" -> "Axisymmetric"|>] == NeumannValue[flux, r == radius], DirichletCondition[u[r, z] == temperature, z == 0]};measure2D =
AbsoluteTiming[
MaxMemoryUsed[
solution2D = NDSolveValue[model2D, u, {r, z}∈Ω2D]]];ContourPlot[solution2D[r, z], {r, z}∈Ω2D, ...]計算にかかった合計時間と計算に使われたバイト数(MB)を出力する:
Print["Time -> ", measure2D[[1]], " s", "
Memory -> ", measure2D[[2]] / (1024. ^ 2), " MB"]DiffusionPDETermを使って平面応力演算子を設定する:
MatrixForm[coefficients = {{{{(Y/1 - ν^2), 0}, {0, (Y (1 - ν)/2 (1 - ν^2))}}, {{0, (Y ν/1 - ν^2)}, {(Y (1 - ν)/2 (1 - ν^2)), 0}}}, {{{0, (Y (1 - ν)/2 (1 - ν^2))}, {(Y ν/1 - ν^2), 0}}, {{(Y (1 - ν)/2 (1 - ν^2)), 0}, {0, (Y/1 - ν^2)}}}}]model = DiffusionPDETerm[{{u[x, y], v[x, y]}, {x, y}}, coefficients, <|ν -> 1 / 3, Y -> 10 ^ 3|>]Ω = Rectangle[{0, 0}, {5, 1}]{uif, vif} = NDSolveValue[{model == {0, NeumannValue[-1, x == 5]}, DirichletCondition[{u[x, y] == 0., v[x, y] == 0.}, x == 0]}, {u, v}, {x, y}∈Ω]ContourPlot[uif[x, y], {x, y}∈Ω, ...]ContourPlot[vif[x, y], {x, y}∈Ω, ...]flux = model /. Inactive[Div][flux_, _] :> Activate[flux]stokesModel[vars_, μ_] := DiffusionPDETerm[vars, {{μ, 0, 0}, {0, μ, 0}, {0, 0, 0}}] + ConvectionPDETerm[vars, {{0, 0, {1, 0}}, {0, 0, {0, 1}}, {{1, 0}, {0, 1}, 0}}]eqn = stokesModel[{{u[x, y], v[x, y], p[x, y]}, {x, y}}, 1] == {0, 0, 0}Ω = RegionUnion[Rectangle[{0, 0}, {1, 1 / 2}], Rectangle[{1, 1 / 10}, {2, 2 / 5}]];bcs = {DirichletCondition[
{u[x, y] == 4 * 0.3 * y * (0.5 - y) / (0.41) ^ 2, v[x, y] == 0.}, x == 0.], DirichletCondition[{u[x, y] == 0., v[x, y] == 0.}, 0 < x < 2],
DirichletCondition[p[x, y] == 0., x == 2]};{xVel, yVel, pressure} = NDSolveValue[{eqn, bcs}, {u, v, p}, {x, y}∈Ω, Method -> {"FiniteElement", "InterpolationOrder" -> {u -> 2, v -> 2, p -> 1}, "MeshOptions" -> {"MaxCellMeasure" -> 0.0005}}];VectorPlot[{xVel[x, y], yVel[x, y]}, {x, y}∈Ω, AspectRatio -> Automatic, StreamPoints -> 6, StreamColorFunction -> "TemperatureMap", StreamColorFunctionScaling -> False]//Quietストークス流れのモデルを拡張してナビエ(Navier)・ストークス流れのモデルにする.ストークス流れのモデルを定義する:
stokesModel[vars_, μ_] := DiffusionPDETerm[vars, {{μ, 0, 0}, {0, μ, 0}, {0, 0, 0}}] + ConvectionPDETerm[vars, {{0, 0, {1, 0}}, {0, 0, {0, 1}}, {{1, 0}, {0, 1}, 0}}]navierStokesModel[vars_, μ_, ρ_] := stokesModel[vars, μ] + ConvectionPDETerm[vars, {{ρ vars[[1, {1, 2}]], 0, 0}, {0, ρ vars[[1, {1, 2}]], 0}, {0, 0, 0}}]eqn = navierStokesModel[{{u[x, y], v[x, y], p[x, y]}, {x, y}}, 1, 10 ^ -3] == {0, 0, 0}Ω = Rectangle[{0, 0}, {1, 1}];bcs = {DirichletCondition[
{u[x, y] == 1, v[x, y] == 0}, y == 1], DirichletCondition[{u[x, y] == 0, v[x, y] == 0}, y < 1],
DirichletCondition[p[x, y] == 0, x == 0 && y == 1]};{xVel, yVel, pressure} = NDSolveValue[{eqn, bcs}, {u, v, p}, {x, y}∈Ω, Method -> {"FiniteElement", "InterpolationOrder" -> {u -> 2, v -> 2, p -> 1}, "MeshOptions" -> {"MaxCellMeasure" -> 0.0005}}];VectorPlot[{xVel[x, y], yVel[x, y]}, {x, y}∈Ω, AspectRatio -> Automatic, StreamPoints -> 6, StreamColorFunction -> "TemperatureMap", StreamColorFunctionScaling -> False]//Quiet特性と関係 (3)
sol1 = NDSolveValue[{DiffusionPDETerm[{u[x, y], {x, y}}, {{1, 1 / 2}, {0, 1}}] == 1, DirichletCondition[u[x, y] == 0, True]}, u, {x, y}∈Rectangle[]]sol2 = NDSolveValue[{DiffusionPDETerm[{u[x, y], {x, y}}, {{1, 1 / 4}, {1 / 4, 1}}] == 1, DirichletCondition[u[x, y] == 0, True]}, u, {x, y}∈Rectangle[]]Plot3D[Chop[sol1[x, y] - sol2[x, y]], {x, y}∈Rectangle[]]nfun = NDSolveValue[{D[u[t, x], t] + DiffusionPDETerm[{u[t, x], {x}}, 1] == 0, DirichletCondition[u[t, x] == 0, True], u[0, x] == Exp[-x ^ 2]}, u[t, x], {t, 0, 1}, {x, -π, π}]afun = DSolveValue[{Activate[D[u[t, x], t] + DiffusionPDETerm[{u[t, x], {x}}, 1] == 0], u[t, -π] == 0, u[t, π] == 0, u[0, x] == Exp[-x ^ 2]}, u, {t, 0, 1}, {x, -π, π}]Inactive和から数項取り出す:
asol = afun[t, x] /. {∞ -> 15}//Activate;Plot3D[asol - nfun, {x, -π, π}, {t, 0, 1}, AxesLabel -> {"x", "t"}, PlotRange -> All]DiffusionPDETermの平衡特性は,不連続初期条件平滑化に現れている:
ufun = NDSolveValue[{D[u[t, x], t] + DiffusionPDETerm[{u[t, x], {x}}, 1] == 0, DirichletCondition[u[t, x] == 0, True], u[0, x] == 1 / 2 - Abs[x - 1 / 2]}, u, {t, 0, 0.001}, x∈Line[{{0}, {1}}]]Plot[{(1 / 2 - Abs[x - 1 / 2]), ufun[0.001, x]}, {x, 0, 1}, PlotRange -> {{0.35, 0.65}, {0.4, 0.51}}]考えられる問題 (3)
DiffusionPDETerm[{u[x], {x}}, c]DiffusionPDETerm[{u[x], {x}}, c]DiffusionPDETerm[{u[x], {x}}, c, <|c -> 1|>]DiffusionPDETerm[{u[x], {x}}, c]//Activate数値拡散係数は,自動的に,適切な次元のIdentityMatrixと乗算される:
DiffusionPDETerm[{u[x], {x}}, 1]記号拡散係数を指定するよりよい方法はMatrixSymbolを使うことである:
cs = MatrixSymbol["c", {1, 1}];
DiffusionPDETerm[{u[x], {x}}, cs, <|cs -> {{1}}|>]MatrixSymbolを使うと演算子がアクティブにできる:
DiffusionPDETerm[{u[x], {x}}, cs]//ActivateDiffusionPDETermは,
ではなく
をモデル化する:
c = 1 / (x + 1);
model = DiffusionPDETerm[{u[x], {x}}, {{c}}];
solution1 = NDSolveValue[{model == 1, DirichletCondition[u[x] == 1, x == 0], DirichletCondition[u[x] == 0, x == 1]}, u, {x, 0, 1}];solution2 = NDSolveValue[{-c Laplacian[u[x], {x}] == 0, DirichletCondition[u[x] == 1, x == 0], DirichletCondition[u[x] == 0, x == 1]}, u, {x, 0, 1}];Plot[{solution1[x], solution2[x]}, {x, 0, 1}, PlotLegends -> {"solution1", "solution2"}]関連するガイド
-
▪
- 偏微分方程式項
テキスト
Wolfram Research (2020), DiffusionPDETerm, Wolfram言語関数, https://reference.wolfram.com/language/ref/DiffusionPDETerm.html (2026年に更新).
CMS
Wolfram Language. 2020. "DiffusionPDETerm." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2026. https://reference.wolfram.com/language/ref/DiffusionPDETerm.html.
APA
Wolfram Language. (2020). DiffusionPDETerm. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/DiffusionPDETerm.html
BibTeX
@misc{reference.wolfram_2026_diffusionpdeterm, author="Wolfram Research", title="{DiffusionPDETerm}", year="2026", howpublished="\url{https://reference.wolfram.com/language/ref/DiffusionPDETerm.html}", note=[Accessed: 12-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_diffusionpdeterm, organization={Wolfram Research}, title={DiffusionPDETerm}, year={2026}, url={https://reference.wolfram.com/language/ref/DiffusionPDETerm.html}, note=[Accessed: 12-September-2026]}