極座標による複素数クラス 拡散方程式の基本解

目次 解答例(ないかも)

締切は 2002/09/25. ただし, 2002/07/12 中にチェックされた分は点数を 2 倍で計算します. お薦め課題: なし.

課題じゃないけど, 先週の講義の quiz を Mathematica で解いたです. ディスクにセーブして Mathematica で開いてね.

課題13_01 極座標による複素数クラス

課題10_01 で完成させた Complex クラスは, データメンバ realPart,imagPart を持っていた. (現在のものを別名で保存した上で)Complex クラスを書き換えて, データメンバとして, (r,θ)=absValue,argValue を持つようなクラスで, メソッドとしては現在と全く同じ振舞いをするような クラスを作ろう. すなわち,

class Complex {
    private double absValue;
    private double argValue;

    Complex(double re, double im){
// ちょっと難しい鴨. re >= 0, im >= 0 に限ってもいいよ.
//  略
    }	


// 中略

    public double getAbs(){
	return absValue;
    }

    public double getReal(){
	return absValue*Math.cos(argValue);
    }

// 以下略
}
のような感じ.

振舞いがまったく変わらないことを, Sample10_01 から利用することで確かめよう.

このような Complex の実装は, 課題10_01 の実装に比べて, 積, 商の計算の効率が良く, 和, 差の計算の効率は悪いことがわかる.

このように, 内部の実装に左右されるような "使い方"ができないようにしておくことを, カプセル化, 実装の隠蔽などという. ( 計算機科学的に正確な説明ではありません )

実装が隠蔽されていると, 開発者の都合によって実装が変更されたときにも, "使い方" を変える必要がないという利用者側からみた利点がある.

オブジェクト指向プログラミングのひとつの特徴は, カプセル化, 実装の隠蔽が容易に, 完全に行えることである.

課題13_02 拡散方程式の基本解

範囲-2.0 ≤ x ≤ 2.0,0.0 ≤ t ≤ 1で 拡散方程式 df/dt(x,t)= D · d2f/dx2(x,t) を考えよう. ただし, D=0.5

次の2つの状況で陰解法で解こう. その方が便利なら,これまでに作成したクラスを適当に継承して利用しよう.

  1. 初期条件 f(x,0)=cos(π x/2). ノイマン境界条件 df/dx(-2,t)=df/dx(2,t)=0
  2. 初期条件 f(x,0)=2exp(-2x2). ディリクレ境界条件 f(-2,t)=f(2,t)=(0.25+t)-1/2 exp(-2/(0.25+t))
それぞれ, Mathematica notebook
sol13.nb を 利用して厳密解と比較しよう.


Copyright © 2002 Saburo Higuchi. All rights reserved.
Saburo HIGUCHI, hig mail address
最後の更新は次の時刻以降 2002/07/02 Tue 09:37