{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Chapter 10 - Curve fitting regression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example No. 10_01 Pg No. 326"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "b =  [-1 -1  0  0  1]\n",
      "a =  [ 3  3  1  1 -2]\n",
      "y= [-x + 3 -x + 3 1 1 x - 2]\n"
     ]
    }
   ],
   "source": [
    "from numpy import array\n",
    "from sympy.abc import x\n",
    "#Fitting a Straight Line\n",
    "\n",
    "X = range(1,6)\n",
    "Y = array([[ 3, 4, 5 ,6 ,8 ]])\n",
    "n = len(X)#\n",
    "X=array(X)\n",
    "b = ( n*sum(X*Y) - sum(X)*sum(Y) )/( n*sum(X*X) - (sum(X))**2 )\n",
    "a = sum(Y)/n - b*sum(X)/n\n",
    "print 'b = ',b\n",
    "print 'a = ',a\n",
    "y = a + b*x\n",
    "print 'y=',y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example No. 10_02 Pg No. 331"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "b =  2.0\n",
      "lna =  -0.69314718056\n",
      "a =  0.5\n",
      "\n",
      " The power function equation obtained is \n",
      " y = 0.5x**2\n"
     ]
    }
   ],
   "source": [
    "from numpy import array,log,exp\n",
    "from sympy.abc import x\n",
    "\n",
    "#Fitting a Power-Function model to given data\n",
    "\n",
    "X = array(range(1,6))\n",
    "Y = [ 0.5, 2 ,4.5 ,8 ,12.5 ]\n",
    "Xnew = log(X)\n",
    "Ynew = log(Y)\n",
    "n = len(Xnew)\n",
    "b = ( n*sum(Xnew*Ynew) - sum(Xnew)*sum(Ynew) )/( n*sum(Xnew*Xnew) - ( sum(Xnew) )**2 )\n",
    "lna = sum(Ynew)/n - b*sum(Xnew)/n\n",
    "a = exp(lna)\n",
    "print 'b = ',b\n",
    "print 'lna = ',lna\n",
    "print 'a = ',a\n",
    "print '\\n The power function equation obtained is \\n y = %.4Gx**%.4G'%(a,b)#"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example No. 10_03 Pg No. 332"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "b =  37.6294062985\n",
      "a =  20.9234245534\n",
      "The relationship between T and t is \n",
      "T = 37.63*e**(t/4) + 20.92 \n",
      "\n",
      "The temperature at t = 6 is 189.566723485\n"
     ]
    }
   ],
   "source": [
    "from numpy import array,log,exp\n",
    "time = array(range(1,5))\n",
    "T = [ 70 ,83 ,100 ,124 ]\n",
    "t = 6\n",
    "Fx = exp(time/4.0)\n",
    "n = len(Fx)\n",
    "Y = T #\n",
    "b = ( n*sum(Fx*Y) - sum(Fx)*sum(Y) )/( n*sum(Fx*Fx) - (sum(Fx))**2 )\n",
    "a = sum(Y)/n - b*sum(Fx)/n\n",
    "print 'b = ',b\n",
    "print 'a = ',a\n",
    "print 'The relationship between T and t is \\nT = %.4G*e**(t/4) + %.4G \\n'%(b,a)\n",
    "#deff('T = T(t)'%('T = b*exp(t/4) + a '\n",
    "def T(t):\n",
    "    tt=b*exp(t/4.0)+a\n",
    "    return tt\n",
    "                 \n",
    "T_6 = T(6)\n",
    "print 'The temperature at t = 6 is',T_6"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example No. 10_04 Pg NO. 335"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using CA = B form , we get\n",
      "B [   6.   62.  190.]\n",
      "C [[  1.   1.   4.]\n",
      " [  1.   4.  10.]\n",
      " [  4.  10.  30.]]\n",
      "A =  [[  20.          103.33333333 -190.        ]\n",
      " [  10.          144.66666667 -190.        ]\n",
      " [  -6.          -62.           95.        ]]\n",
      "Therefore the least sqaures polynomial is\n",
      "   y = 1J + 1J*x + 1J*x**2 \n",
      "[  20.          103.33333333 -190.        ]\n",
      "[  10.          144.66666667 -190.        ]\n",
      "[ -6. -62.  95.]\n"
     ]
    }
   ],
   "source": [
    "from numpy import array,ones,identity\n",
    "from numpy.linalg import inv\n",
    "\n",
    "#Curve Fitting\n",
    "\n",
    "x = array(range(1,5))\n",
    "y = [6, 11, 18, 27 ]\n",
    "n = len(x) #Number of data points\n",
    "m = 2+1       #Number of unknowns\n",
    "print 'Using CA = B form , we get'\n",
    "C=identity(m)\n",
    "B=ones(m)\n",
    "for j in range(0,m):\n",
    "    for k in range(0,m):\n",
    "        C[j,k] = sum(x**(j+k-2))\n",
    "    \n",
    "    B[j] = sum( y*( x**( j-1 ) ) )\n",
    "\n",
    "print 'B',B\n",
    "print 'C',C\n",
    "A = inv(C)*B\n",
    "print 'A = ',A\n",
    "print 'Therefore the least sqaures polynomial is\\n   y = 1J + 1J*x + 1J*x**2 \\n',(A[0])\n",
    "print A[1]\n",
    "print A[2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example No. 10_05 Pg No. 342"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "C=\n",
      "[[  4.  10.   6.]\n",
      " [ 10.  30.  20.]\n",
      " [  6.  20.  14.]]\n",
      "B=\n",
      "[  84.  240.  156.]\n",
      "\n",
      " The regression plane is \n",
      " y = 5 + 6*x + 0*z \n",
      "\n"
     ]
    }
   ],
   "source": [
    "from numpy import array,ones,identity,arange,vstack,transpose\n",
    "from scipy.sparse.linalg import lsqr\n",
    "#Plane Fitting\n",
    "\n",
    "x = range(1,5)\n",
    "z = range(0,4)\n",
    "y = arange(12,31,6)\n",
    "n = len(x) #Number of data points\n",
    "m = 3         #Number of unknowns\n",
    "G = vstack([ones(n),x,z])\n",
    "H = transpose(G)\n",
    "C = G.dot(H)\n",
    "B = y.dot(H)\n",
    "D = lsqr(C,B)\n",
    "print 'C=\\n',C\n",
    "print 'B=\\n',B\n",
    "print '\\n The regression plane is \\n y = %d + %.f*x + %d*z \\n'%(D[0][0],D[0][1],D[0][2])\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}