一般のn次元ベクトルを表す抽象クラス Vector と、それを継承した2次元ベクトル Vector2D を実装しよう。
- Vector.java に、すべてのベクトルに共通するフィールドと操作を実装する。
- LMSから入手した Vector2D.java に、コンストラクタと3つのベクトル演算を実装する。
- LMSで配布された VectorMain.java を使って動作を確認する。
VectorMain.java は修正・変更しないこと。
課題3(コーディング レベル3)
一般のn次元ベクトルを表す抽象クラス Vector と、それを継承した2次元ベクトル Vector2D を実装しよう。
extends VectorVectorがデータの持ち方と操作の形を定め、Vector2Dが2次元の場合の計算方法を完成させます。
s・u = (su₀, su₁)u・v = u₀v₀ + u₁v₁u + v = (u₀+v₀, u₁+v₁)| 種類 | 宣言 | 役割 |
|---|---|---|
| フィールド | private int dimension | ベクトルの次元 |
| フィールド | private double[] elements | 各要素。長さはdimension |
| コンストラクタ | Vector() | dimensionを2で初期化 |
| コンストラクタ | Vector(int dimension) | 次元と配列を初期化 |
| getter | int getDimension() | 次元を返す |
| setter | void setDimension(int dimension) | 次元を設定し、配列を作り直す |
| getter | double getElement(int i) | i番目の要素を返す |
| setter | void setElement(int i, double e) | i番目へeを設定 |
| メソッド | String toString() | (x1, x2, ..., xn) を返す |
| 抽象メソッド | double innerProduct(Vector v) | 内積を返す |
| 抽象メソッド | Vector scalarMultiplication(double scalar) | スカラー倍を返す |
| 抽象メソッド | Vector addVector(Vector v) | 加算したベクトルを返す |
setDimension ではdimensionを変更するだけでなく、elementsも新しい長さの配列として初期化します。| 種類 | 宣言 | 役割 |
|---|---|---|
| フィールド | なし | Vectorのelementsを利用 |
| コンストラクタ | Vector2D() | 親のdimensionを2で初期化 |
| コンストラクタ | Vector2D(double x, double y) | 次元を2とし、0番目へx、1番目へyを設定 |
| メソッド | double innerProduct(Vector v) | thisとvの内積 |
| メソッド | Vector scalarMultiplication(double scalar) | thisのスカラー倍 |
| メソッド | Vector addVector(Vector v) | thisとvの加算 |
abstract class として宣言しているprivate にしている> javac -encoding utf8 Vector*.java > java VectorMain v1 = (1.0, 2.0) v2 = (3.0, 4.0) scalar*v1 = 5.0*(1.0, 2.0) = (5.0, 10.0) v1 * v2 = (1.0, 2.0) * (3.0, 4.0) = 11.0 v1 + v2 = (1.0, 2.0) + (3.0, 4.0) = (4.0, 6.0)
public abstract class Vector {
private int dimension;
private double[] elements;
public Vector() {
// dimensionを2で初期化する
}
public Vector(int dimension) {
// dimensionとelementsを初期化する
}
public int getDimension() {
// dimensionを返す
}
public void setDimension(int dimension) {
// dimensionを設定し、elementsを作り直す
}
public double getElement(int i) {
// elementsのi番目を返す
}
public void setElement(int i, double e) {
// elementsのi番目へeを設定する
}
public String toString() {
// ベクトルを「(x1, x2, ..., xn)」の形で返す
}
abstract double innerProduct(Vector v);
abstract Vector scalarMultiplication(double scalar);
abstract Vector addVector(Vector v);
}public class Vector2D extends Vector {
public Vector2D() {
// スーパークラスのコンストラクタでdimensionを2にする
}
public Vector2D(double x, double y) {
// スーパークラスのコンストラクタでdimensionを2にする
// 0番目へx、1番目へyを設定する
}
public double innerProduct(Vector v) {
// thisとvの内積を返す
}
Vector scalarMultiplication(double scalar) {
// thisをscalar倍した新しいベクトルを返す
}
Vector addVector(Vector v) {
// thisとvを加算した新しいベクトルを返す
}
}// 3つのJavaファイルを同じフォルダに置いて実行
javac -encoding utf8 Vector*.java
java VectorMain