{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "LeastSquaresMethod.ipynb",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"source": [
"# 最小二乗法"
],
"metadata": {
"id": "c64lnrnMpN4G"
}
},
{
"metadata": {
"id": "rLVeVbe-umCI",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 281
},
"outputId": "a8c88009-f9c3-48a1-ecfb-1a19ba7c5249"
},
"cell_type": "code",
"source": [
"#ライブラリの読み込み\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 説明変数と目的変数を定義\n",
"X = np.array( [2.0, 3.0, 4.0] )\n",
"Y = np.array( [5.0, 6.0, 9.0] )\n",
"\n",
"# 最小二乗法\n",
"A = np.array( [X, np.ones(len(X)) ] )\n",
"AT = A.T \n",
"a,b = np.linalg.lstsq( AT, Y, rcond=None )[0]\n",
"\n",
"# グラフの表示\n",
"plt.plot( X, Y, \"ro\")\n",
"plt.plot( X, ( a*X+b ), \"g--\")\n",
"plt.title( \"a=\"+ str(a) + \" , b=\" + str(b) )\n",
"plt.show()\n"
],
"execution_count": 3,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"