{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import numpy.linalg as LA" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Solve Matrix Equation : $\\large{Ax = b}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example: 1 Modelling " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
no.fxyz
010.7204820.7374514.100.8695
120.8123910.8842483.650.5750
230.8135300.8638713.550.5125
340.5325720.8729023.850.6520
450.6973050.8916654.700.5400
560.7334070.8809750.700.7745
670.6541870.7333622.250.7130
780.7092190.839979-1.100.9320
890.7500320.917038-1.250.7335
9100.7131970.9159130.900.7345
10110.5211820.885547-0.150.7685
11120.8248200.8843690.600.7090
12130.7707850.8734441.250.4890
13140.7728230.7268313.400.5375
14150.6008030.6386671.800.8985
15160.7928570.7536391.100.5705
16170.8002590.8199850.800.4965
17180.5376060.847556-0.250.8340
18190.5756790.8846142.850.7870
19200.8213200.8639130.750.6245
20210.3252090.757005-0.200.7630
21220.7907630.8991365.300.4470
22230.8037980.8975013.450.3915
23240.7857170.8958344.400.4190
24250.7549320.8085293.800.5265
25260.7939820.8924135.100.4350
26270.7897230.8811863.400.4320
27280.7979510.9361633.200.5280
28290.7969060.9342642.800.4445
29300.8001490.9417573.000.4490
\n", "
" ], "text/plain": [ " no. f x y z\n", "0 1 0.720482 0.737451 4.10 0.8695\n", "1 2 0.812391 0.884248 3.65 0.5750\n", "2 3 0.813530 0.863871 3.55 0.5125\n", "3 4 0.532572 0.872902 3.85 0.6520\n", "4 5 0.697305 0.891665 4.70 0.5400\n", "5 6 0.733407 0.880975 0.70 0.7745\n", "6 7 0.654187 0.733362 2.25 0.7130\n", "7 8 0.709219 0.839979 -1.10 0.9320\n", "8 9 0.750032 0.917038 -1.25 0.7335\n", "9 10 0.713197 0.915913 0.90 0.7345\n", "10 11 0.521182 0.885547 -0.15 0.7685\n", "11 12 0.824820 0.884369 0.60 0.7090\n", "12 13 0.770785 0.873444 1.25 0.4890\n", "13 14 0.772823 0.726831 3.40 0.5375\n", "14 15 0.600803 0.638667 1.80 0.8985\n", "15 16 0.792857 0.753639 1.10 0.5705\n", "16 17 0.800259 0.819985 0.80 0.4965\n", "17 18 0.537606 0.847556 -0.25 0.8340\n", "18 19 0.575679 0.884614 2.85 0.7870\n", "19 20 0.821320 0.863913 0.75 0.6245\n", "20 21 0.325209 0.757005 -0.20 0.7630\n", "21 22 0.790763 0.899136 5.30 0.4470\n", "22 23 0.803798 0.897501 3.45 0.3915\n", "23 24 0.785717 0.895834 4.40 0.4190\n", "24 25 0.754932 0.808529 3.80 0.5265\n", "25 26 0.793982 0.892413 5.10 0.4350\n", "26 27 0.789723 0.881186 3.40 0.4320\n", "27 28 0.797951 0.936163 3.20 0.5280\n", "28 29 0.796906 0.934264 2.80 0.4445\n", "29 30 0.800149 0.941757 3.00 0.4490" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv('data/data1.csv')\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation}\n", "f=a+bx+cy+dz\n", "\\end{equation}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Normal equation are\n", "\n", "$\\sum_{}^{}{f}=na+b\\sum{x}+c\\sum{y}+d\\sum{z}$\n", "\n", "$\\sum_{}^{}{xf}=a\\sum{x}+b\\sum{x^2}+c\\sum{xy}+d\\sum{xz}$\n", "\n", "$\\sum_{}^{}{yf}=a\\sum{y}+b\\sum{xy}+c\\sum{y^2}+d\\sum{yz}$\n", "\n", "$\\sum_{}^{}{zf}=a\\sum{z}+b\\sum{xz}+c\\sum{zy}+d\\sum{z^2}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation}\n", "A=\n", "\\begin{pmatrix}\n", "a11 & a12 & a13 &a14\\\\\n", "a21 & a22 & a23 &a24\\\\\n", "a31 & a32 & a33 &a34\\\\\n", "a41 & a42 & a43 &a44\\\\\n", "\\end{pmatrix}\n", "\\end{equation}\n", "\\begin{equation}\n", "b=\n", "\\begin{pmatrix}\n", "b1 \\\\\n", "b2 \\\\\n", "b3 \\\\\n", "b4\\\\\n", "\\end{pmatrix}\n", "\\end{equation}" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "n=30\n", "a11=n\n", "a12=np.sum(df['x']) #sum of x\n", "a13=np.sum(df['y']) #sum of y\n", "a14=np.sum(df['z']) #sum of z\n", "a21=np.sum(df['x']) #sum of x\n", "a22=np.sum(df['x']**2) #sum of x2\n", "a23=np.sum(np.dot(df['x'],df['y'])) #sum of xy\n", "a24=np.sum(np.dot(df['x'],df['z'])) #sum of xz\n", "a31=np.sum(df['y']) #sum of y\n", "a32=np.sum(np.dot(df['y'],df['x'])) #sum of xy\n", "a33=np.sum(df['y']**2) #sum of y2 \n", "a34=np.sum(np.dot(df['y'],df['z'])) #sum of yz\n", "a41=np.sum(df['z']) #sum of z\n", "a42=np.sum(np.dot(df['z'],df['x'])) #sum of xz\n", "a43=np.sum(np.dot(df['z'],df['y'])) #sum of yz\n", "a44=np.sum(df['z']**2) #sum of z2\n", "b1=np.sum(df['f']) #sum of f\n", "b2=np.sum(np.dot(df['f'],df['x'])) #sum of fx\n", "b3=np.sum(np.dot(df['f'],df['y'])) #sum of fy\n", "b4=np.sum(np.dot(df['f'],df['z'])) #sum of fz" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.85507492, 0.14860913, -0.00131447, -0.41792768])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[a11,a12,a13,a14],[a21,a22,a23,a24],[a31,a32,a33,a34],[a41,a42,a43,a44]])\n", "b = np.array([b1,b2,b3,b4])\n", "x = LA.solve(A,b)\n", "x" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " a= 0.855\n", "\n", " b= 0.149\n", "\n", " c= -0.00131\n", "\n", " d= -0.418\n" ] } ], "source": [ "print('\\n a=',\"{:10.3}\".format(x[0]))\n", "print('\\n b=',\"{:.3}\".format(x[1]))\n", "print('\\n c=',\"{:.3}\".format(x[2]))\n", "print('\\n d=',\"{:.3}\".format(x[3]))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0.5958894003599622,\n", " 0.7413760360958024,\n", " 0.7645997139268501,\n", " 0.7072466193451008,\n", " 0.7557255547611699,\n", " 0.6613906839806531,\n", " 0.6631192534951209,\n", " 0.5918408249814666,\n", " 0.68644830702124,\n", " 0.6830369792734646,\n", " 0.6656950521790324,\n", " 0.6894008781179288,\n", " 0.7788669964212885,\n", " 0.7339832421031306,\n", " 0.5721125629994265,\n", " 0.7271988454495809,\n", " 0.7683794858588099,\n", " 0.6328064581873758,\n", " 0.6538812940618572,\n", " 0.7214786253986405,\n", " 0.6489567737789436,\n", " 0.7949143877809594,\n", " 0.8202981096648657,\n", " 0.8073086989485949,\n", " 0.7501958066178496,\n", " 0.7991933185714644,\n", " 0.8010132155323733,\n", " 0.7693252220065355,\n", " 0.8044656816412954,\n", " 0.8034356104392159]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f_exp=[] # expected value of f\n", "for i in range(n):\n", " f_exp.append(x[0]+x[1]*df.iloc[i,2]+x[2]*df.iloc[i,3]+x[3]*df.iloc[i,4])\n", "f_exp " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\begin{equation}\n", "RMSE=\\sqrt{\\frac{1}{n}\\sum{(f-\\hat{f})^2}}\\\\\n", "R^2=1-\\frac{\\sum{(f-\\hat{f})^2}}{\\sum{(f-\\bar{f})^2}}\n", "\\end{equation}" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "RMSE=np.sqrt(np.sum((df['f']-f_exp)**2)/n)\n", "R_square=1-(np.sum(np.sum(np.sum((df['f']-f_exp)**2))/np.sum((df['f']-df['f'].mean())**2)))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " RMSE= 0.093\n", "\n", " R square= 0.36\n" ] } ], "source": [ "print('\\n RMSE=',\"{:.2}\".format(RMSE))\n", "print('\\n R square=',\"{:.2}\".format(R_square))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example:2 Electric circuit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![img](image/circuit.jpg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate I1,I2,I3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using Kirchhoff's laws in junction a,loop abdea,aegha" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$I3=I1+I2$\n", "\n", "$25.1I1+24+40.5I2=0$\n", "\n", "$-18+40.5I2+78.25I3=0$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 18.9867374, -12.3596817, 6.6270557])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[1,1,-1],[25.1,40.5,0],[0,40.5,78.25]]) #arranging I1,I2,I3\n", "b = np.array([0,-24,18])\n", "x = LA.solve(A,b)\n", "x" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " I1= 19.0\n", "\n", " I2= -12.4\n", "\n", " I3= 6.63\n" ] } ], "source": [ "print('\\n I1=',\"{:.3}\".format(x[0]))\n", "print('\\n I2=',\"{:.3}\".format(x[1]))\n", "print('\\n I3=',\"{:.3}\".format(x[2]))\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.7.6" }, "widgets": { "state": {}, "version": "1.1.2" } }, "nbformat": 4, "nbformat_minor": 2 }