Skip to content

Instantly share code, notes, and snippets.

@xaedes
Created March 22, 2014 09:49
Show Gist options
  • Save xaedes/9703919 to your computer and use it in GitHub Desktop.
Save xaedes/9703919 to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "curve fitting"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"from __future__ import division\n",
"import numpy as np\n",
"import scipy.optimize as opt\n",
"import matplotlib.pyplot as plt\n",
"import math"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 175
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def func(x, a, b, c):\n",
" return a*np.exp(-b*x) + c\n",
"\n",
"def kreis(x, xm, ym, r, sign = -1, debug=False):\n",
" if np.ndim(x) == 0:\n",
" x = np.array([x])\n",
" y = np.zeros_like(x)\n",
" \n",
" \n",
" sel = np.abs(x-xm) <= r\n",
" \n",
" \n",
" \n",
" if debug and False:\n",
" print type(x)\n",
" print 'x', x\n",
" print 'y', y\n",
" print 'sel', sel\n",
" \n",
"\n",
" y[sel] = ym + sign * np.sqrt(np.square(r)-np.square(x[sel]-xm))\n",
" if np.isnan(np.sum(y)):\n",
" print xm,ym,r\n",
" print y\n",
" \n",
" return y\n",
"\n",
"def stueckweise_eins(x,ln,r):\n",
" if np.ndim(x) == 0:\n",
" x = np.array([x])\n",
" y = np.zeros_like(x)\n",
" \n",
" sel_gerade = x <= ln\n",
" sel_kreis = np.logical_and(ln < x, x < ln+r)\n",
" \n",
" y[sel_gerade] = 0\n",
" y[sel_kreis] = kreis(x[sel_kreis],xm=ln,ym=r,r=r)\n",
" \n",
" return y\n",
"\n",
"def stueckweise_zwei(x,ln,alpha,r):\n",
" eps = 0.000001\n",
" \n",
" ln = abs(ln)\n",
" \n",
" if np.ndim(x) == 0:\n",
" x = np.array([x])\n",
" y = np.zeros_like(x)\n",
" \n",
" y_err = 1e9\n",
"\n",
" # sicherstellen, dass wir vern\u00fcnftige parameter haben\n",
" if not ( -0.5*math.pi-eps < alpha and alpha < 0.5*math.pi + eps ): #or not ( ln < 1 ):\n",
" y += y_err\n",
" return y\n",
" \n",
" #alpha = min(max(alpha,-math.pi-eps),math.pi+eps)\n",
" #ln = max(ln,0)\n",
" \n",
" \n",
" # grenze zwischen gerade und kreis abschnitt\n",
" x_g = cos(alpha)*ln\n",
" y_g = sin(alpha)*ln\n",
" \n",
" # maximal x (grad' noch so auf dem kreis)\n",
" x_max = x_g - sin(alpha)*r + abs(r)\n",
" y_max = y_g + cos(alpha)*r\n",
" \n",
" \n",
" sel_gerade = x <= x_g\n",
" sel_kreis = np.logical_and(x_g < x, x < x_max)\n",
" sel_hinter_kreis = x_max < x \n",
" \n",
" sign = -1 if r > 0 else +1\n",
" \n",
" y[sel_gerade] = tan(alpha) * x[sel_gerade]\n",
" y[sel_kreis] = kreis(x[sel_kreis],xm=x_g - sin(alpha)*r,ym=y_g + cos(alpha)*r,r=abs(r),sign=sign)\n",
" \n",
" w = 89 * math.pi/180\n",
" #print sel_hinter_kreis\n",
" y[sel_hinter_kreis] += y_max #- sign * 5 * (x[sel_hinter_kreis] - x_max)\n",
" \n",
" return y"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 343
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# erzeuge originale und verrauschte daten\n",
"ln = 2\n",
"r = -3\n",
"alpha = -10 * math.pi / 180\n",
"p = [ln,alpha,r]\n",
"\n",
"x_max = cos(alpha)*ln - sin(alpha)*r + abs(r)\n",
"x = np.linspace(0,x_max+0.5,50)\n",
"y = stueckweise_zwei(x, p[0], p[1], p[2])\n",
"yn = y + 0.5*np.random.normal(size=len(x))\n",
"\n",
"# plotte originale und verrauschte daten\n",
"figure()\n",
"plot(x, yn, 'r')\n",
"plot(x, y, 'b')\n",
"\n",
"# optimiere\n",
"p0 = p + 0.01 * np.random.normal(size=len(p))\n",
"print p0\n",
"popt, pcov = opt.curve_fit(lambda x,ln,alpha,r: stueckweise_zwei(x,ln,alpha,r), x, yn)\n",
"#optimize.fmin_l_bfgs_b\n",
"print popt\n",
"\n",
"# zeige originale und verrauschte daten und gefittetes model\n",
"figure()\n",
"plot(x, yn, 'r')\n",
"plot(x, y, 'b')\n",
"y2 = map(lambda x: stueckweise_zwei(x,popt[0],popt[1],popt[2]),x)\n",
"plot(x, y2, 'black')\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 1.99506991 -0.17745829 -2.99269295]\n",
"[ 1.82912512 -0.12896953 -3.08676014]\n"
]
},
{
"output_type": "pyout",
"prompt_number": 342,
"text": [
"[<matplotlib.lines.Line2D at 0x1b5f7b50>]"
]
},
{
"output_type": "display_data",
"png": "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\np08M7rlHcqPjx2vv7QcHy3v7tDTp/rl7ENOgTRvJhycnF+/JudPUqTJYaMfqknZ59115N2NujW8z\ndDoULmjWtWvxx+7ckTdhhw/Lm7cFC6S69OJF6fG3bg20btYP7bf+G23PXkP5yKpu+IbMMEwaM51l\nGh0tqZWjR71bGUN+zzPzi5OS7DvW2poY5hhvsWYrfWJs9Gj5z7dn4SjjHeo9FcABqWX+3/88c63V\nq6V+ftky7akve0VFAT/+6JIp7mFhEhOffFKyPStXyq/ozBngX/+SYY4Dx8riL6H/Ro2GFdG6tVQu\nzp4tCyFmZWm80J07MgP0ueckH/Too/L3Y87Vq5KeM5f20umK0ii+Jj1d0pHkHzzyNqByZaUuX7Z9\n8B9/KFWrlv1vLQ8cUKpJE/laS/rEWJ8+xdMvtvz5z0rNmqXUnTtKhYaavE93o3PnlKpSRambN917\nnSNHlAoPV+rXX917HW/44gt1Z9AQtXOnUv/5j1IvvKBUTIxS5csr1bGjUq+/rtQ33yil1xudc/u2\nUsuXK/XMM5Jye+ABpT75RP5W//lPpe65R6kxY5S6cqX4tSZMUGr4cMttWblSqR493PJtOuzsWaUi\nIuT7Iq/TEp49E8D79lVqyRLbB8+ZI/8o9srNVapSJaW2bFEqKsq9ueKPPpJ/2BMnlKpf333XMadf\nP6Xmz3fPc1+6pNTixUo1barU55+75xredv68vAjeuVPs7lu3lPr5Z6WmTVOqf3+latRQqm5dpZ68\nP019EjZO7eswXOXNmi1JeFPnzin14otK1ayp1OzZSuXkSCCsVk2pU6cstyUzU6mKFZW6ft3F36SD\n7t5VqksXGU968klvt4aUtgDumRRKQoK2NIoj+W9ActPt2slUZXOTd1zJUIni7hpwc1yZRsnJATZv\nlhK3jh2lmmbhQqmVNt2iLFDUrCm5FpOa+vLlpdLwrbck/XLhArBxQx76npiFfT3H4rGrX6LmpFcw\n6NXamDVL8uuFG3LXqiVlrBs2yFIDbdrIz+9Pf7L+91GhglT22JNedKexY2VcaP58qbMn/+CRV5ED\nB5Rq0MB6aiQ3V3ot6emOXeiNN6SqYds2x87XKjVVqehopRYsUGrIEPdey1RWllLVqyuVlub4c+Tl\nKTVihPREY2KUeustpX76qUSvNGBNny49ZluWLVMqLq7wpl6v1MKFknZp0kQyJ088IW9WCjva+flK\n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\n"
},
{
"output_type": "display_data",
"png": "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\n"
}
],
"prompt_number": 342
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"w = 89 * math.pi/180\n",
"tan(w)\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 234,
"text": [
"57.289961630759876"
]
}
],
"prompt_number": 234
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 28
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment