Метод прогонки на js

    <!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Метод прогонки</title>
	<style type="text/css">
		input
		{
			width: 100%;
			margin-bottom: 25px;
		}
	</style>
</head>
<body>
	<span>Введите через пробел ненулевые элементы матрицы: </span>
	<input type="text" id="matrix">
	<br>
	<span>Введите через пробел вектор свободных членов: </span>
	<input type="text" id="free">
	<br>
	<button id="vector">Вычислить</button>
	<br><br>
	<span>Вектор a: </span>
	<input type="text" id="n1"><br>		
	<span>Вектор b: </span>
	<input type="text" id="n2"><br>
	<span>Вектор c: </span>
	<input type="text" id="n3"><br>
	<span>Вектор d: </span>
	<input type="text" id="n4"><br>
	<br><br>
	<span>Массив коэффициентов k: </span>
	<input type="text" id="s1">
	<br>
	<span>Массив коэффициентов f: </span>
	<input type="text" id="s2">
	<br>
	<script type="text/javascript">
		var matrix = document.getElementById("matrix");
		var free = document.getElementById("free");
		var vector = document.getElementById("vector");
		var n1 = document.getElementById("n1");
		var n2 = document.getElementById("n2");
		var n3 = document.getElementById("n3");
		var n4 = document.getElementById("n4");
		vector.onclick = function () {
			var val = matrix.value;
			var str = val.toString().split(" ");
			var a = new Array();
			var j = 0;
			for (var i = 2; i < str.length; i+=3) {
				a[j] = parseFloat(str[i]);
				j++;
			};
			a.unshift(0);
			n1.value = a;
			var b = new Array();
			var j1 = 0;
			for (var i = 0; i < str.length; i+=3) {
				b[j1] = parseFloat(str[i]);
				j1++;
			};
			n2.value = b;
			var c = new Array();
			var j2 = 0;
			for (var i = 1; i < str.length; i+=3) {
				c[j2] = parseFloat(str[i]);
				j2++;
			};
			c.push(0);
			n3.value = c;
			var d = free.value.toString().split(" ");
			n4.value = d;
			var s1 = document.getElementById("s1");
			var s2 = document.getElementById("s2");
			var k = new Array();
			var f = new Array();
			k[0] = -c[0] / b[0];
			f[0] = d[0] / b[0];
			for (var i = 1; i < b.length; i++) {
				k[i] = -c[i] / (b[i] + a[i] * k[i - 1]);
				f[i] = (-a[i] * f[i - 1] + d[i]) / (b[i] + a[i] * k[i - 1]);
			};
			s1.value = k;
			s2.value = f;
		};
	</script>
</body>
</html>

нужно написать программу для метода прогонки. я ее еще не дописал. но столкнулся вот с таким багом: коэффициент f считается неправильно (проверял через эксель и устно) (формула введена правильно). может ли быть такое, что большое количество знаков после запятой повлияло на результат вычислений? и как это исправить? подскажите, пожалуйста

Сводка

Этот текст будет скрыт

Как лучше всего формулировать вопрос.

Если расчитываешь получить помощь, объясни более детально суть проблемы, потому что предметная область очень специфичная.

вот формулы для расчета, расчеты js и экселя. что еще подробней? совсем неправильно считает . хотя если считать все со страницы вручную, должно быть правильно

image

image

@Prometheus_Music, вряд-ли кто-то захочет над этим пыхтеть. Если спрашивать по программированию - это подскажут(ем).
совсем неправильно считает - можно попробовать оттрейсить/дебажить.

проверьте на извесную проблему в програмировании:
особенностей работы c числами с плавающей точкой
0.1 + 0.7 не равняеться 0.8 !!!

да я вродеб догнал…

“1-REZ1 = -1.66666666666666671” // неверно
ты складываешь строку с числом вот и результат пляшет
надо привести все к одному типу

1 лайк

блин… точно.
я ведь старался все сразу приводить к одному типу, но видимо забыл привести массив d к флоатам(
спасибо большое

я подумал об этом в первую очередь, но не стал это проверять, ибо разница в расчетах большая (-1/7 и … сколько там… -0.36) и уже априори это не должно быть причиной