Main Content

pdeval

説明

[u,dudx] = pdeval(m,xmesh,usol,xq) は、新しいクエリ点 xqpdepe によって返された数値解を内挿し、解の内挿値 u とそれらの偏導関数 dudx を返します。mxmesh、および usol の各引数は、pdepe の前回の呼び出しから再利用されます。

  • sol = pdepe(m,@pdefun,@pdeic,@pdebc,xmesh,tspan) によって生成される数値解は、座標の対称性 m と空間メッシュ xmesh を使用して、解の値の 3 次元行列 sol を返します。pdeval を呼び出すときに、解の計算に使用した mxmesh の入力を再利用します。

  • 入力ベクトル usol = sol(i,:,k) は、時間 tspan(i) における解の要素 k の値です。解の要素が 1 つしかない場合、usol は解の行列 usol = sol(i,:) から抽出された行になります。

すべて折りたたむ

pdepe を使用して偏微分方程式を解いてから、pdeval を使用して追加の点における解を計算します。

PDE の求解

pdepe を使用して pdex1 の例の問題を解きます。edit pdex1 と入力すると問題の詳細を確認できます。PDE の解法プロセスの詳細については、pdepeを参照してください。pdex1 の問題を解くために必要な関数は、この例の最後にローカル関数として含まれています。

m = 0;
x = linspace(0,1,20);
t = linspace(0,2,5);
sol = pdepe(m,@pdex1pde,@pdex1ic,@pdex1bc,x,t);

解の内挿

pdepe によって生成された解 sol は、x に対し、0 と 1 の間に等間隔に配置された 20 個の点を使用します。pdepe で使用された各点の間の中間に配置したクエリ点のベクトルを作成します。

xq = x;
xq(1:end-1) = xq(1:end-1) + diff(xq)./2;

pdeval を使用して、クエリ点で解を内挿します。解の要素は 1 つしかないため、sol(2,:) などの操作対象の sol から行を抽出できます。

[u,dudx] = pdeval(m,x,sol(2,:),xq);

pdepe によって計算された解と、pdeval によって計算された内挿された解およびその偏微分をプロットします。

plot(x,sol(2,:),'r*')
hold on
plot(xq,u,'-o')
plot(xq,dudx,'.')
hold off
legend('PDEPE Solution', 'PDEVAL Interpolation', 'PDEVAL Partial Derivative')

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent PDEPE Solution, PDEVAL Interpolation, PDEVAL Partial Derivative.

ローカル関数

ここでは、PDE ソルバー pdepe が解を計算するために呼び出すローカル補助関数を紹介しています。

function [c,f,s] = pdex1pde(x,t,u,DuDx)
c = pi^2;
f = DuDx;
s = 0;
end
% ------------------------------------------------------
function u0 = pdex1ic(x)
u0 = sin(pi*x);
end
% ------------------------------------------------------
function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)
pl = ul;
ql = 0;
pr = pi * exp(-t);
qr = 1;
end

入力引数

すべて折りたたむ

pdepe で使用された座標の対称性。次の表のいずれかの値として指定します。pdepe の最初の呼び出しで使用したものと同じ座標の対称性を指定します。

対称性

0

スラブ/直交

1

円柱

2

球面

pdepe で使用された空間メッシュ。数値解が計算された点を含むベクトル [x0 x1 ... xn] として指定します。pdepe の最初の呼び出しで使用したものと同じ空間メッシュを指定します。

データ型: single | double

抽出された解の要素。特定の時間の 1 つの解の要素について、pdepe によって計算された値のベクトルとして指定します。

pdepe は、解を 3 次元配列 sol で返します。ここで、sol(i,j,k) は、時間 t(i) および空間点 xmesh(j) で計算された解の k 番目の要素 u k を近似します。コマンド usol = sol(i,:,k) を使用すると、入力 usol を作成できます。ここで、sol(i,:,k) は、空間メッシュ xmesh 全体で計算された、時間 tspan(i) における解の要素 k の値です。解の要素が 1 つしかない場合、usol は解の行列 usol = sol(i,:) から抽出された行になります。

例: usol = sol(10,:,2) は、時間 tspan(10) で計算された 2 番目の解の要素を抽出します。

例: usol = sol(5,:) は、時間 tspan(5) で計算された解を抽出します。

データ型: single | double
複素数のサポート: あり

クエリ点。スカラーまたは x 座標のベクトルとして指定します。xq で指定した点は、区間 [min(xmesh) max(xmesh)] 内になければなりません。

通常、pdepe によって生成された解を pdeval がより細かいメッシュで計算できるように、xq の点に xmesh の範囲内の値を指定します。

例: xq = linspace(0,1,100) は、0 と 1 の間の 100 個の等間隔のクエリ点を指定します。

データ型: single | double
複素数のサポート: あり

出力引数

すべて折りたたむ

内挿された解。xq と同じサイズのベクトルとして返されます。

内挿された解の偏導関数。xq と同じサイズのベクトルとして返されます。

ヒント

  • 関数 pdeval は、流束 f(x,t,u,ux) ではなく偏導関数 ux を評価します。流束は連続ですが、偏導関数は物体の境界でジャンプする可能性があります。

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2006a より前に導入