Created
April 1, 2017 14:24
-
-
Save TonyMooori/323aefb7083d8b8495e4ffcdea210b03 to your computer and use it in GitHub Desktop.
磁気センサのオフセット値の計算byPython
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "from mpl_toolkits.mplot3d import Axes3D\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import pandas as pd\n", | |
| "\n", | |
| "%matplotlib inline" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 68, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# よみとる\n", | |
| "data = pd.read_csv(\"data.csv\")\n", | |
| "xs = data['x']\n", | |
| "ys = data['y']\n", | |
| "zs = data['z']" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 69, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[<mpl_toolkits.mplot3d.art3d.Line3D at 0x95fa930>]" | |
| ] | |
| }, | |
| "execution_count": 69, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x95eefb0>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# 表示してみる\n", | |
| "fig = plt.figure()\n", | |
| "ax = plt.axes(projection=\"3d\")\n", | |
| "ax.plot(xs,ys,zs,'o')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 70, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# 誤差関数を定義\n", | |
| "def calc_error(xs,ys,zs,w):\n", | |
| " # w = [a,b,c,r]\n", | |
| " ret = np.square(xs-w[0])+np.square(ys-w[1])+np.square(ys-w[2])-w[3]*w[3]\n", | |
| " #print np.square(xs-w[0])\n", | |
| " ret = np.square(ret)\n", | |
| " #print ret\n", | |
| " return np.sum(ret)/len(xs)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 75, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "1280.0654347547095" | |
| ] | |
| }, | |
| "execution_count": 75, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# ちょっと計算\n", | |
| "calc_error(xs,ys,zs,[0,0,0,6])" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 76, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# 誤差関数のgradientを計算する関数\n", | |
| "def fprime(f,w,eps=1e-4):\n", | |
| " w = np.array(w,np.float64)\n", | |
| " w_copy = w.copy()\n", | |
| " f0 = f(w)\n", | |
| " ret = np.zeros_like(w)\n", | |
| " for i in range(len(w)):\n", | |
| " w_copy[i]+=eps\n", | |
| " ret[i] = (f(w_copy)-f0)/eps\n", | |
| " w_copy[i]-=eps\n", | |
| " return ret" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 80, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "0 times : 0.104622\n", | |
| "1 times : 0.062685\n", | |
| "2 times : 0.037002\n", | |
| "3 times : 0.008352\n", | |
| "4 times : 0.007265\n", | |
| "5 times : 0.006517\n", | |
| "6 times : 0.005821\n", | |
| "7 times : 0.005153\n", | |
| "8 times : 0.004575\n", | |
| "9 times : 0.004148\n", | |
| "10 times : 0.003873\n", | |
| "11 times : 0.003704\n", | |
| "12 times : 0.003593\n", | |
| "13 times : 0.003512\n", | |
| "14 times : 0.003450\n", | |
| "15 times : 0.003401\n", | |
| "16 times : 0.003362\n", | |
| "17 times : 0.003331\n", | |
| "18 times : 0.003306\n", | |
| "19 times : 0.003286\n", | |
| "20 times : 0.003269\n", | |
| "21 times : 0.003256\n", | |
| "22 times : 0.003245\n", | |
| "23 times : 0.003236\n", | |
| "24 times : 0.003229\n", | |
| "25 times : 0.003223\n", | |
| "26 times : 0.003219\n", | |
| "27 times : 0.003215\n", | |
| "28 times : 0.003211\n", | |
| "29 times : 0.003209\n", | |
| "30 times : 0.003206\n", | |
| "31 times : 0.003205\n", | |
| "32 times : 0.003203\n", | |
| "33 times : 0.003202\n", | |
| "34 times : 0.003201\n", | |
| "35 times : 0.003200\n", | |
| "36 times : 0.003199\n", | |
| "37 times : 0.003199\n", | |
| "38 times : 0.003198\n", | |
| "39 times : 0.003198\n", | |
| "40 times : 0.003198\n", | |
| "41 times : 0.003197\n", | |
| "42 times : 0.003197\n", | |
| "43 times : 0.003197\n", | |
| "44 times : 0.003197\n", | |
| "45 times : 0.003197\n", | |
| "46 times : 0.003197\n", | |
| "47 times : 0.003197\n", | |
| "48 times : 0.003196\n", | |
| "49 times : 0.003196\n", | |
| "50 times : 0.003196\n", | |
| "51 times : 0.003196\n", | |
| "52 times : 0.003196\n", | |
| "53 times : 0.003196\n", | |
| "54 times : 0.003196\n", | |
| "55 times : 0.003196\n", | |
| "56 times : 0.003196\n", | |
| "57 times : 0.003196\n", | |
| "58 times : 0.003196\n", | |
| "59 times : 0.003196\n", | |
| "60 times : 0.003196\n", | |
| "61 times : 0.003196\n", | |
| "62 times : 0.003196\n", | |
| "63 times : 0.003196\n", | |
| "64 times : 0.003196\n", | |
| "65 times : 0.003196\n", | |
| "66 times : 0.003196\n", | |
| "67 times : 0.003196\n", | |
| "68 times : 0.003196\n", | |
| "69 times : 0.003196\n", | |
| "70 times : 0.003196\n", | |
| "71 times : 0.003196\n", | |
| "72 times : 0.003196\n", | |
| "73 times : 0.003196\n", | |
| "74 times : 0.003196\n", | |
| "75 times : 0.003196\n", | |
| "76 times : 0.003196\n", | |
| "77 times : 0.003196\n", | |
| "78 times : 0.003196\n", | |
| "79 times : 0.003196\n", | |
| "80 times : 0.003196\n", | |
| "81 times : 0.003196\n", | |
| "82 times : 0.003196\n", | |
| "83 times : 0.003196\n", | |
| "84 times : 0.003196\n", | |
| "85 times : 0.003196\n", | |
| "86 times : 0.003196\n", | |
| "87 times : 0.003196\n", | |
| "88 times : 0.003196\n", | |
| "89 times : 0.003196\n", | |
| "90 times : 0.003196\n", | |
| "91 times : 0.003196\n", | |
| "92 times : 0.003196\n", | |
| "93 times : 0.003196\n", | |
| "94 times : 0.003196\n", | |
| "95 times : 0.003196\n", | |
| "96 times : 0.003196\n", | |
| "97 times : 0.003196\n", | |
| "98 times : 0.003196\n", | |
| "99 times : 0.003196\n", | |
| "('[bx,by,bz,r]=', 'array([ 0.12348184, -0.20123231, -0.20123231, 0.29838583])')\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "# 勾配法で100回\n", | |
| "f = lambda w:calc_error(xs,ys,zs,w)\n", | |
| "w = np.zeros(4)\n", | |
| "w[3]=0.6\n", | |
| "for i in range(100):\n", | |
| " grad = fprime(f,w)\n", | |
| " w -= grad\n", | |
| " print(\"%d times : %lf\"%(i,f(w)))\n", | |
| "print (\"[bx,by,bz,r]=\",repr(w))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "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.11" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment