2014-10-07 64 views
0

我有一个等式表示了这样的:求解第一度方程 - 代码优化

general equation

其中A和X是数字的两个向量和N> 2的用户输入(每次都不同),而G是一个数字常量,Y是我想找到的变量。 使一些计算,我想说的解决方案可能是(它的测试)概括如下:

general formula

因此,这里是我的问题。当前求解方程的代码是使用二分法,即它通过以迭代方式替换公式中的值来估计Y的值,直到表达式的全局值足够接近0(无法访问代码,所以我不能说关于中断级别或其结构的附加信息,不幸的是)。

但是,我在考虑实现一个计算代码的代码,如上面的解决方案(第二个公式)所示。这是我的尝试:

num = 0 
den = 0 
For j = 1 To N 
    prods = 1 
    For k = 1 To N 
     If k <> j Then 
      prods = prods * X(k) 
     End If 
    Next k 
    num = num + prods 
    den = den + (prods/A(j)) 
Next j 
Y = num/den 

从来没有研究过任何计算机科学,所以我不能够评估自己这个方法w.r.t.质量经典的二分之一。 任何人都可以请给我一个关于如何理解两个代码中的哪一个更好地工作的提示,并且如果可能的话有一些解释?提前致谢。

注意:不能提供足够的信息进行正确的分析我不希望有任何详细的结果。我只是想获得一些专家“第一眼”的意见,是我不是你一个:)

+0

是有一些原因,你不使用公式'Y = sum_j(1/X(j))/ sum_j(1 /(A(j)* X(j)))'? – 2014-10-07 17:23:58

+0

在总和本身内部进行底部总和划分,所以我认为你说的划分在数学上是不可行的。 N = 2时的示例: 'y = [x(1)+ x(2)]/[[x(2)/ A(1)] + [x(1)/ A(2)]]。 – 2014-10-07 17:32:10

+0

我在第一个评论中错误地使用了不到一分钟的公式,但是现在的那个公式是通过用右边的分子和分母除以product_j X(j)来得到的。 – 2014-10-07 17:35:04

回答

1

鸿沟分子和解决方案的分母由product_j X(j)得到公式

 N 
     --- 1 
     \ ---- 
    / X(j) 
     --- 
     j=1 
Y = -------------- , 
    N 
    ---  1 
    \ --------- 
    / A(j) X(j) 
    --- 
    j=1 

它可以在线性时间内直接进行评估,使用大约一样多的操作来评估第一个等式的左手边,这是平分的一次迭代的大部分。模数潜在的数字精度问题的可能性,我会说,直接法优于平分法。

+0

非常感谢,我已经测试并意识到你是对的。对于数据进入函数的方式,我会说你的方法只需要N次迭代,不能想象一个更快的方法! – 2014-10-08 08:41:16

1

我得到简化,该解决方案

enter image description here

它解决了

enter image description here

随着平凡解

Sub Main() 

    Dim A() As Double, X() As Double 
    Dim j As Integer, N As Integer = ... 

    A = New Double(N) {...} 
    X = New Double(N) {...} 

    Dim num As Double = 0, den As Double = 0 

    For j = 1 To N 
     num = num + 1/X(j) 
     den = den + 1/(A(j) * X(j)) 
    Next 

    Dim Y = num/den 

End Sub 
+0

谢谢你ja72,为了公平起见,我首先批准了David的回答。谢谢! – 2014-10-08 08:42:04