求解一阶方程 - 代码优化

时间:2014-10-07 17:16:39

标签: vb.net algorithm

我有一个方程式显示如下:

general equation

其中A和X是两个数字向量,N> 2是用户输入(每次不同),而G是数字常数,Y是我想要找到的变量。 进行一些计算,我说解决方案可能会被推广为以下(经过测试):

general formula

所以这是我的问题。当前求解方程的代码是使用二分法,即它通过迭代地替换公式中的值来估计Y的值,直到表达式的全局值足够接近0(不等于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.经典的二分之一。 任何人都可以请一个关于我应该如何理解这两个代码中的哪一个更好地工作的提示,如果可能的话还有一些解释?提前谢谢。

注意:无法为正确的分析提供足够的信息我不希望有任何详细的结果。我想得到一些专家的意见&#34;乍一看&#34;,我不是你们中的一员:)

2 个答案:

答案 0 :(得分:1)

将解决方案的分子和分母除以product_j X(j)以得到公式

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

可以在线性时间内直接评估,使用与评估第一个等式的左侧所需的大约一样多的操作,这是一次二分迭代的大部分。模数隐藏数值精度问题的可能性,我说直接方法优于二分法。

答案 1 :(得分: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