172 lines
34 KiB
Plaintext
172 lines
34 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "4c1ca8ef-59b6-4de0-b5ff-ab48c25d28a1",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "99c042bf-04ae-486c-9737-1cd0f6497108",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def f(x):\n",
|
|
" return (x + 3)**2\n",
|
|
"\n",
|
|
"def grad_f(x):\n",
|
|
" return 2 * (x + 3) # derivative of f(x)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "e403baa2-9a95-4318-9c8f-06b89a9ae55f",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"x_current = 2 # starting point\n",
|
|
"learning_rate = 0.1 # step size\n",
|
|
"tolerance = 1e-6 # convergence tolerance\n",
|
|
"max_iterations = 25 # maximum iterations\n",
|
|
"history = [x_current] # sotring history"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "a570e44c-426c-49a2-a629-cec7b75b7ce9",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Iteration 1: x = 1.0000, f(x) = 16.0000\n",
|
|
"Iteration 2: x = 0.2000, f(x) = 10.2400\n",
|
|
"Iteration 3: x = -0.4400, f(x) = 6.5536\n",
|
|
"Iteration 4: x = -0.9520, f(x) = 4.1943\n",
|
|
"Iteration 5: x = -1.3616, f(x) = 2.6844\n",
|
|
"Iteration 6: x = -1.6893, f(x) = 1.7180\n",
|
|
"Iteration 7: x = -1.9514, f(x) = 1.0995\n",
|
|
"Iteration 8: x = -2.1611, f(x) = 0.7037\n",
|
|
"Iteration 9: x = -2.3289, f(x) = 0.4504\n",
|
|
"Iteration 10: x = -2.4631, f(x) = 0.2882\n",
|
|
"Iteration 11: x = -2.5705, f(x) = 0.1845\n",
|
|
"Iteration 12: x = -2.6564, f(x) = 0.1181\n",
|
|
"Iteration 13: x = -2.7251, f(x) = 0.0756\n",
|
|
"Iteration 14: x = -2.7801, f(x) = 0.0484\n",
|
|
"Iteration 15: x = -2.8241, f(x) = 0.0309\n",
|
|
"Iteration 16: x = -2.8593, f(x) = 0.0198\n",
|
|
"Iteration 17: x = -2.8874, f(x) = 0.0127\n",
|
|
"Iteration 18: x = -2.9099, f(x) = 0.0081\n",
|
|
"Iteration 19: x = -2.9279, f(x) = 0.0052\n",
|
|
"Iteration 20: x = -2.9424, f(x) = 0.0033\n",
|
|
"Iteration 21: x = -2.9539, f(x) = 0.0021\n",
|
|
"Iteration 22: x = -2.9631, f(x) = 0.0014\n",
|
|
"Iteration 23: x = -2.9705, f(x) = 0.0009\n",
|
|
"Iteration 24: x = -2.9764, f(x) = 0.0006\n",
|
|
"Iteration 25: x = -2.9811, f(x) = 0.0004\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"for i in range(max_iterations):\n",
|
|
" gradient = grad_f(x_current)\n",
|
|
" x_next = x_current - learning_rate * gradient # update step\n",
|
|
" \n",
|
|
" # Check convergence\n",
|
|
" if abs(x_next - x_current) < tolerance:\n",
|
|
" print(f\"Converged after {i+1} iterations.\")\n",
|
|
" break\n",
|
|
" \n",
|
|
" x_current = x_next\n",
|
|
" history.append(x_current)\n",
|
|
" print(f\"Iteration {i+1}: x = {x_current:.4f}, f(x) = {f(x_current):.4f}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "fc2c152e-569a-4510-b57b-c56285c7b116",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Local minima at x = -2.981110534068521\n",
|
|
"Function value at local minima y = 0.00035681192317650156\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(\"Local minima at x =\", x_current)\n",
|
|
"print(\"Function value at local minima y =\", f(x_current))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "f7c4e645-0ce3-474f-9ce2-d5ef9737b4bf",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.plot(history, [f(val) for val in history], marker='o')\n",
|
|
"plt.xlabel(\"x values\")\n",
|
|
"plt.ylabel(\"f(x)\")\n",
|
|
"plt.title(\"Gradient Descent Convergence\")\n",
|
|
"plt.grid()\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "f4d0ec3f-7b9c-46e5-9264-aa884eccf121",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"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.12.7"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|