Files
DEV5.2/TP03/Exercices.ipynb

256 lines
308 KiB
Plaintext
Raw Normal View History

2025-01-15 13:58:06 +01:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercice 1 : Calcul de dérivées"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABdkAAAPdCAYAAAB2kGG/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hUZfrG8e+k994rIYXeO0hvshRRWawo2PuygLqrP1d0FVZdFXfXvq6xd0AFARENRUAg9N4S0hPSez+/PyZMCAnVQCj357rmInPOO+c8J5DCPe95XpNhGAYiIiIiIiIiIiIiInLWrFq6ABERERERERERERGRS5VCdhERERERERERERGRc6SQXURERERERERERETkHClkFxERERERERERERE5RwrZRURERERERERERETOkUJ2EREREREREREREZFzpJBdREREREREREREROQcKWQXERERERERERERETlHCtlFRERERERERERERM6RQnYRERERuSh98cUXdOjQAUdHR0wmE1u3brXsu+OOO7j66qvP+pgrVqzAxcWF1NTUZqy0ebRq1YqpU6eedpzJZGL27NmW57t372b27NkkJiaet9qOGTJkCEOGDGn24554Tc0tLS2N2bNnN/g3dMzs2bMxmUzn7dwiIiIicvlTyC4iIiIiF52jR48yZcoUIiMjWbp0KevWrSMmJgaALVu28MEHH/Dcc8+d9XGHDx9O7969eeKJJ5q75Atm3bp13HXXXZbnu3fv5plnnrkgIfv5cuI1Nbe0tDSeeeaZJkP2u+66i3Xr1p23c4uIiIjI5c+mpQsQERERETnR/v37qaqq4tZbb2Xw4MEN9v3jH/+gd+/e9OzZ85yO/eCDD3LDDTfw3HPPERoa2hzlXlB9+/Zt6RKahWEYlJeX4+jo2KLXFBISQkhISIudX0REREQufZrJLiIiIiIXlalTp3LVVVcBcMMNN2AymSwtSjIzM1mwYAFTpkxp8Jr77rsPBwcH4uPjLdtqa2sZPnw4/v7+pKenW7aPHz8eFxcX3n333dPWsmnTJm688UZatWqFo6MjrVq14qabbuLIkSMNxsXGxmIymfjll1+4//778fHxwdvbm+uuu460tLQGY6uqqnjssccICAjAycmJq666ig0bNpzx5+f41iqxsbH88Y9/BGDo0KGYTCZMJhOxsbGAedb/uHHj8PPzw97enqCgIMaOHUtKSsopz2EYBi+++CLh4eE4ODjQvXt3lixZ0uTYwsJCZs2aRUREBHZ2dgQHBzN9+nRKSkoa1f3QQw/x1ltv0a5dO+zt7fnggw8aXdO2bdswmUy89957jc61ZMkSTCYT3333HQAHDx5k2rRpREdH4+TkRHBwMOPHj2fHjh2W18TFxdGrVy8Apk2bZvkcHTvfie1iJk6cSHh4OLW1tY3O36dPH7p3797g8/TGG2/QtWtXHB0d8fT0ZNKkSRw+fPiUn18RERERubwoZBcRERGRi8pTTz3F66+/DsCcOXNYt24db7zxBgA//vgjVVVVDB06tMFr5s2bR7t27Zg8eTL5+fkAPPPMM8TFxfHxxx8TGBhoGWtnZ0f//v1ZvHjxaWtJTEykTZs2zJs3j2XLlvHCCy+Qnp5Or169yM7ObjT+rrvuwtbWlk8//ZQXX3yRuLg4br311gZj7r77bv75z39y22238e2333L99ddz3XXXkZeXd1afJ4CxY8cyZ84cAF5//XXWrVvHunXrGDt2LCUlJYwcOZLMzExef/11li9fzrx58wgLC6OoqOiUx33mmWd4/PHHGTlyJAsXLuT+++/n7rvvZt++fQ3GlZaWMnjwYD744AMeeeQRlixZwuOPP05sbCwTJkzAMIwG4xcuXMibb77J3/72N5YtW8bAgQMbnbtLly5069aN999/v9G+2NhY/Pz8+MMf/gCY28B4e3vzj3/8g6VLl/L6669jY2NDnz59LLV2797dcqz/+7//s3yOTtae5o477iApKYmff/65wfa9e/eyYcMGpk2bZtl27733Mn36dEaMGMHChQt544032LVrF/379yczM/OUn2MRERERuYwYIiIiIiIXmV9++cUAjK+++qrB9vvvv99wdHQ0amtrG73mwIEDhpubmzFx4kTjp59+MqysrIz/+7//a/L4Tz75pGFlZWUUFxefVV3V1dVGcXGx4ezsbLz22muW7e+//74BGA888ECD8S+++KIBGOnp6YZhGMaePXsMwPjzn//cYNwnn3xiAMbtt99+2hoA4+mnn7Y8/+qrrwzA+OWXXxqM27RpkwEYCxcuPKtrzMvLMxwcHIxrr722wfZff/3VAIzBgwdbts2dO9ewsrIyNm7c2GDs119/bQDGDz/80KBud3d3Izc397TX9K9//csAjH379lm25ebmGvb29sbMmTNPWnt1dbVRWVlpREdHN/gcb9y40QCM999/v9Frnn76aeP4/xZVVVUZ/v7+xs0339xg3GOPPWbY2dkZ2dnZhmEYxrp16wzAePnllxuMS05ONhwdHY3HHnvspHWKiIiIyOVFM9lFRERE5JKRlpaGr69vg/Yex0RFRfHuu++ycOFCxo0bx8CBAy0tQU7k5+dHbW0tGRkZpzxfcXExjz/+OFFRUdjY2GBjY4OLiwslJSXs2bOn0fgJEyY0eN65c2cAS3uZX375BYBbbrmlwbjJkydjY9O8yyVFRUXh6enJ448/zltvvcXu3bvP6HXr1q2jvLy8UY39+/cnPDy8wbZFixbRsWNHunbtSnV1teUxevRoTCYTcXFxDcYPGzYMT0/P09Zwyy23YG9vb2l7A/DZZ59RUVHRYCZ5dXU1c+bMoX379tjZ2WFjY4OdnR0HDhxo8u/nTNjY2HDrrbcyf/58CgoKAKipqeGjjz7immuuwdvb23LtJpOJW2+9tcG1BwQE0KVLl0bXLiIiIiKXL4XsIiIiInLJKCsrw8HB4aT7x44di7+/P+Xl5cyYMQNra+smxx07RllZ2SnPd/PNN/Of//yHu+66i2XLlrFhwwY2btyIr69vk689FsAeY29v3+A8OTk5AAQEBDQYZ2Nj0+i1v5e7uzsrV66ka9euPPHEE3To0IGgoCCefvppqqqqTvq6k9XY1LbMzEy2b9+Ora1tg4erqyuGYTRqqXN8255T8fLyYsKECXz44YfU1NQA5lYxvXv3pkOHDpZxM2bM4KmnnmLixIl8//33/Pbbb2zcuJEuXbqc9u/2VO644w7Ky8v5/PPPAVi2bBnp6ekNAv7MzEwMw8Df37/R9a9fv77JdkIiIiIicnlq3ukyIiIiIiLnkY+PD5s3bz7p/vvuu4+ioiI6dOjAI488wsCBA5ucOZ2bm2s53skUFBSwaNEinn76af7yl79YtldUVFhef7aOBekZGRkEBwdbtldXV1vC7ebUqVMnPv/8cwzDYPv27cTGxvLss8/i6OjY4JpOVuOJMjIyaNWqleW5j48Pjo6O/O9//2vyWCd+fpu6A+Fkpk2bxldffcXy5csJCwtj48aNvPnmmw3GfPzxx9x2222WvvTHZGdn4+HhccbnOlH79u3p3bs377//Pvfeey/vv/8+QUFBjBo1yjLGx8cHk8nE6tWrLW+mHK+pbSIiIiJyedJMdhERERG5ZLRt25acnBxLG4/j/fe//+Xjjz/mP//5D9999x35+fkNZh4f7/Dhw3h7e+Pv73/Sc5lMJgzDaBSW/ve//7XMrj5bQ4YMAeCTTz5psP3LL7+kurr6nI554mz5pphMJrp06cKrr76Kh4fHKd+o6Nu3Lw4ODo1qXLt2raXtzTHjxo3j0KFDeHt707Nnz0aP4wP5szVq1CiCg4N5//33ef/993FwcOCmm25qdF0n/v0sXryY1NTUBtvO5HN0omnTpvHbb7+xZs0avv/+e26//fYGd0aMGzcOwzBITU1t8to7dep0tpcsIiIiIpcozWQXERERkUvGkCFDMAyD3377rcGs4h07dvDII49w++23W4L19957j0mTJjFv3jymT5/e4Djr169n8ODBp5xZ7ebmxqBBg3jppZfw8fGhVatWrFy5kvfee++cZ0m3a9e
"text/plain": [
"<Figure size 1500x1000 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# Define functions\n",
"def f(x):\n",
" return 3 * x**2 - 4 * x + 5\n",
"\n",
"def g(x):\n",
" return np.sin(2 * x)\n",
"\n",
"def h(x):\n",
" return np.log(x**3)\n",
"\n",
"# Define derivatives\n",
"def f_prime(x):\n",
" return 6 * x - 4\n",
"\n",
"def g_prime(x):\n",
" return 2 * np.cos(2 * x)\n",
"\n",
"def h_prime(x):\n",
" return 3 / x\n",
"\n",
"# Define second derivatives\n",
"def f_double_prime(x):\n",
" return 6\n",
"\n",
"def g_double_prime(x):\n",
" return -4 * np.sin(2 * x)\n",
"\n",
"def h_double_prime(x):\n",
" return -3 / (x**2)\n",
"\n",
"# Find critical points (where derivative is zero)\n",
"f_crit_points = [4 / 6]\n",
"g_crit_points = [x for x in np.arange(-2*np.pi, 2*np.pi, 0.01) if np.isclose(g_prime(x), 0, atol=1e-2)]\n",
"h_crit_points = [] # No critical points for h(x) in its domain\n",
"\n",
"# Classify critical points using second derivative\n",
"f_crit_classification = \"Minima\" if f_double_prime(0) > 0 else \"Maxima\"\n",
"g_crit_classifications = [\n",
" (\"Minima\" if g_double_prime(x) > 0 else \"Maxima\") for x in g_crit_points\n",
"]\n",
"\n",
"# Plot the functions and their derivatives for visualization\n",
"x_values = np.linspace(-10, 10, 1000)\n",
"x_values_positive = np.linspace(0.1, 10, 1000) # For h(x) which is defined only for x > 0\n",
"\n",
"plt.figure(figsize=(15, 10))\n",
"\n",
"# Plot f(x)\n",
"plt.subplot(3, 1, 1)\n",
"plt.plot(x_values, f(x_values), label=\"f(x) = 3x^2 - 4x + 5\")\n",
"plt.plot(x_values, f_prime(x_values), label=\"f'(x)\", linestyle=\"--\")\n",
"plt.axhline(0, color=\"gray\", linewidth=0.5)\n",
"plt.scatter(f_crit_points, [f(x) for x in f_crit_points], color=\"red\", label=\"Critical Points\")\n",
"plt.title(\"f(x) and its derivative\")\n",
"plt.legend()\n",
"\n",
"# Plot g(x)\n",
"plt.subplot(3, 1, 2)\n",
"plt.plot(x_values, g(x_values), label=\"g(x) = sin(2x)\")\n",
"plt.plot(x_values, g_prime(x_values), label=\"g'(x)\", linestyle=\"--\")\n",
"plt.axhline(0, color=\"gray\", linewidth=0.5)\n",
"plt.scatter(g_crit_points, [g(x) for x in g_crit_points], color=\"red\", label=\"Critical Points\")\n",
"plt.title(\"g(x) and its derivative\")\n",
"plt.legend()\n",
"\n",
"# Plot h(x)\n",
"plt.subplot(3, 1, 3)\n",
"plt.plot(x_values_positive, h(x_values_positive), label=\"h(x) = ln(x^3)\")\n",
"plt.plot(x_values_positive, h_prime(x_values_positive), label=\"h'(x)\", linestyle=\"--\")\n",
"plt.axhline(0, color=\"gray\", linewidth=0.5)\n",
"plt.title(\"h(x) and its derivative\")\n",
"plt.legend()\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# Define the functions and their derivatives\n",
"def f_cos(x):\n",
" return np.cos(x)\n",
"\n",
"def f_cos_prime(x):\n",
" return -np.sin(x)\n",
"\n",
"def g_sqrt(x):\n",
" return np.sqrt(x + 1)\n",
"\n",
"def g_sqrt_prime(x):\n",
" return 1 / (2 * np.sqrt(x + 1))\n",
"\n",
"# Approximation using linearization: f(a) + f'(a)(x - a)\n",
"# For f(x) = cos(x), a = 0, x = 0.1\n",
"a_f = 0\n",
"x_f = 0.1\n",
"approx_cos_0_1 = f_cos(a_f) + f_cos_prime(a_f) * (x_f - a_f)\n",
"\n",
"# For g(x) = sqrt(x + 1), a = 0.05, x = 0\n",
"a_g = 0\n",
"x_g = 0.05\n",
"approx_sqrt_1_05 = g_sqrt(a_g) + g_sqrt_prime(a_g) * (x_g - a_g)\n",
"\n",
"# Exact values\n",
"exact_cos_0_1 = np.cos(0.1)\n",
"exact_sqrt_1_05 = np.sqrt(1.05)\n",
"\n",
"# Display results\n",
"results = {\n",
" \"Function\": [\"cos(x)\", \"sqrt(x + 1)\"],\n",
" \"Approximation\": [approx_cos_0_1, approx_sqrt_1_05],\n",
" \"Exact Value\": [exact_cos_0_1, exact_sqrt_1_05],\n",
" \"Difference\": [\n",
" abs(approx_cos_0_1 - exact_cos_0_1),\n",
" abs(approx_sqrt_1_05 - exact_sqrt_1_05),\n",
" ],\n",
"}\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAMWCAYAAAAgRDUeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hUZd7G8e+09N5JCAm99yK9CCKKihUVLNh2La91ddfVte6qq7vrsvYOiqJiw16wACIgvfcaCBDSe5nMnPePE4KRIiDJSWbuz3XNNXPOnJm5J88kmfnNU2yGYRiIiIiIiIiIiIg0ILvVAURERERERERExP+oKCUiIiIiIiIiIg1ORSkREREREREREWlwKkqJiIiIiIiIiEiDU1FKREREREREREQanIpSIiIiIiIiIiLS4FSUEhERERERERGRBqeilIiIiIiIiIiINDgVpUREREREREREpMGpKCUiItIETZ06FZvNdtjTnXfeaWm26dOnM3ny5MNeZ7PZePDBBxs0zwHvvvsunTt3Jjg4GJvNxooVK2qvu/rqqxkzZsxx3+d3331HWFgYmZmZJzHpyZGens6kSZN+87hft8m6det48MEH2bFjx0nLMmnSpDqv0dDQUNLT0znnnHOYMmUKlZWVJ+2xfv246enp9XLfBzz33HNMnTr1kP07duzAZrMd9joRERExOa0OICIiIiduypQpdOjQoc6+5ORki9KYpk+fzpo1a7jtttsOuW7BggU0b968wTNlZ2dz+eWXM2bMGJ577jkCAwNp164dAMuXL+f111/n559/Pu77HTlyJP369eOee+7h9ddfP9mxG8Sv22TdunU89NBDDB8+/KQWdIKDg/n+++8BKC8vZ9euXXz55Zdcd911/Oc//+Grr7466a+N++67j1tvvfWk3uevPffcc8TFxR1SAGzWrBkLFiygdevW9fr4IiIiTZmKUiIiIk1Yly5d6NOnj9Uxjln//v0tedxNmzbhdru57LLLGDZsWJ3r/vnPf9KvX78T/jnedNNNXHzxxfzjH/8gNTX1ZMRtUA3VJna7/ZDHuuKKK7jqqqs466yzuPDCC1m4cOFJeayysjJCQkIsLQgFBgZa9noXERFpKjR8T0RExEcdaajcr4d1HRgK+MMPP3DDDTcQFxdHbGws559/Pnv27Dnk9tOnT2fAgAGEhYURFhZGjx49ePXVVwEYPnw4n3/+OTt37qwzXOtomdasWcO4ceOIjo4mKCiIHj16HNLraPbs2dhsNt5++23uvfdekpOTiYiIYNSoUWzcuPGoP4dJkyYxePBgAC6++GJsNhvDhw8HICsri48++ojLL7+8zm2uv/56goKCWLp0ae0+r9fLyJEjSUxMZO/evbX7zz77bMLCwnj55ZePmgNgyZIlXHLJJaSnpxMcHEx6ejqXXnopO3furHPc8bSJ2+3mz3/+M0lJSYSEhDB48GAWLVr0m1kO+GWbTJ06lYsuugiAESNG1LbfgSFoy5cv56yzziIhIYHAwECSk5MZO3Ysu3fvPubH+7XRo0dz3XXX8fPPPzN37tw617377rsMGDCA0NBQwsLCOP3001m+fHmdYyZNmkRYWBirV69m9OjRhIeHM3LkyNrrftnbq2fPngwZMuSQDB6Ph5SUFM4///zafQ899BCnnHIKMTExRERE0KtXL1599VUMw6g9Jj09nbVr1zJnzpzan9WBx/v18L2ZM2dis9n47rvvDnn8559/HpvNxqpVq2r3LVmyhHPOOYeYmBiCgoLo2bMnM2bMOLYfqoiISBOhopSIiEgT5vF4qK6urnM6Uddeey0ul4vp06fzxBNPMHv2bC677LI6x9x///1MnDiR5ORkpk6dykcffcSVV15ZW1R57rnnGDRoEElJSSxYsKD2dCQbN25k4MCBrF27lqeeeooPP/yQTp06MWnSJJ544olDjr/nnnvYuXMnr7zyCi+99BKbN2/m7LPPxuPxHPEx7rvvPp599lkAHn30URYsWMBzzz0HwDfffIPb7WbEiBF1bjN58mQ6duzI+PHjKSgoAMwixezZs3nzzTdp1qxZ7bEBAQEMHDiQzz///Cg/XdOOHTto3749kydP5uuvv+bxxx9n79699O3bl5ycnEOOP5Y2ue666/j3v//NFVdcwccff8wFF1zA+eefT35+/m/m+bWxY8fy6KOPAvDss8/Wtt/YsWMpLS3ltNNOIysri2effZZZs2YxefJkWrRoQXFx8XE/1i+dc845AHWKUo8++iiXXnopnTp1YsaMGUybNo3i4mKGDBnCunXr6ty+qqqKc845h1NPPZWPP/6Yhx566LCPc9VVVzFv3jw2b95cZ/8333zDnj17uOqqq2r37dixgz/+8Y/MmDGDDz/8kPPPP5+bb76Zv//977XHfPTRR7Rq1YqePXvW/qw++uijwz72gWLelClTDrlu6tSp9OrVi27dugHwww8/MGjQIAoKCnjhhRf4+OOP6dGjBxdffLHmqBIREd9iiIiISJMzZcoUAzjsye12G4ZhGIDxwAMPHHLbtLQ048orrzzkvm688cY6xz3xxBMGYOzdu9cwDMPYtm2b4XA4jIkTJx4129ixY420tLTDXvfrTJdccokRGBhoZGRk1DnujDPOMEJCQoyCggLDMAzjhx9+MADjzDPPrHPcjBkzDMBYsGDBUTMduP17771XZ/8NN9xgBAcHG16v95DbbN682YiIiDDOPfdc49tvvzXsdrvxt7/97bD3f++99xp2u90oKSk5ao5fq66uNkpKSozQ0FDjf//7X+3+Y22T9evXG4Bx++231znurbfeMoA67Xwkv26T9957zwCMH374oc5xS5YsMQBj5syZx/UcDcMwrrzySiM0NPSI1x94HjfccINhGIaRkZFhOJ1O4+abb65zXHFxsZGUlGSMHz++zn0DxmuvvXbYx/3lazEnJ8cICAgw7rnnnjrHjR8/3khMTKz93fk1j8djuN1u4+GHHzZiY2PrvF46d+5sDBs27JDbbN++3QCMKVOm1O674447jODg4NrXtWEYxrp16wzAePrpp2v3dejQwejZs+chec466yyjWbNmhsfjOWxOERGRpkY9pURERJqwN954g8WLF9c5OZ0nNmXkgd4qBxzotXGgF9SsWbPweDzcdNNNvy/0L3z//feMHDnykLmYJk2aRFlZ2SG9rH4r4/Has2cP8fHxdYYYHtCmTRtefvllZs6cyVlnncWQIUOOuHJgQkICXq+Xffv2HfXxSkpK+Mtf/kKbNm1wOp04nU7CwsIoLS1l/fr1hxz/W8/3hx9+AGDixIl1jhs/fvwJvw6OpE2bNkRHR/OXv/yFF1544ZDeSr+H8YshcQBff/011dXVXHHFFXV6AQYFBTFs2DBmz559yH1ccMEFv/k4sbGxnH322bz++ut4vV4A8vPz+fjjj7niiivq/My+//57Ro0aRWRkJA6HA5fLxf33309ubi779+8/oed59dVXU15ezrvvvlu7b8qUKQQGBjJhwgQAtmzZwoYNG2rb9JfP/8wzz2Tv3r2/OWRVRESkqVBRSkREpAnr2LEjffr0qXM6UbGxsXW2AwMDAXOlNDBXsANO6gppubm5dYbCHXBgBcHc3Nzjyni8ysvLCQoKOuL1Y8eOJTExkYqKCu644w4cDsdhjztwH7+VY8KECTzzzDNce+21fP311yxatIjFixcTHx9/2Nv+1vM98PNJSkqqc5zT6Tzktr9XZGQkc+bMoUePHtxzzz107tyZ5ORkHnjgAdxu9++67wNFtgPtnpWVBUDfvn1xuVx1Tu++++4hQx1DQkKIiIg4pse6+uqryczMZNasWQC8/fbbVFZW1plnbdGiRYwePRqAl19+mZ9++onFixdz7733Aif+euvcuTN9+/atHcLn8Xh48803GTduHDExMXWe+5133nnIc7/xxhsBDjvUU0REpCnS6nsiIiI+KjAwkMrKykP2/7rQc6zi4+MB2L1790lbZS42NrbOpOEHHJjMOy4u7qQ8zpHExcWxbNmyI15//fXXU1xcTOfOnbnlllsYMmQI0dHRhxyXl5dXe39HUlh
"text/plain": [
"<Figure size 1200x800 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Reimport necessary libraries after reset\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# Define the functions\n",
"def f_func(x):\n",
" return x**3 - 3 * x + 2\n",
"\n",
"def g_func(x):\n",
" return np.exp(-x) * np.sin(2 * x)\n",
"\n",
"# Numerical derivative using finite difference\n",
"def numerical_derivative(func, x, h=1e-5):\n",
" return (func(x + h) - func(x)) / h\n",
"\n",
"# Define x values for plotting\n",
"x_values = np.linspace(-2, 2, 1000)\n",
"\n",
"# Compute functions and derivatives\n",
"f_values = f_func(x_values)\n",
"g_values = g_func(x_values)\n",
"f_prime_values = numerical_derivative(f_func, x_values)\n",
"g_prime_values = numerical_derivative(g_func, x_values)\n",
"\n",
"# Plotting\n",
"plt.figure(figsize=(12, 8))\n",
"\n",
"# Plot f(x) and its derivative\n",
"plt.subplot(2, 1, 1)\n",
"plt.plot(x_values, f_values, label=\"f(x) = x^3 - 3x + 2\")\n",
"plt.plot(x_values, f_prime_values, label=\"f'(x)\", linestyle=\"--\")\n",
"plt.title(\"Function f(x) and its Derivative\")\n",
"plt.xlabel(\"x\")\n",
"plt.ylabel(\"y\")\n",
"plt.axhline(0, color=\"gray\", linewidth=0.5)\n",
"plt.grid(True)\n",
"plt.legend()\n",
"\n",
"# Plot g(x) and its derivative\n",
"plt.subplot(2, 1, 2)\n",
"plt.plot(x_values, g_values, label=\"g(x) = e^(-x) * sin(2x)\")\n",
"plt.plot(x_values, g_prime_values, label=\"g'(x)\", linestyle=\"--\")\n",
"plt.title(\"Function g(x) and its Derivative\")\n",
"plt.xlabel(\"x\")\n",
"plt.ylabel(\"y\")\n",
"plt.axhline(0, color=\"gray\", linewidth=0.5)\n",
"plt.grid(True)\n",
"plt.legend()\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"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": 4
}