Написание алгоритма для вычисления критериев конвергенции для метода Гаусса в Javascript

Я пытаюсь написать алгоритм, который вычислял бы критерии сходимости для данной линейной системы, но я столкнулся с некоторой семантической ошибкой. Затем я не могу сделать никакого прогресса, потому что я не очень хорошо знаю 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', Кто-нибудь знает, что может быть причиной этого сообщения об ошибке? Спасибо.

3 ответа

В Javascript неинициализированные переменные имеют неопределенное значение по умолчанию.

Попробуйте изменить это:

var N;

в это:

var N=0;

(или любое другое значимое начальное значение)

Кроме этого, ваш массив пуст (размер =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]

В конце вашей функции вы возвращаете I[i]. На данный момент, у меня есть значение A.length, так что вы возвращаете несуществующий элемент из вашего массива. если вы хотите вернуть последний элемент массива, просто верните I.pop()

Спасибо за все ответы, вы мне очень помогли при исправлении кода. Вы можете увидеть это ниже:

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 для каждой из итераций, и это было причиной того, что код дал мне неправильные результаты для второй и третьей строки.

Другие вопросы по тегам