Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 求解一阶方程-代码优化_Vb.net_Algorithm - Fatal编程技术网

Vb.net 求解一阶方程-代码优化

Vb.net 求解一阶方程-代码优化,vb.net,algorithm,Vb.net,Algorithm,我有一个方程,它显示如下: 其中A和X是两个数字向量,N>2是一个用户输入(每次都不同),而G是一个数值常量,Y是我想要找到的变量。 进行一些计算后,我认为解决方案可以概括如下(经过测试): 这是我的问题。当前求解该方程的代码使用了二分法,即通过迭代方式替换公式中Y的值来估计Y的值,直到表达式的全局值足够接近0(不幸的是,我无法访问代码,因此我无法提供有关中断级别或其结构的其他信息) 但是,我正在考虑实现一个代码,按照上面的解决方案(第二个公式)计算代码。这是我的尝试: num = 0 de

我有一个方程,它显示如下:

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

这是我的问题。当前求解该方程的代码使用了二分法,即通过迭代方式替换公式中Y的值来估计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
num=0
den=0
对于j=1到N
prods=1
对于k=1到N
如果k j那么
产品=产品*X(k)
如果结束
下一个k
num=num+prods
den=den+(产品/装配(j))
下一个j
Y=num/den
我从未学过任何计算机科学,所以我无法评估自己这种方法的质量——经典的二等分法。 谁能告诉我如何理解这两个代码中的哪一个更好,如果可能的话,请给出一些解释?提前谢谢


注意:可能无法提供足够的信息进行适当的分析,我不希望得到任何详细的结果。我只是想“乍一看”得到一些专家的意见,因为我不是你们中的一员:)

将解的分子和分母除以
积X(j)
获取公式

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

可以在线性时间内直接计算,使用与计算第一个方程左侧所需的运算量相同的运算量,这是一次对分迭代的大部分。考虑到潜在数值精度问题的可能性,我认为直接法优于二分法。

我通过简化得到这个解

这就解决了

用平凡的解决方案

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

有没有什么原因你不使用公式
Y=sum_j(1/X(j))/sum_j(1/(A(j)*X(j))
?到底部和的划分是在和本身内部进行的,所以我认为你所说的划分在数学上是不可行的。N=2的例子:
y=[x(1)+x(2)]/[x(2)/A(1)]+[x(1)/A(2)]
。我在第一次评论中有一个错误的公式,不到一分钟,但现在的公式是用你右手边的分子和分母除以
product_j x(j)
。走出办公室,会尽快给你回复。同时感谢你的提示:)非常感谢,我已经测试并意识到你是对的。对于数据进入函数的方式,我认为您的方法只需要N次迭代,无法想象更快的方式!谢谢你,ja72,为了公平起见,我同意大卫的回答,因为他是第一个来的。非常感谢。