编写计算高斯'收敛准则的算法;方法

Writing an algorithm to calculate the convergency criteria for Gauss' Method in Javascript

本文关键字:算法 方法 计算 高斯      更新时间:2023-09-26

我正试图编写一种算法,该算法将计算给定线性系统的收敛标准,但我正面临某种语义错误。然后,我无法取得任何进展,因为我没有太多的JavaScript知识。

代码如下所示:
var SumOfLines=function(A,B,X)
{
   var N;
   var I=[];
   for(var i=0;i<A.length;++i)
   {
      for(var j=0;j<A.length;++j)
      {
         if (i!=j)
         {
            N+=Math.abs(A[i][j])
         }
         else
         {
            N=N
         }
      I[i] = N/Math.abs(A[i][i])
      }
   }
      return I[i]
}
var A=[[10,2,1]
      ,[1,5,1]
      ,[10,3,10]]
var B=[7,-5,-3]
text=SumOfLines(A,B,[1,2,3])

基本上,它将为线性系统的每条线计算除对角线上的系数外的所有系数的模数之和除以对角线上元素的模数的结果。

编译并运行代码后,我得到的结果是'undefined'。有人知道是什么导致了这个错误信息吗?谢谢你。

在函数结束时,返回I[I]。此时,i的值为a .length,因此返回的是数组中不存在的元素。如果您想返回数组的最后一个元素,只需返回I.pop()

在Javascript中,未初始化的变量没有定义为默认值。

试着改变这个:

var N;

这:

var N=0;

(或任何其他有意义的初始值)

除此之外,你的数组是空的(size=0),你不能用索引添加新元素,你需要使用push(),在末尾添加一个新元素,增加数组的大小。

改变:

I[i] = N/Math.abs(A[i][i])

这:

I.push(N/Math.abs(A[i][i]));
更新:

我刚刚注意到,改变返回值:

return I[i]

i在那里没有定义,您在for之外。改成return I[I.length-1]

感谢您的回答,您在修复代码时帮助了我很多。你可以在下面看到:

var SumOfLines=function(A,B,X)
{
   var N=0;
   var I=[];
   for(var i=0;i<A.length;++i)
   {
      for(var j=0;j<A.length;++j)
      {
         if (i!=j)
         {
            N+=Math.abs(A[i][j])
         }
         else
         {
            N+=0
         }
      I[i] = N/Math.abs(A[i][i])
      }
      N=0
   }
      return I
}
var A=[[10,2,1]
      ,[1,5,1]
      ,[2,3,10]]
var B=[7,-5,-3]
text=SumOfLines(A,B,[1,2,3])

此外,代码必须为每次迭代重置N的值,这就是代码在第二行和第三行给出错误结果的原因。