Skip to content

Instantly share code, notes, and snippets.

@shotahorii
Created April 23, 2019 17:06
Show Gist options
  • Save shotahorii/23b2c6c197a4ed71c4df399ad8985a81 to your computer and use it in GitHub Desktop.
Save shotahorii/23b2c6c197a4ed71c4df399ad8985a81 to your computer and use it in GitHub Desktop.
Inner Product of Vectors
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Inner Product of Vectors\n",
"- [ベクトルの内積とは (大人になってからの再学習)](zellij.hatenablog.com/entry/20130216/p1)\n",
"- [内積の成分表示](https://高校数学.net/naiseki-seibun/)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"二つのd次元ベクトル\n",
"<br><br>\n",
"$${\\bf a} = (a_1,a_2,...,a_d)^T$$<br>\n",
"$${\\bf b} = (b_1,b_2,...,b_d)^T$$\n",
"<br><br>\n",
"があるとき、この二つのベクトルの内積は以下のように定義される。\n",
"<br><br>\n",
"$$({\\bf a},{\\bf b}) = a_1b_1 + a_2b_2 + ... + a_db_d = \\sum_{i=1}^d a_ib_i \n",
"= {\\bf a}^T{\\bf b} = {\\bf b}^T{\\bf a}$$"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"二つのd次元ベクトル\n",
"<br><br>\n",
"$${\\bf a} = (a_1,a_2,...,a_d)^T$$<br>\n",
"$${\\bf b} = (b_1,b_2,...,b_d)^T$$\n",
"<br><br>\n",
"があるとき、この二つのベクトルの内積は以下のように定義される。\n",
"<br><br>\n",
"$$({\\bf a},{\\bf b}) = a_1b_1 + a_2b_2 + ... + a_db_d = \\sum_{i=1}^d a_ib_i \n",
"= {\\bf a}^T{\\bf b} = {\\bf b}^T{\\bf a}$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**内積の意味** \n",
"内積はスカラーなので、ベクトルのように向きは無い。が、正負は存在する。 \n",
"2次元の場合において、内積の意味を考えてみる。 \n",
"\n",
"結論から入ると、内積は以下のように考えると意味を理解しやすい。 \n",
"```\n",
"二つのベクトルについて、一方のベクトル(どちらを選んでも同じ)の向きを基準方向とした時、\n",
"二つのベクトルの、基準方向への方向成分の大きさ(基準方向と真逆の向きの場合は負とする)の積を内積と呼ぶ。\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"以下の二次元ベクトルを考える。\n",
"<br><br>\n",
"$${\\bf a} = (a_1,a_2)^T$$<br>\n",
"$${\\bf b} = (b_1,b_2)^T$$\n",
"<br><br>\n",
"仮にこの両ベクトルの第一成分をx軸、第二成分をy軸にとってイメージすると、原点からx軸方向に$$a_1$$,\n",
"y軸方向に$$a_2$$だけ進んだ点へのベクトルが$${\\bf a}$$であり、原点からx軸方向に$$b_1$$,\n",
"y軸方向に$$b_2$$だけ進んだ点へのベクトルが$${\\bf b}$$である。\n",
"<br><br>\n",
"ここで、イメージした二つのベクトルの間になす角度を仮に$$\\theta$$と置く。\n",
"<br><br>\n",
"さて、仮に基準方向を$${\\bf a}$$の向きとする。すると、ベクトル$${\\bf a}$$\n",
"の基準方向への方向成分の大きさは言うまでもなく$$|{\\bf a}|$$である。<br>\n",
"ベクトル$${\\bf b}$$の基準方向への方向成分の大きさはどうだろうか。<br>\n",
"これは、三角関数の定理を思い出すと、$$|{\\bf b}|cos\\theta$$であることが分かる。\n",
"<br>\n",
"すなわち、この両ベクトルの基準方向への大きさ成分を掛け合わせると、内積が以下のように求まる。<br><br>\n",
"$$({\\bf a},{\\bf b}) = |{\\bf a}||{\\bf b}|cos\\theta$$"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"以下の二次元ベクトルを考える。\n",
"<br><br>\n",
"$${\\bf a} = (a_1,a_2)^T$$<br>\n",
"$${\\bf b} = (b_1,b_2)^T$$\n",
"<br><br>\n",
"仮にこの両ベクトルの第一成分をx軸、第二成分をy軸にとってイメージすると、原点からx軸方向に$$a_1$$,\n",
"y軸方向に$$a_2$$だけ進んだ点へのベクトルが$${\\bf a}$$であり、原点からx軸方向に$$b_1$$,\n",
"y軸方向に$$b_2$$だけ進んだ点へのベクトルが$${\\bf b}$$である。\n",
"<br><br>\n",
"ここで、イメージした二つのベクトルの間になす角度を仮に$$\\theta$$と置く。\n",
"<br><br>\n",
"さて、仮に基準方向を$${\\bf a}$$の向きとする。すると、ベクトル$${\\bf a}$$\n",
"の基準方向への方向成分の大きさは言うまでもなく$$|{\\bf a}|$$である。<br>\n",
"ベクトル$${\\bf b}$$の基準方向への方向成分の大きさはどうだろうか。<br>\n",
"これは、三角関数の定理を思い出すと、$$|{\\bf b}|cos\\theta$$であることが分かる。\n",
"<br>\n",
"すなわち、この両ベクトルの基準方向への大きさ成分を掛け合わせると、内積が以下のように求まる。<br><br>\n",
"$$({\\bf a},{\\bf b}) = |{\\bf a}||{\\bf b}|cos\\theta$$"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"ここで、$$({\\bf a},{\\bf b}) = |{\\bf a}||{\\bf b}|cos\\theta = a_1b_1 + a_2b_2$$\n",
"であるのは以下のように余弦定理を用いて証明される。\n",
"<br><br>\n",
"-----<br>\n",
"<b>余弦定理</b><br>\n",
"平面上の点O,A,Bが三角形OABを作るときに、点Oから点Aへのベクトルを$${\\bf a}$$、点Oから点Bへのベクトルを$${\\bf b}\n",
"$$、点Aから点Bへのベクトルを$${\\bf c}$$と置き、$${\\bf a}$$と$${\\bf b}$$のなす角を$$\\theta\n",
"$$と置くと、以下が成り立つ。<br>\n",
"$$|{\\bf c}|^2 = |{\\bf a}|^2+|{\\bf b}|^2-2|{\\bf a}||{\\bf b}|cos\\theta$$\n",
"<br>-----\n",
"<br><br>\n",
"余弦定理を変形して、以下を得る。\n",
"<br><br>\n",
"$$|{\\bf a}||{\\bf b}|cos\\theta = \\frac{|{\\bf a}|^2+|{\\bf b}|^2-|{\\bf c}|^2}{2}$$\n",
"<br><br>\n",
"ここで、$${\\bf c} = {\\bf b} - {\\bf a} = (b_1,b_2)^T-(a_1,a_2)^T = (b_1-a_1,b_2-a_2)^T$$である。\n",
"<br><br>\n",
"これを用いて余弦定理を変形して得た式をさらに変形する。\n",
"<br><br>\n",
"$$|{\\bf a}||{\\bf b}|cos\\theta = \\frac{|{\\bf a}|^2+|{\\bf b}|^2-|{\\bf c}|^2}{2}$$<br>\n",
"$$=\\frac{a_1^2+a_2^2+b_1^2+b_2^2-(b_1-a_1)^2-(b_2-a_2)^2}{2}$$<br>\n",
"$$=\\frac{a_1^2+a_2^2+b_1^2+b_2^2-b_1^2+2a_1b_1-a_1^2 -b_2^2+2a_2b_2-a_2^2}{2}$$<br>\n",
"$$=\\frac{2a_1b_1+2a_2b_2}{2} = a_1b_1+a_2b_2$$"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%latex\n",
"ここで、$$({\\bf a},{\\bf b}) = |{\\bf a}||{\\bf b}|cos\\theta = a_1b_1 + a_2b_2$$\n",
"であるのは以下のように余弦定理を用いて証明される。\n",
"<br><br>\n",
"-----<br>\n",
"<b>余弦定理</b><br>\n",
"平面上の点O,A,Bが三角形OABを作るときに、点Oから点Aへのベクトルを$${\\bf a}$$、点Oから点Bへのベクトルを$${\\bf b}\n",
"$$、点Aから点Bへのベクトルを$${\\bf c}$$と置き、$${\\bf a}$$と$${\\bf b}$$のなす角を$$\\theta\n",
"$$と置くと、以下が成り立つ。<br>\n",
"$$|{\\bf c}|^2 = |{\\bf a}|^2+|{\\bf b}|^2-2|{\\bf a}||{\\bf b}|cos\\theta$$\n",
"<br>-----\n",
"<br><br>\n",
"余弦定理を変形して、以下を得る。\n",
"<br><br>\n",
"$$|{\\bf a}||{\\bf b}|cos\\theta = \\frac{|{\\bf a}|^2+|{\\bf b}|^2-|{\\bf c}|^2}{2}$$\n",
"<br><br>\n",
"ここで、$${\\bf c} = {\\bf b} - {\\bf a} = (b_1,b_2)^T-(a_1,a_2)^T = (b_1-a_1,b_2-a_2)^T$$である。\n",
"<br><br>\n",
"これを用いて余弦定理を変形して得た式をさらに変形する。\n",
"<br><br>\n",
"$$|{\\bf a}||{\\bf b}|cos\\theta = \\frac{|{\\bf a}|^2+|{\\bf b}|^2-|{\\bf c}|^2}{2}$$<br>\n",
"$$=\\frac{a_1^2+a_2^2+b_1^2+b_2^2-(b_1-a_1)^2-(b_2-a_2)^2}{2}$$<br>\n",
"$$=\\frac{a_1^2+a_2^2+b_1^2+b_2^2-b_1^2+2a_1b_1-a_1^2 -b_2^2+2a_2b_2-a_2^2}{2}$$<br>\n",
"$$=\\frac{2a_1b_1+2a_2b_2}{2} = a_1b_1+a_2b_2$$"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment