Наивный решение выглядит следующим образом:
txt = """-1.5 16.25 1.02
-1.25 17 1.03
-1 15 1.03
-0.75 9 1.09
-0.5 5.9 1.15
-0.25 5.2 1.17
0 4.77 1.19
+0.25 3.14 1.35
+0.5 2.5 1.54
+0.75 2.21 1.69
+1 1.91 1.96
+1.25 1.64 2.27
+1.5 1.52 2.56
+1.75 1.37 3.06
+2 1.24 4.12
+2.25 1.2 4.44
+2.5 1.18 4.95
+2.75 1.12 6.49
+3 1.07 10"""
import numpy as np
# StringIO behaves like a file object, use it to simulate reading from a file
from StringIO import StringIO
x,y1,y2=np.transpose(np.loadtxt(StringIO(txt)))
p1 = np.poly1d(np.polyfit(x, y1, 1))
p2 = np.poly1d(np.polyfit(x, y2, 1))
print 'equations: ',p1,p2
#y1 and y2 have to be equal for some x, that you solve for :
# a x+ b = c x + d --> (a-c) x= d- b
a,b=list(p1)
c,d=list(p2)
x=(d-b)/(a-c)
print 'solution x= ',x
выход:
equations:
-3.222 x + 7.323
1.409 x + 1.686
solution x= 1.21717324767
Но потом сюжет 'линии':
import matplotlib.pyplot as p
%matplotlib inline
p.plot(x,y1,'.-')
p.plot(x,y2,'.-')
И ре alize вы не можете использовать линейное предположение, но для нескольких сегментов.
x,y1,y2=np.transpose(np.loadtxt(StringIO(txt)))
x,y1,y2=x[8:13],y1[8:13],y2[8:13]
p1 = np.poly1d(np.polyfit(x, y1, 1))
p2 = np.poly1d(np.polyfit(x, y2, 1))
print 'equations: ',p1,p2
a,b=list(p1)
c,d=list(p2)
x0=(d-b)/(a-c)
print 'solution x= ',x0
p.plot(x,y1,'.-')
p.plot(x,y2,'.-')
Выход:
equations:
-1.012 x + 2.968
1.048 x + 0.956
solution x= 0.976699029126
Даже сейчас можно улучшить, оставив еще два указывает (выглядит очень линейный, но это может быть совпадением несколько точек).
x,y1,y2=np.transpose(np.loadtxt(StringIO(txt)))
x1,x2=x[8:12],x[9:13]
y1,y2=y1[8:12],y2[9:13]
p1 = np.poly1d(np.polyfit(x1, y1, 1))
p2 = np.poly1d(np.polyfit(x2, y2, 1))
print 'equations: ',p1,p2
a,b=list(p1)
c,d=list(p2)
x0=(d-b)/(a-c)
print 'solution x= ',x0
import matplotlib.pyplot as p
%matplotlib inline
p.plot(x1,y1,'.-')
p.plot(x2,y2,'.-')
Выход:
equations:
-1.152 x + 3.073
1.168 x + 0.806
solution x= 0.977155172414
Возможно, лучше было бы использовать больше очков и применить интерполяцию 2-го порядка np.poly1d(np.polyfit(x,y1,2))
, а затем решить равенство двух многочленов 2-го порядка, который я оставил как упражнение (квадратичное уравнение) для читателя.
Кажется, что у вас есть задание, вы можете показать что-то, что вы уже пробовали. –
@SiddharthGupta Это не задание. Добавление упрощения проблемы, над которой я работаю. Я сделал это визуально в Excel с помощью простых линейных диаграмм. Хотите перевести это в код. – sfactor
Возможно использование matplotlib и рисования графики – Taylan