从Scheme中的线性方程求解X?

时间:2009-10-21 12:53:43

标签: math scheme

我想解决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

1 个答案:

答案 0 :(得分:3)

我不确定你为什么要创建所有那些高阶函数,它只是让我感到困惑。相反,把你的代数帽子弄脏了,并对此进行了一些思考。

你有5个方程,有5个未知数。 (F1,F2,T1,T2和x)。其中三个等式(T1-F2=0F1=0.1*T1F2=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,它很好。