Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с матрицами и массивами (https://javascript.ru/forum/misc/22214-pomogite-s-matricami-i-massivami.html)

Gravy07 10.10.2011 20:28

Помогите с матрицами и массивами
 
Помогите с методом Гаусса-Зейделя, есть код на С++ и его нужно переписать на javascript как-нить, очень нуждаюсь в помощи:
// Условие сходимости
bool converge(double *xk, double *xkp)
{
    for (int i = 0; i < n; i++) 
    {
        if (fabs(xk[i] - xkp[i]) >= eps) 
            return false;
    }
    return true;
}
 
/*
    Ход метода, где:
    a[n][n] - Матрица коэффициентов
    x[n], p[n] - Текущее и предыдущее решения
*/
 
do
{
    for (int i = 0; i < n; i++)
    {
        double var = 0;
        for (int j = 0; j < n; j++)
            if (j != i) var += (a[i][j] * x[j]);
        p[i] = x[i];
        x[i] = (b[i] - var) / a[i][i];
    }
}
while (!converge(x, p));


Вот код html файла, там для нескольких матриц порядка от 3 до 13:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Численные методы</title>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
	<!-- <script type="text/javascript" src="jquery-1.6.4.min.js"></script> -->
    <script type="text/javascript" src="tabs.js"></script>
    <script type="text/javascript" src="Javascr.js"></script>
  
</head>

<body>

<div class="section vertical">

	<ul class="tabs">
		<li class="current">Ввод матрицы</li>
		<li>Вторая вкладка</li>
		</ul>

	 <div class="box visible">
		Выберите порядок квадратной матрицы
        <select id="webmenu" name="webmenu">
    <option value="0"></option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
</select>

       <div id="matrix"></div>
	</div>

	<div class="box">
		<p>Метод Гаусса-зейделя</p>
		</div>

</div>

</body>
</html>

и вот JS с созданием матрицы, мб надо было через массив, но не получилось:
$(document).ready(function () {
    $('#webmenu').change(function () {
        var n = $(this).val()
        var t, r, i, j, c, b, v
        $('#matrix').empty()
        
        t = $('<table border="0" cellspacing="12" cellpadding="12"></table>')
        v = $('<table border="0" cellpadding="12" cellspacing="12"></table>')
        for (i = 0; i < n; i++) {
            r = $('<tr></tr>')
            for (j = 0; j < n; j++) {
                c = $('<td>' + Math.round(Math.random() * 51) + '</td>')
                r.append(c)
            }
            b = $('<tr>' + Math.round(Math.random() * 51) + '</tr>')
            v.append(b)
            t.append(r)
        }
        
        $('#matrix').append(t)
        $('#matrix').append(v)
 
    })
})

ksa 11.10.2011 08:46

Цитата:

Сообщение от Gravy07
методом Гаусса-Зейделя

Решение системы линейных уравнений?

Сколько платишь?

aiky 11.10.2011 10:26

var n = ..
var eps = 1.11E-16;

var converge = function(xk, xkp){
  for (var i = 0; i < n; i++)
    if(Math.abs(xk[i] - xkp[i]) >= eps) return false;
  return true;
}
  
do{
  for(var i = 0; i < n; i++){
    var v = 0;
    for (j = 0; j < n; j++) 
      if (j != i) v += (a[i][j] * x[j]);
    p[i] = x[i];
    x[i] = (b[i] - v) / a[i][i];
  }
}
while (!converge(x, p));

Gravy07 14.10.2011 23:05

Спасибо, попробую


Часовой пояс GMT +3, время: 15:54.