情報領域演習第一:P演習
電気通信大学情報理工学域I類 (情報系)
2024年度後学期
[一覧に戻る]
課題F3
問題
グラム・シュミットの直交化法は,線形代数において,空間の正規直交基底を得るための重要な手法である.ここでは,3次元の場合に限定して説明をする.
線形独立である3つの3次元実ベクトル $\mathbb{v}_1$, $\mathbb{v}_2$, $\mathbb{v}_3$ に対して,次の操作によって得られるベクトル $\mathbb{u}_1$, $\mathbb{u}_2$, $\mathbb{u}_3$と$\mathbb{e}_1$, $\mathbb{e}_2$, $\mathbb{e}_3$ を考える.
-
$\mathbb{u}_1 = \mathbb{v}_1$,
-
$\mathbb{u}_2 = \mathbb{v}_2 - \langle \mathbb{u}_1, \mathbb{v}_2\rangle/\langle\mathbb{u}_1, \mathbb{u}_1\rangle \mathbb{u}_1$,
-
$\mathbb{u}_3 = \mathbb{v}_3 - \langle\mathbb{u}_1, \mathbb{v}_3\rangle/\langle\mathbb{u}_1, \mathbb{u}_1\rangle \mathbb{u}_1 - \langle\mathbb{u}_2, \mathbb{v}_3\rangle/\langle\mathbb{u}_2, \mathbb{u}_2\rangle \mathbb{u}_2$,
-
$\mathbb{e}_1 = \mathbb{u}_1/\|\mathbb{u}_1\|$,
-
$\mathbb{e}_2 = \mathbb{u}_2/\|\mathbb{u}_2\|$,
-
$\mathbb{e}_3 = \mathbb{u}_3/\|\mathbb{u}_3\|$.
ただし,2つの3次元実ベクトル $\mathbb{u}=(u_x, u_y, u_z)^\top$, $\mathbb{v}=(v_x, v_y, v_z)^\top$ に対して,
$\langle\mathbb{u}, \mathbb{v}\rangle = u_x v_x + u_y v_y + u_z v_z$ という内積を表し,$\|u\| = \sqrt{ \langle u, u\rangle }$ である.
ベクトル $\mathbb{e}_1$, $\mathbb{e}_2$, $\mathbb{e}_3$ がグラム・シュミットの直交化法によって得られるベクトルである.
3次元実ベクトル $\mathbb{v}_1$, $\mathbb{v}_2$, $\mathbb{v}_3$ がこの順で与えられたとき,グラム・シュミットの直交化法によって得られるベクトル $\mathbb{e}_1$, $\mathbb{e}_2$, $\mathbb{e}_3$ を計算するCプログラムを作成せよ.
入力仕様
- 9個の数値がコマンドライン引数として与えられる.
- それらの数値は順に,$v_{1x}$, $v_{1y}$, $v_{1z}$, $v_{2x}$, $v_{2y}$, $v_{2z}$, $v_{3x}$, $v_{3y}$, $v_{3z}$ である.
- どの数値も $-100.000$ 以上 $100.000$ 以下である.
- 各数値の間には空白が1つ置かれている.
- ベクトル $\mathbb{v}_1$, $\mathbb{v}_2$, $\mathbb{v}_3$ は必ず線形独立である.より詳細に言えば,3次正方行列 $[\mathbb{v}_1, \mathbb{v}_2, \mathbb{v}_3]$ のフロベニウスノルムに関する条件数が $100.000$ 以下である.
出力仕様
- 出力は標準出力に行う.
- 9個の数値を出力し,数値の間に空白を1つ入れる.
- 9個の数値は順に,$e_{1x}$, $e_{1y}$, $e_{1z}$, $e_{2x}$, $e_{2y}$, $e_
{2z}$, $e_{3x}$, $e_{3y}$, $e_{3z}$ である.
- 小数点以下第3位まで出力する.
- 出力の後に改行する.
例
作成したプログラムのファイル名を f3.c としたときの実行例
% gcc -lm f3.c
% ./a.out 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 1.000
1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 1.000
% ./a.out 1.000 1.000 1.000 1.000 2.000 3.000 1.000 4.000 9.000
0.577 0.577 0.577 -0.707 0.000 0.707 0.408 -0.816 0.408
% ./a.out 1.000 0.000 0.000 1.000 1.000 1.000 -1.000 -2.000 3.000
1.000 0.000 0.000 0.000 0.707 0.707 0.000 -0.707 0.707
% ./a.out 1.234 2.345 3.456 4.567 5.678 6.789 -7.890 -8.901 9.012
0.283 0.538 0.794 0.868 0.208 -0.451 0.408 -0.816 0.408
提出法
CEDにて,プログラムを作成したディレクトリで以下を実行せよ.
% /ced-home/staff/enshu1p/checker_f3.rb ファイル名
「Submission successfully completed.」と表示されれば,提出が完了したことになる.
[一覧に戻る]