Created
April 23, 2019 17:08
-
-
Save shotahorii/19aaff3302ef6dfe477ba3c1652b2532 to your computer and use it in GitHub Desktop.
Vector and Matrix Operations
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Vector and Matrix Operation\n", | |
"- 「これなら分かる最適化数学」(金谷健一) 第1章 数学的準備\n", | |
"- [転置行列の定理](https://www.iwanttobeacat.com/entry/2018/01/05/220317)\n", | |
"- [ベクトルの微分](https://www.iwanttobeacat.com/entry/2018/01/08/220932)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**曲線の法線ベクトルと接線の求め方**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"<b>法線ベクトルの求め方</b><br>\n", | |
"曲線$$f(x,y)=0$$の点$$(\\overline{x},\\overline{y})$$における法線ベクトルは以下である。\n", | |
"<br><br>\n", | |
"$$\\nabla \\overline{f} = \n", | |
"(\\frac{\\partial \\overline{f}}{\\partial x}, \\frac{\\partial \\overline{f}}{\\partial y})^T$$\n", | |
"<br><br>\n", | |
"ここで、$$\\frac{\\partial \\overline{f}}{\\partial x}$$は$$f(x,y)$$を$$x$$で偏微分して\n", | |
"$$(\\overline{x},\\overline{y})$$を代入した値である。" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"<b>法線ベクトルの求め方</b><br>\n", | |
"曲線$$f(x,y)=0$$の点$$(\\overline{x},\\overline{y})$$における法線ベクトルは以下である。\n", | |
"<br><br>\n", | |
"$$\\nabla \\overline{f} = \n", | |
"(\\frac{\\partial \\overline{f}}{\\partial x}, \\frac{\\partial \\overline{f}}{\\partial y})^T$$\n", | |
"<br><br>\n", | |
"ここで、$$\\frac{\\partial \\overline{f}}{\\partial x}$$は$$f(x,y)$$を$$x$$で偏微分して\n", | |
"$$(\\overline{x},\\overline{y})$$を代入した値である。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"<b>接線の求め方</b><br>\n", | |
"次に、この点における接線を求めたい。上で求めた法線ベクトルは、点$$(\\overline{x},\\overline{y})$$\n", | |
"において曲線$$f(x,y)=0$$に直交するものなので、この点での曲線$$f(x,y)=0$$の接線は\n", | |
"この法線ベクトルに直交する直線でかつ点$$(\\overline{x},\\overline{y})$$を通るもの、を求めればよい。<br>\n", | |
"ここで、この直線を仮に以下のように置く。\n", | |
"<br><br>\n", | |
"$$Ax+By+C = 0$$\n", | |
"<br><br>\n", | |
"この直線が\n", | |
"$$\\nabla \\overline{f} = \n", | |
"(\\frac{\\partial \\overline{f}}{\\partial x}, \\frac{\\partial \\overline{f}}{\\partial y})^T$$\n", | |
"を法線ベクトルとして持つためには、$$x$$による偏微分が$$\\frac{\\partial \\overline{f}}{\\partial x}$$,\n", | |
"yによる偏微分が$$\\frac{\\partial \\overline{f}}{\\partial y}$$である必要がある。つまり以下である。\n", | |
"<br><br>\n", | |
"$$A = \\frac{\\partial \\overline{f}}{\\partial x}$$<br>\n", | |
"$$B = \\frac{\\partial \\overline{f}}{\\partial y}$$\n", | |
"<br><br>\n", | |
"また、点$$(\\overline{x},\\overline{y})$$を通る必要があるので、$$C$$は以下となる。\n", | |
"<br><br>\n", | |
"$$C = -(A \\overline{x} + B \\overline{y})$$\n", | |
"<br><br>\n", | |
"つまり、この直線、すなわち点$$(\\overline{x},\\overline{y})$$における曲線$$f(x,y)=0$$\n", | |
"の接線は以下である。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial \\overline{f}}{\\partial x} x + \\frac{\\partial \\overline{f}}{\\partial y} y - \n", | |
"(\\frac{\\partial \\overline{f}}{\\partial x} \\overline{x} + \n", | |
" \\frac{\\partial \\overline{f}}{\\partial y} \\overline{y}) = 0$$<br>\n", | |
"整理して、<br>\n", | |
"$$\\frac{\\partial \\overline{f}}{\\partial x} (x - \\overline{x}) + \n", | |
" \\frac{\\partial \\overline{f}}{\\partial y} (y - \\overline{y}) = 0$$" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"<b>接線の求め方</b><br>\n", | |
"次に、この点における接線を求めたい。上で求めた法線ベクトルは、点$$(\\overline{x},\\overline{y})$$\n", | |
"において曲線$$f(x,y)=0$$に直交するものなので、この点での曲線$$f(x,y)=0$$の接線は\n", | |
"この法線ベクトルに直交する直線でかつ点$$(\\overline{x},\\overline{y})$$を通るもの、を求めればよい。<br>\n", | |
"ここで、この直線を仮に以下のように置く。\n", | |
"<br><br>\n", | |
"$$Ax+By+C = 0$$\n", | |
"<br><br>\n", | |
"この直線が\n", | |
"$$\\nabla \\overline{f} = \n", | |
"(\\frac{\\partial \\overline{f}}{\\partial x}, \\frac{\\partial \\overline{f}}{\\partial y})^T$$\n", | |
"を法線ベクトルとして持つためには、$$x$$による偏微分が$$\\frac{\\partial \\overline{f}}{\\partial x}$$,\n", | |
"yによる偏微分が$$\\frac{\\partial \\overline{f}}{\\partial y}$$である必要がある。つまり以下である。\n", | |
"<br><br>\n", | |
"$$A = \\frac{\\partial \\overline{f}}{\\partial x}$$<br>\n", | |
"$$B = \\frac{\\partial \\overline{f}}{\\partial y}$$\n", | |
"<br><br>\n", | |
"また、点$$(\\overline{x},\\overline{y})$$を通る必要があるので、$$C$$は以下となる。\n", | |
"<br><br>\n", | |
"$$C = -(A \\overline{x} + B \\overline{y})$$\n", | |
"<br><br>\n", | |
"つまり、この直線、すなわち点$$(\\overline{x},\\overline{y})$$における曲線$$f(x,y)=0$$\n", | |
"の接線は以下である。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial \\overline{f}}{\\partial x} x + \\frac{\\partial \\overline{f}}{\\partial y} y - \n", | |
"(\\frac{\\partial \\overline{f}}{\\partial x} \\overline{x} + \n", | |
" \\frac{\\partial \\overline{f}}{\\partial y} \\overline{y}) = 0$$<br>\n", | |
"整理して、<br>\n", | |
"$$\\frac{\\partial \\overline{f}}{\\partial x} (x - \\overline{x}) + \n", | |
" \\frac{\\partial \\overline{f}}{\\partial y} (y - \\overline{y}) = 0$$\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"<b>曲面の法線ベクトルと接平面</b><br>\n", | |
"上記の定理は、曲面$$f(x,y,z)=0$$を考えても同様である。<br>\n", | |
"曲面$$f(x,y,z)=0$$の点$$(\\overline{x},\\overline{y},\\overline{z})$$における法線ベクトルは以下である。\n", | |
"<br><br>\n", | |
"$$\\nabla \\overline{f} = \n", | |
"(\\frac{\\partial \\overline{f}}{\\partial x}, \\frac{\\partial \\overline{f}}{\\partial y}, \n", | |
" \\frac{\\partial \\overline{f}}{\\partial z})^T$$\n", | |
"<br><br>\n", | |
"また、点$$(\\overline{x},\\overline{y},\\overline{z})$$における曲面$$f(x,y,z)=0$$\n", | |
"の接平面は以下で表される。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial \\overline{f}}{\\partial x} (x - \\overline{x}) + \n", | |
" \\frac{\\partial \\overline{f}}{\\partial y} (y - \\overline{y}) +\n", | |
" \\frac{\\partial \\overline{f}}{\\partial z} (z - \\overline{z}) = 0$$" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex \n", | |
"<b>曲面の法線ベクトルと接平面</b><br>\n", | |
"上記の定理は、曲面$$f(x,y,z)=0$$を考えても同様である。<br>\n", | |
"曲面$$f(x,y,z)=0$$の点$$(\\overline{x},\\overline{y},\\overline{z})$$における法線ベクトルは以下である。\n", | |
"<br><br>\n", | |
"$$\\nabla \\overline{f} = \n", | |
"(\\frac{\\partial \\overline{f}}{\\partial x}, \\frac{\\partial \\overline{f}}{\\partial y}, \n", | |
" \\frac{\\partial \\overline{f}}{\\partial z})^T$$\n", | |
"<br><br>\n", | |
"また、点$$(\\overline{x},\\overline{y},\\overline{z})$$における曲面$$f(x,y,z)=0$$\n", | |
"の接平面は以下で表される。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial \\overline{f}}{\\partial x} (x - \\overline{x}) + \n", | |
" \\frac{\\partial \\overline{f}}{\\partial y} (y - \\overline{y}) +\n", | |
" \\frac{\\partial \\overline{f}}{\\partial z} (z - \\overline{z}) = 0$$" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**一次形式と二次形式 - 関数による表現とベクトル表現** " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 50, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"<b>一次形式</b><br>\n", | |
"$$n$$変数$$x_1,x_2,...,x_n$$の一次形式は以下のように表される。\n", | |
"<br><br>\n", | |
"$$f = a_1x_1 + a_2x_2 + ... + a_nx_n = \\sum_{i=1}^n a_ix_i$$\n", | |
"<br><br>\n", | |
"ベクトル$${\\bf a}, {\\bf x}$$を以下のように置くと、\n", | |
"<br><br>\n", | |
"$${\\bf a} = (a_1,a_2,...,a_n)^T$$<br>\n", | |
"$${\\bf x} = (x_1,x_2,...,x_n)^T$$\n", | |
"<br><br>\n", | |
"この一次形式はベクトルの内積として次のように書ける。\n", | |
"<br><br>\n", | |
"$$f = ({\\bf a}, {\\bf x})$$\n", | |
"<br><br>\n", | |
"また、以下のようにも表すことができる。\n", | |
"<br><br>\n", | |
"$$f = {\\bf a}^T {\\bf x}$$\n", | |
"<br><br>\n", | |
"ちなみに、ベクトルとベクトルの内積なので以下が成り立つ。(結果がスカラーなので当然だが。)\n", | |
"<br><br>\n", | |
"$${\\bf a}^T {\\bf x} = {\\bf x}^T {\\bf a}$$" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"<b>一次形式</b><br>\n", | |
"変数の一次の項のみからなる式を一次形式と呼ぶ\n", | |
"(ちなみに、変数の一次以下の項、すなわち一次および定数からなる式を一次式と呼ぶ)。<br>\n", | |
"$$n$$変数$$x_1,x_2,...,x_n$$の一次形式は以下のように表される。\n", | |
"<br><br>\n", | |
"$$f = a_1x_1 + a_2x_2 + ... + a_nx_n = \\sum_{i=1}^n a_ix_i$$\n", | |
"<br><br>\n", | |
"ベクトル$${\\bf a}, {\\bf x}$$を以下のように置くと、\n", | |
"<br><br>\n", | |
"$${\\bf a} = (a_1,a_2,...,a_n)^T$$<br>\n", | |
"$${\\bf x} = (x_1,x_2,...,x_n)^T$$\n", | |
"<br><br>\n", | |
"この一次形式はベクトルの内積として次のように書ける。\n", | |
"<br><br>\n", | |
"$$f = ({\\bf a}, {\\bf x})$$\n", | |
"<br><br>\n", | |
"また、以下のようにも表すことができる。\n", | |
"<br><br>\n", | |
"$$f = {\\bf a}^T {\\bf x}$$\n", | |
"<br><br>\n", | |
"ちなみに、ベクトルとベクトルの内積なので以下が成り立つ。(結果がスカラーなので当然だが。)\n", | |
"<br><br>\n", | |
"$${\\bf a}^T {\\bf x} = {\\bf x}^T {\\bf a}$$" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 49, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"<b>一次形式の微分</b><br>\n", | |
"上の一次形式の式を各$$x_i$$で偏微分すると、$$i=1,...,n$$について以下となる。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial f}{\\partial x_i} = a_i$$\n", | |
"<br><br>\n", | |
"すなわち、ベクトル$$\\nabla f$$を以下のように定義すると、\n", | |
"<br><br>\n", | |
"$$\\nabla f = (\\frac{\\partial f}{\\partial x_1},...,\\frac{\\partial f}{\\partial x_n})^T$$\n", | |
"<br><br>\n", | |
"一次形式の微分は以下となる。\n", | |
"<br><br>\n", | |
"$$\\nabla f = \\nabla ({\\bf a}, {\\bf x}) = \\nabla {\\bf a}^T {\\bf x} = {\\bf a}$$\n", | |
"<br><br>\n", | |
"これは機械学習の文脈で、$${\\bf w}^T {\\bf x}$$を$${\\bf x}$$で微分する、というような形ででてきたりする。" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"<b>一次形式の微分</b><br>\n", | |
"上の一次形式の式を各$$x_i$$で偏微分すると、$$i=1,...,n$$について以下となる。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial f}{\\partial x_i} = a_i$$\n", | |
"<br><br>\n", | |
"すなわち、ベクトル$$\\nabla f$$を以下のように定義すると、\n", | |
"<br><br>\n", | |
"$$\\nabla f = (\\frac{\\partial f}{\\partial x_1},...,\\frac{\\partial f}{\\partial x_n})^T$$\n", | |
"<br><br>\n", | |
"一次形式の微分は以下となる。\n", | |
"<br><br>\n", | |
"$$\\nabla f = \\nabla ({\\bf a}, {\\bf x}) = \\nabla {\\bf a}^T {\\bf x} = {\\bf a}$$\n", | |
"<br><br>\n", | |
"これは機械学習の文脈で、$${\\bf w}^T {\\bf x}$$を$${\\bf x}$$で微分する、というような形ででてきたりする。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 71, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"<b>二次形式</b><br>\n", | |
"変数の二次の項のみからなる式を二次形式と呼ぶ\n", | |
"(ちなみに、変数の二次以下の項からなる式を二次式と呼ぶ)。<br>\n", | |
"$$n$$変数$$x_1,x_2,...,x_n$$の二次形式は以下のように表される。\n", | |
"<br><br>\n", | |
"$$f = a_{11}x_1^2 + a_{12}x_1x_2 + ... + a_{1n}x_1x_n$$<br>\n", | |
"$$+ a_{21}x_2x_1 + a_{22}x_2^2 + ... + a_{2n}x_2x_n$$<br>\n", | |
"$$+ ...$$<br>\n", | |
"$$+ a_{n1}x_nx_1 + a_{n2}x_nx_2 + ... + a_{nn}x_n^2$$<br>\n", | |
"$$= \\sum_{i=1}^n\\sum_{j=1}^n a_{ij}x_ix_j$$\n", | |
"<br><br>\n", | |
"ここで、行列$${\\bf A}$$とベクトル$${\\bf x}$$を、\n", | |
"<br><br>\n", | |
"$$\n", | |
" {\\bf A} = \\left(\n", | |
" \\begin{array}{ccc}\n", | |
" a_{11} & a_{12} & ... & a_{1n} \\\\\n", | |
" a_{21} & a_{22} & ... & a_{2n} \\\\\n", | |
" ... & ... & ... & ... \\\\\n", | |
" a_{n1} & a_{n2} & ... & a_{nn} \\\\\n", | |
" \\end{array}\n", | |
" \\right)\n", | |
"$$<br>\n", | |
"$${\\bf x} = (x_1,x_2,...,x_n)^T$$\n", | |
"<br><br>\n", | |
"とおくと、二次形式は以下のようなベクトルの内積として表すことができる。\n", | |
"<br><br>\n", | |
"$$f = ({\\bf x},{\\bf A}{\\bf x}) = {\\bf x}^T{\\bf A}{\\bf x}$$\n", | |
"<br><br>\n", | |
"この行列$${\\bf A}$$を二次形式$$f$$の係数行列と呼ぶ。" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"<b>二次形式</b><br>\n", | |
"変数の二次の項のみからなる式を二次形式と呼ぶ\n", | |
"(ちなみに、変数の二次以下の項からなる式を二次式と呼ぶ)。<br>\n", | |
"$$n$$変数$$x_1,x_2,...,x_n$$の二次形式は以下のように表される。\n", | |
"<br><br>\n", | |
"$$f = a_{11}x_1^2 + a_{12}x_1x_2 + ... + a_{1n}x_1x_n$$<br>\n", | |
"$$+ a_{21}x_2x_1 + a_{22}x_2^2 + ... + a_{2n}x_2x_n$$<br>\n", | |
"$$+ ...$$<br>\n", | |
"$$+ a_{n1}x_nx_1 + a_{n2}x_nx_2 + ... + a_{nn}x_n^2$$<br>\n", | |
"$$= \\sum_{i=1}^n\\sum_{j=1}^n a_{ij}x_ix_j$$\n", | |
"<br><br>\n", | |
"ここで、行列$${\\bf A}$$とベクトル$${\\bf x}$$を、\n", | |
"<br><br>\n", | |
"$$\n", | |
" {\\bf A} = \\left(\n", | |
" \\begin{array}{ccc}\n", | |
" a_{11} & a_{12} & ... & a_{1n} \\\\\n", | |
" a_{21} & a_{22} & ... & a_{2n} \\\\\n", | |
" ... & ... & ... & ... \\\\\n", | |
" a_{n1} & a_{n2} & ... & a_{nn} \\\\\n", | |
" \\end{array}\n", | |
" \\right)\n", | |
"$$<br>\n", | |
"$${\\bf x} = (x_1,x_2,...,x_n)^T$$\n", | |
"<br><br>\n", | |
"とおくと、二次形式は以下のようなベクトルの内積として表すことができる。\n", | |
"<br><br>\n", | |
"$$f = ({\\bf x},{\\bf A}{\\bf x}) = {\\bf x}^T{\\bf A}{\\bf x}$$\n", | |
"<br><br>\n", | |
"この行列$${\\bf A}$$を二次形式$$f$$の係数行列と呼ぶ。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 88, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"<b>二次形式の微分</b><br>\n", | |
"一次形式の場合と同様、二次形式の式を各$$x_i$$で偏微分していく。<br>\n", | |
"例えば、$$x_1$$で偏微分する場合を考える。式の中で、$$x_1$$を含む項は以下である。\n", | |
"<br><br>\n", | |
"$$a_{11}x_1^2 + a_{12}x_1x_2 + ... + a_{1n}x_1x_n$$<br> \n", | |
"$$+ a_{21}x_2x_1 + a_{31}x_3x_1 + ... + a_{n1}x_nx_1$$\n", | |
"<br><br> \n", | |
"これを微分すると以下となる。\n", | |
"<br><br>\n", | |
"$$2a_{11}x_1 + a_{12}x_2 + ... + a_{1n}x_n + a_{21}x_2 + a_{31}x_3 + ... + a_{n1}x_n$$<br>\n", | |
"$$= \\{a_{11}x_1 + a_{12}x_2 + ... + a_{1n}x_n\\} + \\{a_{11}x_1 + a_{21}x_2 + ... + a_{n1}x_n\\}$$\n", | |
"<br>\n", | |
"$$= \\sum_{j=1}^n a_{1j}x_j + \\sum_{k=1}^n a_{k1}x_k$$\n", | |
"<br><br>\n", | |
"他の変数についても同様であるため、一般化して以下のように書ける。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial f}{\\partial x_i} = \\sum_{j=1}^n a_{ij}x_j + \\sum_{k=1}^n a_{ki}x_k$$\n", | |
"<br><br>\n", | |
"ここで、一次形式の時同様ベクトル$$\\nabla f$$を以下のように定義すると、\n", | |
"<br><br>\n", | |
"$$\\nabla f = (\\frac{\\partial f}{\\partial x_1},...,\\frac{\\partial f}{\\partial x_n})^T$$\n", | |
"<br><br>\n", | |
"これは以下のように書き換えられる。\n", | |
"<br><br>\n", | |
"$$\\nabla f = (\\sum_{j=1}^n a_{1j}x_j + \\sum_{k=1}^n a_{k1}x_k, ..., \n", | |
" \\sum_{j=1}^n a_{nj}x_j + \\sum_{k=1}^n a_{kn}x_k)^T$$\n", | |
"<br><br>\n", | |
"これは先に定義した$${\\bf A}, {\\bf x}$$を用いて表すと以下である。\n", | |
"<br><br>\n", | |
"$$\\nabla f = ({\\bf A}+{\\bf A}^T){\\bf x}$$" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"<b>二次形式の微分</b><br>\n", | |
"一次形式の場合と同様、二次形式の式を各$$x_i$$で偏微分していく。<br>\n", | |
"例えば、$$x_1$$で偏微分する場合を考える。式の中で、$$x_1$$を含む項は以下である。\n", | |
"<br><br>\n", | |
"$$a_{11}x_1^2 + a_{12}x_1x_2 + ... + a_{1n}x_1x_n$$<br> \n", | |
"$$+ a_{21}x_2x_1 + a_{31}x_3x_1 + ... + a_{n1}x_nx_1$$\n", | |
"<br><br> \n", | |
"これを微分すると以下となる。\n", | |
"<br><br>\n", | |
"$$2a_{11}x_1 + a_{12}x_2 + ... + a_{1n}x_n + a_{21}x_2 + a_{31}x_3 + ... + a_{n1}x_n$$<br>\n", | |
"$$= \\{a_{11}x_1 + a_{12}x_2 + ... + a_{1n}x_n\\} + \\{a_{11}x_1 + a_{21}x_2 + ... + a_{n1}x_n\\}$$\n", | |
"<br>\n", | |
"$$= \\sum_{j=1}^n a_{1j}x_j + \\sum_{k=1}^n a_{k1}x_k$$\n", | |
"<br><br>\n", | |
"他の変数についても同様であるため、一般化して以下のように書ける。\n", | |
"<br><br>\n", | |
"$$\\frac{\\partial f}{\\partial x_i} = \\sum_{j=1}^n a_{ij}x_j + \\sum_{k=1}^n a_{ki}x_k$$\n", | |
"<br><br>\n", | |
"ここで、一次形式の時同様ベクトル$$\\nabla f$$を以下のように定義すると、\n", | |
"<br><br>\n", | |
"$$\\nabla f = (\\frac{\\partial f}{\\partial x_1},...,\\frac{\\partial f}{\\partial x_n})^T$$\n", | |
"<br><br>\n", | |
"これは以下のように書き換えられる。\n", | |
"<br><br>\n", | |
"$$\\nabla f = (\\sum_{j=1}^n a_{1j}x_j + \\sum_{k=1}^n a_{k1}x_k, ..., \n", | |
" \\sum_{j=1}^n a_{nj}x_j + \\sum_{k=1}^n a_{kn}x_k)^T$$\n", | |
"<br><br>\n", | |
"これは先に定義した$${\\bf A}, {\\bf x}$$を用いて表すと以下である。\n", | |
"<br><br>\n", | |
"$$\\nabla f = ({\\bf A}+{\\bf A}^T){\\bf x}$$" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 111, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"ここで、$${\\bf A}$$が対称行列($$a_{ji}=a_{ij}$$)である場合、$$A^T=A$$であるので、以下となる。\n", | |
"<br><br>\n", | |
"$$\\nabla f = 2{\\bf A}{\\bf x}$$\n", | |
"<br><br>\n", | |
"ちなみに、与えられた係数行列$$A$$が対称行列でない場合でも、二次形式において常にこの$$A$$\n", | |
"を変形して対称行列である係数行列$$A'$$を得ることが可能である。詳細は「これなら分かる最適化数学」のp18を参照。\n", | |
"<br><br>\n", | |
"また、$$f$$がスカラーを返す二次形式の関数で与えられている場合、必ず対称行列である係数行列を以下のように算出できる。\n", | |
"<br><br>\n", | |
"$$f = ax^2 + 2bxy + cy^2$$<br>\n", | |
"である時、ベクトルと対称行列とで以下のように書ける。<br>\n", | |
"$$f = (\n", | |
" \\left(\n", | |
" \\begin{array}{cc}\n", | |
" x\\\\\n", | |
" y\\\\\n", | |
" \\end{array}\n", | |
" \\right),\n", | |
" \\left(\n", | |
" \\begin{array}{cc}\n", | |
" a & b \\\\\n", | |
" b & c \\\\\n", | |
" \\end{array}\n", | |
" \\right)\n", | |
" \\left(\n", | |
" \\begin{array}{cc}\n", | |
" x\\\\\n", | |
" y\\\\\n", | |
" \\end{array}\n", | |
" \\right)\n", | |
")$$\n", | |
"<br><br>\n", | |
"$$f = Ax^2+By^2+Cz^2 + 2(Dyz+Ezx+Fxy)$$<br>\n", | |
"である時、ベクトルと対称行列とで以下のように書ける。<br>\n", | |
"$$f = (\n", | |
" \\left(\n", | |
" \\begin{array}{c}\n", | |
" x\\\\\n", | |
" y\\\\\n", | |
" z\\\\\n", | |
" \\end{array}\n", | |
" \\right),\n", | |
" \\left(\n", | |
" \\begin{array}{ccc}\n", | |
" A & F & E \\\\\n", | |
" F & B & D\\\\\n", | |
" E & D & C\\\\\n", | |
" \\end{array}\n", | |
" \\right)\n", | |
" \\left(\n", | |
" \\begin{array}{c}\n", | |
" x\\\\\n", | |
" y\\\\\n", | |
" z\\\\\n", | |
" \\end{array}\n", | |
" \\right)\n", | |
")$$\n", | |
"\n", | |
"<br><br>\n", | |
"ちなみに次に説明する双一次形式においては、必ずしも係数行列が対称行列になるとは限らない。" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"ここで、$${\\bf A}$$が対称行列($$a_{ji}=a_{ij}$$)である場合、$$A^T=A$$であるので、以下となる。\n", | |
"<br><br>\n", | |
"$$\\nabla f = 2{\\bf A}{\\bf x}$$\n", | |
"<br><br>\n", | |
"ちなみに、与えられた係数行列$$A$$が対称行列でない場合でも、二次形式において常にこの$$A$$\n", | |
"を変形して対称行列である係数行列$$A'$$を得ることが可能である。詳細は「これなら分かる最適化数学」のp18を参照。\n", | |
"<br><br>\n", | |
"また、$$f$$がスカラーを返す二次形式の関数で与えられている場合、必ず対称行列である係数行列を以下のように算出できる。\n", | |
"<br><br>\n", | |
"$$f = ax^2 + 2bxy + cy^2$$<br>\n", | |
"である時、ベクトルと対称行列とで以下のように書ける。<br>\n", | |
"$$f = (\n", | |
" \\left(\n", | |
" \\begin{array}{cc}\n", | |
" x\\\\\n", | |
" y\\\\\n", | |
" \\end{array}\n", | |
" \\right),\n", | |
" \\left(\n", | |
" \\begin{array}{cc}\n", | |
" a & b \\\\\n", | |
" b & c \\\\\n", | |
" \\end{array}\n", | |
" \\right)\n", | |
" \\left(\n", | |
" \\begin{array}{cc}\n", | |
" x\\\\\n", | |
" y\\\\\n", | |
" \\end{array}\n", | |
" \\right)\n", | |
")$$\n", | |
"<br><br>\n", | |
"$$f = Ax^2+By^2+Cz^2 + 2(Dyz+Ezx+Fxy)$$<br>\n", | |
"である時、ベクトルと対称行列とで以下のように書ける。<br>\n", | |
"$$f = (\n", | |
" \\left(\n", | |
" \\begin{array}{c}\n", | |
" x\\\\\n", | |
" y\\\\\n", | |
" z\\\\\n", | |
" \\end{array}\n", | |
" \\right),\n", | |
" \\left(\n", | |
" \\begin{array}{ccc}\n", | |
" A & F & E \\\\\n", | |
" F & B & D\\\\\n", | |
" E & D & C\\\\\n", | |
" \\end{array}\n", | |
" \\right)\n", | |
" \\left(\n", | |
" \\begin{array}{c}\n", | |
" x\\\\\n", | |
" y\\\\\n", | |
" z\\\\\n", | |
" \\end{array}\n", | |
" \\right)\n", | |
")$$\n", | |
"\n", | |
"<br><br>\n", | |
"ちなみに次に説明する双一次形式においては、必ずしも係数行列が対称行列になるとは限らない。" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 103, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"<b>双一次形式</b><br>\n", | |
"$$x_1,x_2,...,x_n$$についても$$y_1,y_2,...,y_n$$についても一次の項のみからなる式をそれらの双一次形式\n", | |
"と呼び、以下のように表す。\n", | |
"<br><br>\n", | |
"$$f = a_{11}x_1y_1 + a_{12}x_1y_2 + ... + a_{1n}x_1y_n$$<br>\n", | |
"$$+ ...$$\n", | |
"$$+ a_{n1}x_ny_1 + a_{n2}x_ny_2 + ... + a_{nn}x_ny_n$$<br>\n", | |
"$$= \\sum_{i=1}^n\\sum_{j=1}^n a_{ij}x_iy_j$$\n", | |
"<br><br>\n", | |
"上で定義した$${\\bf A}{\\bf x}$$に加え、$${\\bf y} = (y_1,...,y_n)^T$$と定義すると、上の式は以下のように書ける。\n", | |
"<br><br>\n", | |
"$$f = ({\\bf x},{\\bf A}{\\bf y}) = {\\bf x}^T{\\bf A}{\\bf y}$$\n", | |
"<br><br>\n", | |
"この時、次の関係が成り立つ。すなわち任意のベクトル$${\\bf x},{\\bf y}$$と任意の行列$${\\bf A}$$\n", | |
"に対して次の公式を得る。\n", | |
"<br><br>\n", | |
"$$({\\bf A}{\\bf x},{\\bf y}) = ({\\bf x},{\\bf A}^T{\\bf y})$$" | |
], | |
"text/plain": [ | |
"<IPython.core.display.Latex object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"%%latex\n", | |
"<b>双一次形式</b><br>\n", | |
"$$x_1,x_2,...,x_n$$についても$$y_1,y_2,...,y_n$$についても一次の項のみからなる式をそれらの双一次形式\n", | |
"と呼び、以下のように表す。\n", | |
"<br><br>\n", | |
"$$f = a_{11}x_1y_1 + a_{12}x_1y_2 + ... + a_{1n}x_1y_n$$<br>\n", | |
"$$+ ...$$\n", | |
"$$+ a_{n1}x_ny_1 + a_{n2}x_ny_2 + ... + a_{nn}x_ny_n$$<br>\n", | |
"$$= \\sum_{i=1}^n\\sum_{j=1}^n a_{ij}x_iy_j$$\n", | |
"<br><br>\n", | |
"上で定義した$${\\bf A}{\\bf x}$$に加え、$${\\bf y} = (y_1,...,y_n)^T$$と定義すると、上の式は以下のように書ける。\n", | |
"<br><br>\n", | |
"$$f = ({\\bf x},{\\bf A}{\\bf y}) = {\\bf x}^T{\\bf A}{\\bf y}$$\n", | |
"<br><br>\n", | |
"この時、次の関係が成り立つ。すなわち任意のベクトル$${\\bf x},{\\bf y}$$と任意の行列$${\\bf A}$$\n", | |
"に対して次の公式を得る。\n", | |
"<br><br>\n", | |
"$$({\\bf A}{\\bf x},{\\bf y}) = ({\\bf x},{\\bf A}^T{\\bf y})$$" | |
] | |
} | |
], | |
"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