我想解决x。我怎么能在Scheme中做到这一点?
T1-F2=0
F1+T2=GM-Gm
Cos(60)(2.5*Gm+x*GM-l*F1)-l*Sin(60)*T1=0
F1=0.1*T1
F2=0.3*T2
M=20
m=80
l=5
我的尝试是:
(lambda T1 . ;; T1=F2
(lambda F2 . ;; F2=0.3*T2
(lambda F1 . ;; F1=0.1*T1
(lambda Gm .
( lambda GM .
(-
( * 1/2
( -
( + ( * 2.5 Gm ) ( * x GM ) ) ;; solve x
5 * F1
)
)
( *
( * 10 1/sqrt(3) )
T1
)
)
) 80
) 20
) ( * 0.1 T1 )
) ( * 0.3 T2 )
) F2
;; ??? F1+T2=GM-Gm
答案 0 :(得分:3)
我不确定你为什么要创建所有那些高阶函数,它只是让我感到困惑。相反,把你的代数帽子弄脏了,并对此进行了一些思考。
你有5个方程,有5个未知数。 (F1,F2,T1,T2和x)。其中三个等式(T1-F2=0
,F1=0.1*T1
和F2=0.3*T2
)是微不足道的,正如您似乎意识到的那样,因此通过替换消除了3个未知数,例如在你看到T1的任何地方,自从T1 = F2以来就把F2粘在它的位置。 (如果你像我一样并且你不太相信自己,你总是可以将最终的数字替换回原来的方程式来验证你是否正确。)
然后你剩下两个方程式。如果你可以手动求解方程式,你将得到x的等式,你只需编写一个程序来评估它。否则,使用具有2个方程和2个未知数的系统的一般方法。
一般来说,为了求解已知量的未知数x1,x2,... xn的线性方程,将它们变成标准形式(其中A和B系数已知):
A11*x1 + A12*x2 + A13*x3 ... + A1n*xn = B1
A21*x1 + A22*x2 + A23*x3 ... + A2n*xn = B2
.
.
.
An1*x1 + An2*x2 + An3*x3 ... + Ann*xn = Bn
或以矩阵形式:
Ax = B
这有很多方法可以解决x,请参阅wikipedia;大系统的标准方法。
对于2个方程和2个未知数的系统:
A11*x1 + A12*x2 = B1
A21*x1 + A22*x2 = B2
没有足够的公式可以继续使用Cramer's Rule。 Cramer's Rule对于大N来说是可怕的,因为它具有数值准确性和对错误的敏感性,并且因为它与其他技术相比非常慢。但是对于N = 2,它很好。