Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/02algorithms/11dp/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ $3$ 行 $j$ 列は、$\{a_1,a_2,a_3\}=\{3,4,6\}$ の中からいくつかを使
$i$ 行目を考える時、$a_i$ を入れるか入れないかの二択になります。

- $a_i$ を入れないときは、何も変わらないので一個上のセルの値の真偽値そのままです。つまり、$i$ 行 $j$ 列の真偽値は、$i-1$ 行 $j$ 列の真偽値となります。
- $a_i$ を入れるときは、$a_k(1\leq k\leq i-1)$ を使って、**$j-a_i$** を作ることができていれば、それに $a_i$ を加えることで $j$ を作れそうです。
- $a_i$ を入れるときは、$\{a_k\}(1\leq k\leq i-1)$ を使って、**$j-a_i$** を作ることができていれば、それに $a_i$ を加えることで $j$ を作れそうです。
例えば、$3$ と $4$ を使って、$10-6=4$ が作れていれば、それに $6$ を加えることで $10$ を作ることができます。
そうすると、$i$ 行 $j$ 列の真偽値は、$i-1$ 行 $j-a_i$ 列の真偽値となります。

Expand Down
90 changes: 45 additions & 45 deletions static/gaussian-elimination/gauss_jordan_elimination.ipynb
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
{
"nbformat": 4,
"nbformat_minor": 2,
"metadata": {},
"cells": [
{
"metadata": {},
"source": [
"def gausu_jordan_elimination(a):\n",
" # 前進消去\n",
" for i in range(len(a)):\n",
" # 部分ピボット選択\n",
" for j in range(i + 1, len(a)):\n",
" if abs(a[i][i]) < abs(a[j][i]):\n",
" tmp = a[i]\n",
" a[i] = a[j]\n",
" a[j] = tmp\n",
" # pivot倍で行を割る\n",
" pivot = a[i][i]\n",
" for j in range(i, len(a[i])):\n",
" a[i][j] /= pivot\n",
" # 掃き出す\n",
" for j in range(len(a)):\n",
" if j != i:\n",
" factor = a[j][i]\n",
" for k in range(i, len(a[i])):\n",
" a[j][k] -= factor * a[i][k]\n",
" x = []\n",
" for i in range(len(a)):\n",
" x.append(a[i][len(a[i]) - 1])\n",
" return x\n",
"\n",
"\n",
"print(gausu_jordan_elimination([[0, -2, 3, 2], [-1, 3, -2, 1], [1, -1, 6, 11]]))"
],
"cell_type": "code",
"outputs": [
"nbformat": 4,
"nbformat_minor": 2,
"metadata": {},
"cells": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[1.0, 2.0, 2.0]\n"
]
"metadata": {},
"source": [
"def gauss_jordan_elimination(a):\n",
" # \u524d\u9032\u6d88\u53bb\n",
" for i in range(len(a)):\n",
" # \u90e8\u5206\u30d4\u30dc\u30c3\u30c8\u9078\u629e\n",
" for j in range(i + 1, len(a)):\n",
" if abs(a[i][i]) < abs(a[j][i]):\n",
" tmp = a[i]\n",
" a[i] = a[j]\n",
" a[j] = tmp\n",
" # pivot\u500d\u3067\u884c\u3092\u5272\u308b\n",
" pivot = a[i][i]\n",
" for j in range(i, len(a[i])):\n",
" a[i][j] /= pivot\n",
" # \u6383\u304d\u51fa\u3059\n",
" for j in range(len(a)):\n",
" if j != i:\n",
" factor = a[j][i]\n",
" for k in range(i, len(a[i])):\n",
" a[j][k] -= factor * a[i][k]\n",
" x = []\n",
" for i in range(len(a)):\n",
" x.append(a[i][len(a[i]) - 1])\n",
" return x\n",
"\n",
"\n",
"print(gauss_jordan_elimination([[0, -2, 3, 2], [-1, 3, -2, 1], [1, -1, 6, 11]]))"
],
"cell_type": "code",
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[1.0, 2.0, 2.0]\n"
]
}
],
"execution_count": null
}
],
"execution_count": null
}
]
]
}