function matrixArray_iter(rows, columns, x) {
var arr = new Array();
for(var i = 0; i < rows; i++){
arr[i] = new Array();
for(var j = 0; j < columns; j++){
switch (i) {
case j:
arr[i][j] = 0;
break;
default:
arr[i][j] = -x[i][j] / x[i][i];
break;
}
}
}
return arr;
}
var siz = document.getElementsByTagName("input")[0];
var build = document.getElementsByTagName("button")[0];
build.onclick = function () {
var x_in = new Array();
var b_in = new Array();
for (var i = 0; i < siz.value; i++) {
var input = document.createElement("input");
input.type = "text";
input.placeholder ="Введите через пробел коэффициенты уравнения " + (i + 1);
document.body.appendChild(input);
}
var button = document.createElement("button");
button.innerHTML = "Вычислить";
document.body.appendChild(button);
button.onclick = function () {
for (var i = 0; i < siz.value; i++) {
var int_x = document.getElementsByTagName("input")[i + 1];
var arr_x = int_x.value.toString().split(" ");
for (var j = 0; j < arr_x.length; j++) {
arr_x[j] = parseFloat(arr_x[j]);
}
x_in[i] = new Array();
for (var j = 0; j < arr_x.length - 1; j++) {
x_in[i][j] = arr_x[j];
}
b_in[i] = arr_x[arr_x.length - 1]; /*заполнение оригинальных массивов*/
}
var c = new Array();
for (var j = 0; j < b_in.length; j++) {
c[j] = b_in[j] / x_in[j];
}
console.log(c);
var b = matrixArray_iter(siz.value, siz.value, x_in);
console.log(b);
}
}
здравствуйте! я сейчас морочусь с написанием метода простых итераций на js. возникла небольшая проблема.я пытаюсь заполнить вектор с значениями. и вроде бы все сделал правильно. массивы для расчета значений вектора с пропарсил к флоатам, но мне все равно выдает результат NaN.
подскажите, пожалуйста, в чем может быть проблема. я каждый шаг написания кода дебажил, но это не дало никакого результата
function evklid (x) {
var t = 0;
var j = x.length - 1;
for (var i = 0; i < j; i++) {
t += Math.pow(x[j][i] - x[j - 1][i], 2);
console.log("квадраты " + t);
}
console.log("iter");
t = Math.sqrt(t);
return t;
}
я все еще пишу этот метод. посмотрите, пожалуйста, свежим взглядом, функция отражает формулу? (к в скобках это строка массива)
вот что мне выдает консоль. по идее так быть не должно, потому что это какая-то дичь (в каждом цикле количество результатов увеличивается). или я слишком туплю… подскажите, пожалуйста, что не так. уже мозги кипят
var x = new Array(); /*массив решений*/
var k = 0;
var L;
x[0] = new Array();
x[0] = c;
do {
k++;
x[k] = new Array();
var x_t = calcul(b, x[k - 1], c);
x[k] = x_t;
L = evklid(x);
} while (L >= 0.01);
Не понятно, как должна L вычисляться, для каждой k своя ?.. Вот мой код, но нужно еще до ума доводить.
function evklid(src) {
for (var line = 0; line < src.length; line++) {
var sum = 0;
for (var elem = 0; elem < src[line].length; elem++) {
sum += Math.pow(
Math.pow(src[line][elem], line + 1) - Math.pow(src[line][elem], line), 2);
}
}
// ....
return result;
}
ну вот например начало цикла. к = 1. создается новый двумерный массив х[1], соответственно в функции длина массива становится больше. и индексы меняются. (если я правильно понял, что вас смутило)
и так по очереди проводятся расчеты.
ну условие - это реализовать программу для решений систем линейных уравнений методом простых итераций (методом Якоби). а теоретические сведения все фактически вот эти, что на скрине.
все считается как надо, только вот количество расчетов в каждом последующем цикле возрастает. и соответсвенно расчеты выходят за пределы массива и итерации останавливаются не закончив свою работу. я не понимаю почему так. я ж ограничитель поставил
function evklid (x) {
var t = 0;
var j = x.length - 1;
var i = 0;
while (i < j) {
t += Math.pow(x[j][i] - x[j - 1][i], 2);
console.log("квадраты " + t + " = " + x[j][i] + "-" + x[j-1][i]);
i++;
}
console.log("iter");
t = Math.sqrt(t);
return t;
}
вот функция для расчета. она отличается от старой только тем, что цикл фор заменен на цикл вайл. думал заработает как надо, но абсолютно 0 разницы.
Я не смог найти такого куска кода который можно взять целиком запустить и увидеть проблему. Можешь кинуть такой код? Без конкретных значений не разобраться в чем проблема.
да все уже, решил проблему. я просто в функции evklid ставил ограничение не фиксированной длины (то бишь длины столбца), а длину строки, которая растет с каждой итерацией. а так все правильно решается.