• 締切済み

偏微分の計算(上下左右対称な拡散の計算)

以下の偏微分の数値計算をしたいと思っています.(添え字などが分かりにくく,申し訳ありません.) ∂C(x,y,t)/∂t=▽{D(φ(x,y))▽C} 計算領域はx-y方向共に500分割されていて,1つの分割長をΔxとします.Dがφ(x,y)の関数なので前に出してD▽^2Cの形にはできません.このとき,以下の考え方が合っているのか教えていただきたいです.お願いします. 簡単のためにx方向だけで考えることにします.まず,後ろ(▽C)の部分を計算します. (▽C)[i]=(C[i+1]-C[i])/Δx.ここで(▽C)[i],C[i]は▽CおよびCのx方向のi番目の要素とします. i番目の▽Cができたので,それを使って前の部分を計算します. ∂C(x,y,t)/∂t={(D[i+1](▽C)[i+1])-(D[i](▽C)[i])}/Δx. この方法で計算はできるのでしょうか? もし,これで良いとすると例えば中心部から左右に対称(上下も同様)に拡散していく計算はできないことにならないでしょうか?Dを前に出せれば左右対称の計算結果になることは分かりますが,Dを前に出せない場合に左右対称にするための計算方法が分からず困っています.「対称なので半分の領域で計算すれば良い」という回答はなしでお願いします.上の考え方が合っているor間違っているだけでなく,正しい解法を教えていただけると助かります.

  • yodel
  • お礼率75% (6/8)

みんなの回答

  • m0r1_2006
  • ベストアンサー率36% (169/464)
回答No.1

普通は,中心差分を使うけど (▽C)[i] = (C[i+1]-C[i-1])/(2△x) 全部の変数がテーラー展開できると仮定して,偏微分が △x の何次まで 近似できているか調べましょう. >これで良いとすると例えば中心部から左右に対称(上下も同様)に拡散していく計算はできないことにならないでしょうか よくある話です.まあ拡散方程式だから,それほど変にはならないと思うけど.△x と △ t の比率も重要です.

yodel
質問者

補足

ご回答ありがとうございます. 中心差分やΔxとΔtの比率などの教科書的なことについては承知しています.それでも実際にプログラムを作るときに対称性がなくなって困っています.その点の解決策が分かればお願いいたします.

関連するQ&A

  • 基本対称式、イデアル

    T=ΣC[x1,x2,...,xn]ei (←Σはi=1からnまでの和)  ={Σfi(x)ei |fi(x)∈C[x1,...,xn]} Tをこのようにおきます。 (後半は集合として表しています。) ___________________ 【注意点】 C[x1,x2,...,xn]はn変数複素係数多項式環 eiは基本対称式を表しています。 (※xnのnは添え字です。) (※ei、fi(x)のiは添え字です。)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ このTに関して次のようなことが言えるのですが、 どのような意味なのか理解することができません。 どなたか、以下の事をもう少し分かりやすく教えて いただけないでしょうか。 基本対称式{ei|1≦i≦n}を含むようなイデアルはすべてTを含むので、Tは基本対称式を含むような最小のイデアルである。 このようなとき、Tは基本対称式によって生成された イデアルといいT=<ei|1≦i≦n>と表す。

  • 対称式の偏微分

    二変数の偏微分で対称式の形になっているときに、偏微分のXとY両方を求めるときにまずXだけ真面目に計算してYのときはXの結果を流用してXとYを入れ替えているのですが。定期テストなどでこの方法はまずいですか?

  • 微分の計算のやり方を教えてください。

    質問(1) x=Dcos(Ω(t-τ))+Esin(Ω(t-τ))+C/Ω^2 D,Eは積分定数。 このxを一回微分して、 y''=-DΩsin(Ω(t-τ))+EΩcos(Ω(t-τ)) この部分はどうやっているのですか?途中計算などやり方を教えてください。 質問(2) よってyはこれを2回積分して、 y=-DΩsin(Ω(t-τ))+EΩcos(Ω(t-τ)) =Dcos(Ω(t-τ))+Esin(Ω(t-τ))+Ft+G F,Gは積分定数。 この計算がどうやっているのかわからないので教えてください。

  • VBAでの拡散計算

    エクセルのVBAを使って添付画像のようなグラフを作成しようと考えています。 以下の計算で作成できそうなのですが、⊿tを10-5より小さく設定し、1000sec~の濃度変化が知りたいため表計算ではなくVBAを使ってみました。 表計算では、 t=0のときx0=C0(飽和濃度)、x>x0でC=0とし(初期条件) x0では、 C(j+1,i) = C(j,i) +D * ( C(j,i-1) - C(j,i) ) / dx / dx * dt x >x0では、 C(j+1,i) = C(j,i) +D * ( C(j,i-1) - 2 * C(j,i) + C(j,i+1) ) / dx / dx * dt の計算を行い、セル表記が以下のようになりました。どの時間も物質量は一定です。(たぶん・・・)   t0、t1、t2、t3t、・・・ x1,60、58.8、57.6・・・ x2, 0、 1.2、2.38・・・ x3, 0、 0、0.02・・・ 上の計算をVBAで以下のように書いてみました。 Sub diffusion_dry_up2() Dim n As Integer, nt As Integer Dim i As Integer, j As Integer Dim b As Double, te As Double, dt As Double Dim c0 As Double, cs As Double, d As Double Dim x As Double, dx As Double, t As Double Dim a As Double, cjp As Double, cj0 As Double Dim cjm As Double b = InputBox("配管の長さb(m)") n = InputBox("配管の長さの方向分割数n") te = InputBox("計算する時間長t(sec)") dt = InputBox("時間増分dt(m)") c0 = InputBox("配管底部の濃度c0(vol.%)") cs = InputBox("時刻t=0の時の配管内の濃度cs(vol.%)") d = InputBox("拡散係数d(m^2/sec)") Sheet1.Cells(1, 2) = "配管の長さb(m)" Sheet1.Cells(2, 2) = "配管の長さの方向分割数n" Sheet1.Cells(3, 2) = "計算する時間長t(sec)" Sheet1.Cells(4, 2) = "時間増分dt(sec)" Sheet1.Cells(5, 2) = "配管底部の濃度c0(vol.%)" Sheet1.Cells(6, 2) = "時刻t=0の時の配管内の濃度cs(vol.%)" Sheet1.Cells(7, 2) = "拡散係数(m^2/sec)" Sheet1.Cells(1, 3) = b Sheet1.Cells(2, 3) = n Sheet1.Cells(3, 3) = t Sheet1.Cells(4, 3) = dt Sheet1.Cells(5, 3) = c0 Sheet1.Cells(6, 3) = cs Sheet1.Cells(7, 3) = d nt = te / dt dx = b / n Sheet1.Cells(1, 1) = nt t = 0 a = d * dt / dx ^ 2 Sheet1.Cells(1, 5) = t Sheet1.Cells(1 + 1, 4) = -dx Sheet1.Cells(1 + 2, 5) = c0 Sheet1.Cells(1 + n + 2, 4) = b + dx Sheet1.Cells(1 + n + 3, 5) = cs Sheet1.Cells(3, 5 + i) = a * (-cj0 + cjp) + cj0 For i = 1 To nt t = t + dt Sheet1.Cells(1, 5 + i) = t Sheet1.Cells(1 + n + 3, 5 + i) = a * (cjp - 2 * cjo + cjm) + cj0 For j = 2 To n + 2 cjp = Sheet1.Cells(1 + j + 1, 5 + i - 1) cj0 = Sheet1.Cells(1 + j + 0, 5 + i - 1) cjm = Sheet1.Cells(1 + j - 1, 5 + i - 1) Next j Next i linegraph 2, 4, 4 + n, nt + 2 End Sub Sub linegraph(sr As Integer, sc As Integer, lr As Integer, lc As Integer) ActiveSheet.ChartObjects.Add(200, 10, 240, 200).Select ActiveChart.ChartWizard _ Source:=Range(Cells(sr, sc), Cells(lr, lc)), _ gallery:=xlXYScatter, _ Format:=3, _ PlotBy:=xlColumns, _ categoryLabels:=1, _ SeriesLabels:=0, _ HasLegend:="false", _ Title:="ex2", _ categoryTitle:="t", _ ValueTitle:="y", _ ExtraTitle:="" End Sub しかしまったく表計算のようになりませんでした。 a = d * dt / dx^2以降の書き込みが変だと思うのですが、どのようにすればよいのでしょうか。 また、上のような表記ではtを大きくdtを小さくするとエラーになってしまいます。 質問項目が多いですが、よろしくお願いします。

  • 領域の対称と分かる理由にて。画像の(2)にて、

    領域Dがx軸、y軸について対称というのはなんで分かったんですか?

  • 拡散方程式の数値計算(有限差分法)による解き方

    下記の拡散方程式を数値計算(有限差分法)で解き方について教えてください。 拡散方程式 D∂^2C(x,y,t)/∂x^2+u∂C(x,y,t)/∂x=∂C(x,y,t)/∂t 境界条件 D∂C(x,y,t)/∂x=(K/β-u)×C(x,y,t)-KC'(y,t) at x=0 初期条件 C(x,y,0)=Co at t=0 質量保存則 ∂C'(y,t)/∂y=4/vd(K/β×C(0,y,t)-KC'(y,t) ) ---------------------------------------------------------- また、可能であれば、有限差分法以外にも数値解法(有限要素法、有限体積法など)があると思いますが、拡散方程式を解く場合、どの解法が一般的に適しているのか教えてください! よろしくお願い申し上げます。

  • 放物線対称

    放物線C1:y=x^2と点A(1,-1)がある。C1上に点P(t,t^2)を考えるとき、Aに関して、Pと対称な点P'の座標をtを用いて表せ。またAに関してC1と対称な図形の方程式も表せ。 こういう問題です。 どうしても解答が欲しいので、オネガイシマスm(__)m

  • 媒介変数のグラフの対称性について。

    媒介変数、x(t)=cos(t+π/4),y(t)=cos(2t)(0≦t<2π)で与えられているとき、このグラフのx軸、y軸に対する対称性がなぜ、{x(-t)=x(t)、y(-t)=-y(t)}(←x軸に対する対称性)、{x(t+π)=-x(t),y(t+π)=y(t)}(←y軸に対する対称性)で与えられるのかが分かりません。また、なぜ、x、y軸に対する対象性を調べるとき、x(t)、y(t)両方調べなくてはいけないのかも分かりません。よろしければご教授願います。

  • 対称性に関して

    x=4cost-2cos2t y=4sint-2sin2t という軌跡関して、x軸に対称であるというのはどこからわかるんでしょうか。 ご教示お願い致します。

  • x軸対称

    例えば0≦t≦πでnを自然数としてx(t)=sinx, y(t)=sin2nxとすると、x(π-t)=x(t),y(π-t)=-y(t)ですが、なぜここからx軸対称が言えるのでしょうか。 また一般な三角関数系の関数でどういう時にx軸、y軸、原点対称が言えるのでしょうか

専門家に質問してみよう