ブログ

統計検定準1級 問題解説 ~2016年6月実施 選択問題及び部分記述問題 問3~

過去問

過去問題は統計検定公式が問題と解答例を公開しています。こちらを参照してください。

解説

[1] 解答

$\boxed{ \ \mathsf{記述5}\ }$ : $5.7$

問い合わせ回数の平均 $\bar{X}$ は,


$$
\bar{X} = \dfrac{6+4+5+3+6+8+10}{7} = 6
$$


よって,$\chi ^2$ 統計量を $\chi ^2$ と書くことにすると
$$
\begin{align*}
\chi ^2 &= \{(6-6)^2+(4-6)^2+(5-6)^2+(3-6)^2 \\
& \qquad \qquad+(6-6)^2+(8-6)^2+(10-6)^2 \} /6 \\
&= \dfrac{34}{6} \approx 5.7
\end{align*}
$$

[2] 解答

$\boxed{ \ \mathsf{記述6}\ }$ : 曜日によって問い合わせの回数が異なるとはいえない
「曜日によって問い合わせの回数が異ならない」という帰無仮説の下で$\chi^2$ 統計量は近似的に自由度 $6$ の$\chi ^2$分布に従う.
$$
5.7 < \chi ^2 _{0.05}(6) = 12.59
$$

であるから,この帰無仮説は棄却されない(曜日によって問い合わせの回数が異なるとはいえない).

【Julia入門】Juliaの関数② Juliaの関数の引数

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaの関数の引数について取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

引数

可変長引数

可変長引数はx...のように...を変数につけることで表します。下記が可変長引数の実行例です。

function f(x...)
    sum = 0
    for i = 1:length(x)
        sum += x[i]
    end
    sum
end

println(f(3))
println(f(3,5))
println(f(3,5,7))

・実行結果

3
8
15

可変長引数は関数の最後の引数のみに設定できることも合わせて抑えておくと良いです。

g1(x, y...) = (x,y)
println(g1(1,2,3))

・実行結果

(1, (2, 3))

たとえば上記のようにg1(x, y...)は実行可能ですが、下記のようなg2(x..., y)を実行するとシンタックスエラーが出力されます。

g2(x..., y) = (x,y)

・実行結果

syntax: invalid "..." on non-final argument around In[2]:1

オプショナル引数

Juliaにおける関数の引数は下記のようにデフォルトの値を設定しておくことで、引数の使用の省略が可能になります。

f(x,y=1) = x+y
println(f(2))
println(f(2,5))

・実行結果

3
7

オプショナル引数の設定にあたっては可変長引数と同様に引数の末尾に置く必要があることに注意が必要です。

f1(x,y=1,z=2) = x+y+z
println(f1(3))

・実行結果

6

上記は実行可能ですが、下記のようにオプショナル引数の後に通常の引数を設定するとシンタックスエラーとなります。

f2(x=3,y,z) = x+y+z

・実行結果

syntax: optional positional arguments must occur at end around In[3]:1

キーワード引数

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

Ch.26 「テイラーの公式と極値問題」の演習問題の解答例 〜統計学のための数学入門30講〜

当記事は「統計学のための数学入門$30$講(朝倉書店)」の読解サポートにあたってChapter.$26$の「テイラーの公式と極値問題」の章末問題の解答の作成を行いました。
基本的には書籍の購入者向けの解説なので、まだ入手されていない方は購入の上ご確認ください。また、解説はあくまでサイト運営者が独自に作成したものであり、書籍の公式ページではないことにご注意ください。

・書籍解答まとめ
https://www.hello-statisticians.com/answer_textbook_math#math_stat

本章のまとめ

演習問題解答

問題$26.1$

問題$26.2$

$[1]$
$f(x,y)=x^3+xy^2+2x^2+y^2$の偏微分$f_x, f_y$は下記のように計算できる。
$$
\large
\begin{align}
f_x &= 3x^2 + y^2 + 4x \quad (1) \\
f_y &= 2xy + 2y \quad (2)
\end{align}
$$

$(2)$式に基づいて$f_y=2y(x+1)=0$を解くと$x=-1,y=0$が得られる。ここで$x=-1$を$f_x=0$に代入すると下記が得られる。
$$
\large
\begin{align}
f_x = 3 + y^2 – 4 &= 0 \\
y^2 &= 1 \\
y &= \pm 1
\end{align}
$$

また、$y=0$を$f_x=0$に代入すると下記が得られる。
$$
\large
\begin{align}
f_x = 3x^2 + y^2 + 4x &= 0 \\
x(3x+4) &= 0 \\
x &= 0, \, -\frac{4}{3}
\end{align}
$$

$[2]$

【Julia入門】Juliaの関数① Juliaの関数の定義

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaの関数の定義について取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

関数の定義

オーソドックスな関数の定義

Juliaにおけるオーソドックスな関数の定義にあたってはfunctionendを用いることで下記のような処理を実行します。

function add(x,y)
    return x + y
end

println(add(1,2))
println(add(2,3))

・実行結果

3
5

関数の簡易的な定義

前項ではフォーマルな関数の定義の方法について確認を行いましたが、下記のように簡易的に定義を行うことも可能です。

add(x,y) = x + y
println(add(1,2))
println(add(2,3))

・実行結果

3
5

上記のadd(x,y)=x+yは$f(x,y)=x+y$のような数式における関数の定義と対応させながら抑えておくと良いと思います。また、下記のように複数の戻り値を返すように関数の定義を行うことも可能です。

sum_diff(x,y) = (x+y, x-y)
print(sum_diff(2,3))

・実行結果

(5, -1)

関数の定義における型指定

引数の型指定

関数の定義にあたっては下記のように引数の型を指定することができます。

function add_typed(x::Int, y::Int)
    return x + y
end

println(add_typed(1,2))
println(add_typed(2,3))
println(add_typed(2,3.5))

・実行結果

3
5
MethodError: no method matching add_typed(::Int64, ::Float64)

上記では3行目の3.5Int型ではないことでMethodErrorが出力されたことが確認できます。

戻り値の型指定

前項では「引数の型指定」を取り扱いましたが、下記のように戻り値の型指定も行うことができます。

function add_typed(x::Int, y::Int)::Float64
    return x + y
end

println(add_typed(1,2))
println(add_typed(2,3))

・実行結果

3.0
5.0

上記ではadd_typed(x::Int, y::Int)::Float64のように関数を定義することで戻り値がFloat型で得られたことが確認できます。

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

【Julia入門】Juliaの制御構文② Juliaのループ構文 〜while文・for文〜

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaのループ構文の使い方について取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

while文を用いたループ

while文は下記のように条件式が成立する限りループ処理を行う構文です。

i = 1
while i <= 5
    println(i)
    i += 1
end

・実行結果

1
2
3
4
5

for文を用いたループ

for文は定義した配列に基づくインデックスを用いたループ処理です。下記のような構文を元に処理を実行することができます。

for i = 1:5
    println(i)
end

・実行結果

1
2
3
4
5

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

逐次2次計画法(SOP法)を用いた制約付き問題の近似解の計算

逐次$2$次計画(SOP; Successive Quadratic Programming)法は制約付き最適化問題の近似解を計算するにあたって用いられる手法です。当記事では逐次$2$次計画法の概要や数式、Pythonを用いた実際の計算例について取り扱いました。
「新版 数理計画入門(朝倉書店)」の$4.9$節の「逐次$2$次計画法」などの内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

前提の確認

問題設定

当記事では下記のような目的関数$f(\mathbf{x})$の制約付き最適化問題を定義し、以下取り扱う。
$$
\large
\begin{align}
\mathrm{Objective} : \quad & f(\mathbf{x}) \, \rightarrow \, \mathrm{Minimize} \\
\mathrm{Constraint} : \quad & c_i(\mathbf{x}) = 0 \quad (i=1, 2, \cdots ,l)
\end{align}
$$

上記に対し、KKT条件は下記のように表される。
$$
\large
\begin{align}
& \nabla f(\mathbf{x}) + \sum_{i=1}^{n} \lambda_i \nabla c_i(\mathbf{x}) = \mathbf{0} \quad (1) \\
& c_i(\mathbf{x}) = 0 \qquad (i=1, \cdots, l)
\end{align}
$$

また、ラグランジュ関数$L(\mathbf{x},\boldsymbol{\lambda})$を下記のように定義する。
$$
\large
\begin{align}
L(\mathbf{x},\boldsymbol{\lambda}) = f(\mathbf{x}) + \sum_{i=1}^{n} \lambda_i c_i(\mathbf{x})
\end{align}
$$

このときラグランジュ関数$L(\mathbf{x},\boldsymbol{\lambda})$の勾配ベクトル$\nabla L(\mathbf{x},\boldsymbol{\lambda})$は下記のように表すことができる。
$$
\large
\begin{align}
\nabla L(\mathbf{x},\boldsymbol{\lambda}) &= \left(\begin{array}{c} \nabla_{x} L(\mathbf{x},\boldsymbol{\lambda}) \\ \nabla_{\lambda} L(\mathbf{x},\boldsymbol{\lambda}) \end{array} \right) \\
&= \left(\begin{array}{c} \displaystyle \nabla f(\mathbf{x}) + \sum_{i=1}^{n} \lambda_i \nabla c_i(\mathbf{x}) \\ \mathbf{c}(\mathbf{x}) \end{array} \right) \quad (1) \\
\mathbf{c}(\mathbf{x}) &= \left(\begin{array}{c} c_1(\mathbf{x}) \\ \vdots \\ c_l(\mathbf{x}) \end{array} \right)
\end{align}
$$

ここでKKT条件は$(1)$式を元に下記のように表すことができる。
$$
\large
\begin{align}
\nabla L(\mathbf{x},\boldsymbol{\lambda}) = \left(\begin{array}{c} \displaystyle \nabla f(\mathbf{x}) + \sum_{i=1}^{n} \lambda_i \nabla c_i(\mathbf{x}) \\ \mathbf{c}(\mathbf{x}) \end{array} \right) = \left(\begin{array}{c} 0 \\ \vdots \\ 0 \\ 0 \\ \vdots \\ 0 \end{array} \right) = \mathbf{0}
\end{align}
$$

多次元ベクトル値関数に基づく連立方程式とニュートン法

前項ではKKT条件が$\nabla L(\mathbf{x},\boldsymbol{\lambda}) = \mathbf{0}$のように表せることの確認を行なった。このKKT条件を$\mathbf{x},\boldsymbol{\lambda}$について解くにあたっては、$1$次のテイラー展開に基づくニュートン法を活用することで近似解が得られる。

当項では以下、$p$次元ベクトル$\mathbf{z}$を元に定義する$p$次元ベクトル値関数$\mathbf{F}(\mathbf{z})$に関する方程式$\mathbf{F}(\mathbf{z})=\mathbf{0}$について、ニュートン法に基づいて近似解を得る手順について確認を行う。

まず$p$次元ベクトル$\mathbf{z}$、$p$次元ベクトル値関数$\mathbf{F}(\mathbf{z})$を下記のように定義する。
$$
\large
\begin{align}
\mathbf{z} &= \left(\begin{array}{c} z_1 \\ \vdots \\ z_p \end{array} \right) \\
\mathbf{F}(\mathbf{z}) &= \left(\begin{array}{c} F_1(\mathbf{z}) \\ \vdots \\ F_p(\mathbf{z}) \end{array} \right)
\end{align}
$$

上記で定めた$p$次元ベクトル値関数$\mathbf{F}(\mathbf{z})$に対して、勾配ベクトル$\nabla F_i(\mathbf{z})$を第$i$列とする$p \times p$正方行列を$\nabla \mathbf{F}(\mathbf{z})$とおくと、$\nabla \mathbf{F}(\mathbf{z})$は下記のように表せる。
$$
\large
\begin{align}
\nabla \mathbf{F}(\mathbf{z}) &= \left(\begin{array}{ccc} \nabla F_1(\mathbf{z}) & \cdots & \nabla F_p(\mathbf{z}) \end{array} \right) \\
&= \left(\begin{array}{ccc} \displaystyle \frac{\partial F_1(\mathbf{z})}{\partial z_1} & \cdots & \displaystyle \frac{\partial F_p(\mathbf{z})}{\partial z_1} \\ \vdots & \ddots & \vdots \\ \displaystyle \frac{\partial F_1(\mathbf{z})}{\partial z_p} & \cdots & \displaystyle \frac{\partial F_p(\mathbf{z})}{\partial z_p} \end{array} \right)
\end{align}
$$

上記に基づいてニュートン法の漸化式が下記のように得られる。
$$
\large
\begin{align}
\mathbf{F}(\mathbf{z}^{(k)}) + \nabla \mathbf{F}(\mathbf{z}^{(k)})^{\mathrm{T}} (\mathbf{z}^{(k+1)} – \mathbf{z}^{(k)}) &= \mathbf{0} \\
\mathbf{z}^{(k+1)} – \mathbf{z}^{(k)} &= -\left[ \nabla \mathbf{F}(\mathbf{z}^{(k)})^{\mathrm{T}} \right]^{-1} \mathbf{F}(\mathbf{z}^{(k)}) \\
\mathbf{z}^{(k+1)} &= \mathbf{z}^{(k)} – \left[ \nabla \mathbf{F}(\mathbf{z}^{(k)})^{\mathrm{T}} \right]^{-1} \mathbf{F}(\mathbf{z}^{(k)})
\end{align}
$$

逐次2次計画法の数式

「多次元ベクトル値関数に基づく連立方程式とニュートン法」では$\mathbf{F}(\mathbf{z})=\mathbf{0}$を取り扱ったが、逐次$2$次計画法ではKKT条件の式$\nabla L(\mathbf{x},\boldsymbol{\lambda}) = \mathbf{0}$に対してニュートン法を適用する。

KKT条件の式$\nabla L(\mathbf{x},\boldsymbol{\lambda}) = \mathbf{0}$に関するニュートン法の漸化式は下記のように表すことができる。
$$
\large
\begin{align}
\nabla L(\mathbf{x},\boldsymbol{\lambda}) + \nabla^{2} L(\mathbf{x},\boldsymbol{\lambda}) \left(\begin{array}{c} \mathbf{x}^{(k+1)} – \mathbf{x}^{(k)} \\ \boldsymbol{\lambda}^{(k+1)} – \boldsymbol{\lambda}^{(k)} \end{array} \right) &= \mathbf{0} \\
\left(\begin{array}{c} \mathbf{x}^{(k+1)} \\ \boldsymbol{\lambda}^{(k+1)} \end{array} \right) &= \left(\begin{array}{c} \mathbf{x}^{(k)} \\ \boldsymbol{\lambda}^{(k)} \end{array} \right) – \left[ \nabla^{2} L(\mathbf{x},\boldsymbol{\lambda}) \right]^{-1} \nabla L(\mathbf{x},\boldsymbol{\lambda})
\end{align}
$$

ここで上記の$\nabla L(\mathbf{x},\boldsymbol{\lambda}), \nabla^{2} L(\mathbf{x},\boldsymbol{\lambda})$は下記のように表される。
$$
\large
\begin{align}
\nabla L(\mathbf{x},\boldsymbol{\lambda}) &= \left(\begin{array}{c} \displaystyle \nabla f(\mathbf{x}) + \sum_{i=1}^{n} \lambda_i \nabla c_i(\mathbf{x}) \\ \mathbf{c}(\mathbf{x}) \end{array} \right) \\
\nabla^{2} L(\mathbf{x},\boldsymbol{\lambda}) &= \left(\begin{array}{cc} \nabla_{x}^{2} L(\mathbf{x},\boldsymbol{\lambda}) & \nabla \mathbf{c}(\mathbf{x}) \\ \nabla \mathbf{c}(\mathbf{x})^{\mathrm{T}} & \mathbf{0} \end{array} \right) \\
\nabla \mathbf{c}(\mathbf{x}) &= \left(\begin{array}{ccc} \nabla c_1(\mathbf{x}) & \cdots & \nabla c_l(\mathbf{x}) \end{array} \right)
\end{align}
$$

逐次2次計画法の計算例

【Julia入門】Juliaの制御構文① Juliaの条件評価 〜if-else〜

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaの条件評価の使い方について取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

条件評価

if-else

条件評価を行うにあたってJuliaに限らず様々なプログラムで用いられるのがif-elseです。Juliaではif-elseは下記のように用いることができます。

x = 3; y = 2

if x < y
    println("x is less than y")
elseif x > y
    println("x is greater than y")
else
    println("x is equal to y")
end

・実行結果

x is greater than y

三項演算子

if-else構文を$1$行で表すにあたって用いられるのが三項演算子です。Juliaにおける三項演算子は下記のように用いることができます。

x = 100
println(x > 100 ? true : false)
println(x > 100 ? "x > 100" : "x >= 100")

・実行結果

false
x >= 100

andとor

条件評価を行う際に$2$つの条件のandorを取り扱うことは多いです。Juliaではand条件を&&を用いて表すことができます。

println(true && true)
println(true && false)
println(false && false)

・実行結果

true
false
false

同様にor条件は||を用いることで表すことができます。

println(true || true)
println(true || false)
println(false || false)

・実行結果

true
true
false

上記はBool型のtruefalseを用いて表しましたが、下記のように実際の不等号に対しても&&||を用いることができます。

println(1>0 && 2<1)
println(1>0 || 2<1)

・実行結果

false
true

and条件とor条件は数学の集合における「積集合」と「和集合」と対応させて抑えておくと良いと思います。

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

【Julia入門】Juliaの基本事項⑧ Juliaにおける正規表現の取り扱い

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaにおける正規表現の取り扱いについて取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

正規表現

正規表現の概要

正規表現は文字列の検索などの際に用いられる表現方法で、たとえば「Jで始まりgで終わる文字列」のように文字列のパターンを表す目的で用いられます。

正規表現の定義

Jで始まりgで終わる文字列」の正規表現は下記のように作成できます。

regex = r"J.*g"
println(regex)
println(typeof(regex))

・実行結果

r"J.*g"
Regex

match関数

正規表現を用いて文字列のパターンマッチングを行うにあたっては、下記のようにmatch関数を用いれば良いです。

regex = r"J.*g"
m = match(regex, "JuliaLang is the best")
println(m)

・実行結果

RegexMatch("JuliaLang")

ここでmatch関数の戻り値はRegexMatch型のオブジェクトで得られ、RegexMatch型のオブジェクトは下記のようにmatchoffsetメソッドを実行できることも合わせて抑えておくと良いです。

regex = r"J.*g"
m = match(regex, "JuliaLang is the best")
println(typeof(m))
println(m.match)
println(m.offset)

・実行結果

RegexMatch
JuliaLang
1

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

【Julia入門】Juliaの基本事項⑦ Juliaの文字列の関数

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaにおける文字列の関数について取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

文字列の関数

文字列の長さ

文字列の長さはlength関数を用いることで得ることができます。

s = "Julia"
println(length(s))

・実行結果

5

文字列の繰り返し

文字列の繰り返しはrepeat関数を用いることで下記のように行うことができます。

s = "Julia "
println(repeat(s, 2))

・実行結果

Julia Julia 

文字列の置換

文字列の置換はreplace関数を用いることで行うことができます。

s = "study English"
s = replace(s, "English" => "Math")
println(s)

・実行結果

study Math

文字列の分割

文字列の分割はsplit関数を用いることで下記のように実行することができます。

s = split("Julia-Lang","-")
println(s)
println(s[1])

・実行結果

SubString{String}["Julia", "Lang"]
Julia

文字列の判定

文字列の判定はstartswith関数やendswith関数を用いることで行うことができます。

startswith

judge1 = startswith("JuliaLang", "Julia")
judge2 = startswith("JuliaLang", "Python")
judge3 = startswith("JuliaLang", "Jul")

println(judge1)
println(judge2)
println(judge3)

・実行結果

true
false
true

endswith

judge1 = endswith("JuliaLang", "Julia")
judge2 = endswith("JuliaLang", "Lang")

println(judge1)
println(judge2)

・実行結果

false
true

配列の連結

配列の連結はjoin関数を用いることで実行できます。

s = join(["Julia", "Lang"], "-")
println(s)

・実行結果

Julia-Lang

文字列の検索

文字列の検索はfindfirst関数などを抑えておくと良いです。

idx = findfirst("Julia", "JuliaLang")
println(idx)

・実行結果

1:5

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

Ch.19 「行列のランク」の演習問題の解答例 〜統計学のための数学入門30講(朝倉書店)〜

当記事は「統計学のための数学入門$30$講(朝倉書店)」の読解サポートにあたってChapter.$19$の「行列のランク」の章末問題の解答の作成を行いました。
基本的には書籍の購入者向けの解説なので、まだ入手されていない方は購入の上ご確認ください。また、解説はあくまでサイト運営者が独自に作成したものであり、書籍の公式ページではないことにご注意ください。

・書籍解答まとめ
https://www.hello-statisticians.com/answer_textbook_math#math_stat

本章のまとめ

演習問題解答

問題$19.1$

・$[1]$
$$
\large
\begin{align}
A = \left(\begin{array}{ccc} 1 & -1 & 2 \\ 2 & -2 & 4 \end{array} \right)
\end{align}
$$

上記に対し、$A^{\mathrm{T}}$を下記のように定める。
$$
\large
\begin{align}
A^{\mathrm{T}} = \left(\begin{array}{cc} 1 & 2 \\ -1 & -2 \\ 2 & 4 \end{array} \right) = \left(\begin{array}{cc} \mathbf{a}_{1} & \mathbf{a}_{2} \end{array} \right)
\end{align}
$$

上記では$\mathbf{a}_{2} = 2 \mathbf{a}_{1}$が成立するので、$\mathrm{rank}(A^{\mathrm{T}})=1$であり、$M(A^{\mathrm{T}})$は下記のように表せる。
$$
\large
\begin{align}
M(A^{\mathrm{T}}) = \left\{ y : y=c_1 \mathbf{a}_{1} = c_1 \left(\begin{array}{c} 1 \\ -1 \\ 2 \end{array} \right) = \left(\begin{array}{c} c_1 \\ -c_1 \\ 2c_1 \end{array} \right) \right\}
\end{align}
$$

また、$\dim{M(A^{\mathrm{T}})}=1$であり、$M(A^{\mathrm{T}})$は$\mathbb{R}^{3}$で原点を通る$\displaystyle \left(\begin{array}{c} 1 \\ -1 \\ 2 \end{array} \right)$に平行な直線である。

・$[2]$
$$
\large
\begin{align}
A = \left(\begin{array}{ccc} 1 & 1 & 3 \\ 2 & -1 & 3 \end{array} \right)
\end{align}
$$

上記に対し、$A^{\mathrm{T}}$を下記のように定める。
$$
\large
\begin{align}
A^{\mathrm{T}} = \left(\begin{array}{cc} 1 & 2 \\ 1 & -1 \\ 3 & 3 \end{array} \right) = \left(\begin{array}{cc} \mathbf{a}_{1} & \mathbf{a}_{2} \end{array} \right)
\end{align}
$$

上記では$\mathbf{a}_{2} \neq c \mathbf{a}_{1}$であるので、$\mathrm{rank}(A^{\mathrm{T}})=2$であり、$M(A^{\mathrm{T}})$は下記のように表せる。
$$
\large
\begin{align}
M(A^{\mathrm{T}}) = \left\{ y : y=c_1 \mathbf{a}_{1} + c_2 \mathbf{a}_{2} = c_1 \left(\begin{array}{c} 1 \\ 1 \\ 3 \end{array} \right) + c_2 \left(\begin{array}{c} 2 \\ -1 \\ 3 \end{array} \right) = \left(\begin{array}{c} c_1+2c_2 \\ c_1-c_2 \\ 3c_1+3c_2 \end{array} \right) \right\}
\end{align}
$$

また、$\dim{M(A^{\mathrm{T}})}=2$であり、$M(A^{\mathrm{T}})$は$\mathbb{R}^{3}$で原点を通る$\displaystyle \left(\begin{array}{c} 1 \\ 1 \\ 3 \end{array} \right)$と$\displaystyle \left(\begin{array}{c} 2 \\ -1 \\ 3 \end{array} \right)$が張る平面である。

問題$19.2$