Skip to content
Snippets Groups Projects
Unverified Commit 3f790091 authored by Recolic Keghart's avatar Recolic Keghart
Browse files

Add inverse

parent 446a96fd
No related branches found
No related tags found
No related merge requests found
No preview for this file type
...@@ -17,10 +17,11 @@ def dotMultiply(vctA, vctB): ...@@ -17,10 +17,11 @@ def dotMultiply(vctA, vctB):
ans += a * b ans += a * b
return ans return ans
def GetMap(parrX, parrY, windowSizeX=12, windowSizeY=8, extendXRate=1, line=False, passO=False, maxXPower=1): def GetMap(parrX, parrY, windowSizeX=12, windowSizeY=8, extendXRate=1, extendYRate=1, line=False, passO=False, maxXPower=1, inverseK=False):
print('Generic-GetMap by Recolic.') print('Generic-GetMap by Recolic.')
arrX, arrY = parrX, parrY arrX, arrY = parrX, parrY
maxX = max(arrX) * extendXRate maxX, maxY = max(arrX) * extendXRate, max(arrY) * extendYRate
minX, minY = min(arrX) * extendXRate, min(arrY) * extendYRate
# Do calculate # Do calculate
# y = [k0 k1 k2 ...] dot [x^0 x^1 x^2 ...] # y = [k0 k1 k2 ...] dot [x^0 x^1 x^2 ...]
print('Your input: ', arrX, '|', arrY) print('Your input: ', arrX, '|', arrY)
...@@ -33,14 +34,18 @@ def GetMap(parrX, parrY, windowSizeX=12, windowSizeY=8, extendXRate=1, line=Fals ...@@ -33,14 +34,18 @@ def GetMap(parrX, parrY, windowSizeX=12, windowSizeY=8, extendXRate=1, line=Fals
vctX[0] = 0 vctX[0] = 0
return dotMultiply(k, vctX) return dotMultiply(k, vctX)
def lossFunc(k, x, y): return lineFunc(k, x) - y def lossFunc(k, x, y): return abs(lineFunc(k, x) - y)
# Fire! # Fire!
if line: if line:
kInit = [1 for _ in range(maxXPower + 1)] kInit = [1 for _ in range(maxXPower + 1)]
kInit[0] = 0 # guarantee passO. kInit[0] = 0 # guarantee passO.
kFinal, _ = leastsq(lossFunc, kInit, args=(X, Y)) if inverseK:
print('Fit line done. k=', kFinal) kFinal, _ = leastsq(lossFunc, kInit, args=(Y, X))
print('Fit line done. k^-1=', kFinal)
else:
kFinal, _ = leastsq(lossFunc, kInit, args=(X, Y))
print('Fit line done. k=', kFinal)
else: else:
print('Drawing map without fitting a line...') print('Drawing map without fitting a line...')
...@@ -51,8 +56,12 @@ def GetMap(parrX, parrY, windowSizeX=12, windowSizeY=8, extendXRate=1, line=Fals ...@@ -51,8 +56,12 @@ def GetMap(parrX, parrY, windowSizeX=12, windowSizeY=8, extendXRate=1, line=Fals
plt.figure(figsize=(windowSizeX, windowSizeY)) plt.figure(figsize=(windowSizeX, windowSizeY))
plt.scatter(X, Y, color="red", label="Sample Point", linewidth=3) plt.scatter(X, Y, color="red", label="Sample Point", linewidth=3)
if line: if line:
px = numpy.linspace(0, maxX, 1000) if inverseK:
py = dotMultiply(kFinal, [px ** power for power in range(maxXPower + 1)]) py = numpy.linspace(minY, maxY, 1000)
px = dotMultiply(kFinal, [py ** power for power in range(maxXPower + 1)])
else:
px = numpy.linspace(minX, maxX, 1000)
py = dotMultiply(kFinal, [px ** power for power in range(maxXPower + 1)])
plt.plot(px, py, color="orange", label="Fitting Line", linewidth=2) plt.plot(px, py, color="orange", label="Fitting Line", linewidth=2)
plt.legend() plt.legend()
plt.grid() plt.grid()
......
...@@ -3,6 +3,5 @@ import quickmap ...@@ -3,6 +3,5 @@ import quickmap
yrc=[-6.77, -6.78, -6.78, -6.76, -6.73, -6.73, -6.72, -6.70, -6.69, -6.67, -6.60, -6.45, -6.37, -6.20, -5.99, -5.77, -5.45, -5.07, -3.52, -2.87, -2.36, -2.08, -1.77, -1.55, -1.40, -1.26, -0.97, -0.84, -0.64] yrc=[-6.77, -6.78, -6.78, -6.76, -6.73, -6.73, -6.72, -6.70, -6.69, -6.67, -6.60, -6.45, -6.37, -6.20, -5.99, -5.77, -5.45, -5.07, -3.52, -2.87, -2.36, -2.08, -1.77, -1.55, -1.40, -1.26, -0.97, -0.84, -0.64]
xrc=[0.0, 2.0, 4.0, 10.0, 20.0, 22.0, 25.0, 30.0, 33.0, 35.0, 37.0, 38.0, 38.5, 39.0, 39.6, 40.0, 40.5, 41.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 53.0, 55.0, 60.0] xrc=[0.0, 2.0, 4.0, 10.0, 20.0, 22.0, 25.0, 30.0, 33.0, 35.0, 37.0, 38.0, 38.5, 39.0, 39.6, 40.0, 40.5, 41.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 53.0, 55.0, 60.0]
for i in range(15): quickmap.GetMap(xrc, yrc, line=True, maxXPower=16, inverseK=True)
quickmap.GetMap(xrc, yrc, line=True, maxXPower=i, extendXRate=1)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment