在我的程序中,我需要找到两行相交的y值。
第一行表示为:y = a1 * x + b1 第二行用y = a2 * x + b2
表示解决每个中的x,设置方程彼此相等,求解y和重新排列,我想出了四个不同但相当于(实际上尚未确定)的方程式:
Y =(B1 / A1-B2 / A2)/(1 / A1-1 / a2)的
Y =(B2 +(A2 / A1)* B1)/(1-A2 / A1)
Y =(A1 * B2-B1 * A2)/(A1-A2)
Y = A1 *((B2-B1)/(A1-A2))+ B1
现在,我运行了以下Python代码来检查所有方程式是否给出了相同的答案:
import random
def linearfunction(coords1,coords2):
x1=coords1[0]
x2=coords2[0]
y1=coords1[1]
y2=coords2[1]
a=(y2-y1)/(x2-x1)
b=y2-a*x2
return [a,b]
def doesitequal():
first=[random.randint(0,100),random.randint(0,100)]
second=[random.randint(0,100),random.randint(0,100)]
third=[random.randint(0,100),random.randint(0,100)]
fourth=[random.randint(0,100),random.randint(0,100)]
a1=linearfunction(first,second)[0]
b1=a1=linearfunction(first,second)[1]
a2=linearfunction(third,fourth)[0]
b2=linearfunction(third,fourth)[1]
firstversion=(b1/a1-b2/a2)/(1/a1-1/a2)
secondversion=(b2+(a2/a1)*b1)/(1-a2/a1)
thirdversion=(a1*b2-b1*a2)/(a1-a2)
fourthversion=a1*((b2-b1)/(a1-a2))+b1
print('First equation: ', firstversion)
print('Second equation:', secondversion)
print('Third equation:', thirdversion)
print('Fourth equation', fourthversion)
for i in range(100):
doesitequal()
令人惊讶的是(对我而言),第二个等式总是返回一个稍微偏离其他值的值,这些值返回彼此完全相等的值。请亲自尝试看看我的意思。
示例输出:
First equation: -71.13238078843175
Second equation: -67.71148218281976
Third equation: -71.13238078843175
Fourth equation -71.1323807884317
First equation: 190.62597809076678
Second equation: 186.9640062597809
Third equation: 190.6259780907668
Fourth equation 190.62597809076686
First equation: 81.93742601048538
Second equation: 80.48246237104686
Third equation: 81.93742601048537
Fourth equation 81.93742601048537
所以我的第一个问题是:
为什么dos第二个等式返回的值略有不同?我弄乱了算术吗?或者是由于Python评估给定数学运算的方式?
我的第二个问题是:
这四个公式中哪个是效率最高的公式?也就是说,如果要在短时间内计算大量的线路交叉点,哪一个最不可能导致计算滞后?
一个疯狂的猜测是效率与给定方程中的操作数成反比。例如,第一个等式涉及7个数学运算,而最后一个涉及5个,意味着最后一个比第一个更有效。然而,就复杂性和效率而言,不同的数学运算可能彼此不相等。这就是为什么我不确定这个问题的答案。
非常感谢任何帮助!
答案 0 :(得分:-1)
2. y=(b2+(a2/a1)*b1)/(1-a2/a1)
是
a2 b1
b2 + -----
a1
----------
a2
1 - --
a1
是
(a2 b1 + a1 b2) / a1
--------------------
(a1 - a2) / a1
是
a2 b1 + a1 b2
-------------
a1 - a2
它将与eq.3(我使用的那个)进行比较
a2 b1 - a1 b2
-------------
a2 - a1