Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.05.2017, 18:14
Новичок на форуме
Отправить личное сообщение для pentagrant Посмотреть профиль Найти все сообщения от pentagrant
 
Регистрация: 24.05.2017
Сообщений: 6

Найти определитель матрицы рекурсивно
Искал программу в Интернете, адекватным вариантом мне показался только этот:
function Determinant(A)
{  
    var n = A.length, subA = [], detA = 0;
        
    if (n==1) return A[0][0];
    if (n==2) return (A[0][0]*A[1][1]-A[0][1]*A[1][0]);
    if (n==3)
       { return ((A[0][0]*A[1][1]*A[2][2]+A[0][1]*A[1][2]*A[2][0]+A[0][2]*A[1][0]*A[2][1])
                 -(A[0][0]*A[1][2]*A[2][1]+A[0][1]*A[1][0]*A[2][2]+A[0][2]*A[1][1]*A[2][0]));
       }

    for (var i=0; i<n; i++)
        { for (var h=0; h<n-1; h++) subA[h]=[];
          for (var a=1; a<n; a++)
              { for (var b=0; b<n; b++)
                    { if (b<i)       subA[a-1][ b ] = A[ a ][ b ];
                      else if (b>i)  subA[a-1][b-1] = A[ a ][ b ];
                    }
              }
          var sign = (i%2==0) ? 1 : -1;
          detA += sign * A[0][i] * Determinant(subA);
        }

    return detA;
}


Во вложении - картинка с описанием метода, которым нужно определитель находить.

Я очень не силён в JS. Я так понимаю, найденная программа - только шаблон. Куда вписать саму матрицу? И ещё: в начале и в конце нужно открыть и закрыть теги html и script, правильно?
Изображения:
Тип файла: png Без имени-2.png (29.1 Кб, 6 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 24.05.2017, 18:17
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

<script>
function Determinant(A)
{  
    var n = A.length, subA = [], detA = 0;
        
    if (n==1) return A[0][0];
    if (n==2) return (A[0][0]*A[1][1]-A[0][1]*A[1][0]);
    if (n==3)
       { return ((A[0][0]*A[1][1]*A[2][2]+A[0][1]*A[1][2]*A[2][0]+A[0][2]*A[1][0]*A[2][1])
                 -(A[0][0]*A[1][2]*A[2][1]+A[0][1]*A[1][0]*A[2][2]+A[0][2]*A[1][1]*A[2][0]));
       }

    for (var i=0; i<n; i++)
        { for (var h=0; h<n-1; h++) subA[h]=[];
          for (var a=1; a<n; a++)
              { for (var b=0; b<n; b++)
                    { if (b<i)       subA[a-1][ b ] = A[ a ][ b ];
                      else if (b>i)  subA[a-1][b-1] = A[ a ][ b ];
                    }
              }
          var sign = (i%2==0) ? 1 : -1;
          detA += sign * A[0][i] * Determinant(subA);
        }

    return detA;
}

Determinant(тут ваша матрица);
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 24.05.2017, 18:30
Новичок на форуме
Отправить личное сообщение для pentagrant Посмотреть профиль Найти все сообщения от pentagrant
 
Регистрация: 24.05.2017
Сообщений: 6

Ruslan_xDD,
Копирую скрипт, вставляю через Блокнот в файл, открываю html - пусто
Ответить с цитированием
  #4 (permalink)  
Старый 24.05.2017, 18:32
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

<script>
function Determinant(A)
{  
    var n = A.length, subA = [], detA = 0;
        
    if (n==1) return A[0][0];
    if (n==2) return (A[0][0]*A[1][1]-A[0][1]*A[1][0]);
    if (n==3)
       { return ((A[0][0]*A[1][1]*A[2][2]+A[0][1]*A[1][2]*A[2][0]+A[0][2]*A[1][0]*A[2][1])
                 -(A[0][0]*A[1][2]*A[2][1]+A[0][1]*A[1][0]*A[2][2]+A[0][2]*A[1][1]*A[2][0]));
       }

    for (var i=0; i<n; i++)
        { for (var h=0; h<n-1; h++) subA[h]=[];
          for (var a=1; a<n; a++)
              { for (var b=0; b<n; b++)
                    { if (b<i)       subA[a-1][ b ] = A[ a ][ b ];
                      else if (b>i)  subA[a-1][b-1] = A[ a ][ b ];
                    }
              }
          var sign = (i%2==0) ? 1 : -1;
          detA += sign * A[0][i] * Determinant(subA);
        }

    return detA;
}

document.write(Determinant(тут ваша матрица));
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 24.05.2017, 18:36
Новичок на форуме
Отправить личное сообщение для pentagrant Посмотреть профиль Найти все сообщения от pentagrant
 
Регистрация: 24.05.2017
Сообщений: 6

Ruslan_xDD,
Огромное спасибо!!!
Ответить с цитированием
  #6 (permalink)  
Старый 24.05.2017, 18:44
Новичок на форуме
Отправить личное сообщение для pentagrant Посмотреть профиль Найти все сообщения от pentagrant
 
Регистрация: 24.05.2017
Сообщений: 6

Ruslan_xDD,
А можно ли каким-то образом сделать так, чтобы матрицу вводил пользователь?
Ответить с цитированием
  #7 (permalink)  
Старый 24.05.2017, 18:55
Новичок на форуме
Отправить личное сообщение для pentagrant Посмотреть профиль Найти все сообщения от pentagrant
 
Регистрация: 24.05.2017
Сообщений: 6

Ruslan_xDD,
Нашёл форму для ввода кол-ва строк и столбцов матрицы. Два поля с кнопкой, вводим в поля кол-во строк и столбцов соответственно после нажатия на кнопку создаётся матрица, в которую вводим числа.

<script>
function generate()
{
	var rowCount = document.getElementById('rowCount').value;
	var colCount = document.getElementById('colCount').value;
	var tbl = document.createElement('table');
	tbl.insertRow(-1);
	for (var j=0; j<=colCount; j++)	tbl.tBodies[0].rows[0].insertCell(-1).innerHTML = j||' ';
	for (var i=1; i<=rowCount; i++)
	{
		tbl.insertRow(-1).insertCell(-1).innerHTML = i;
		for (var j=1; j<=colCount; j++)	
		{
			var input = document.createElement('input');
			input.id=input.name='m_'+i+'_'+j;
			input.size = "5";
			tbl.tBodies[0].rows[i].insertCell(-1).appendChild(input);
		}
	}
	document.body.appendChild(tbl);
}
</script>
rowCount: <input id='rowCount' type='text' value='4' /><br />
colCount: <input id='colCount' type='text' value='5' /><br />
<button onclick="generate()">generate</button>


Но как сделать так, чтобы введённая матрица читалась скриптом с определителем?
Ответить с цитированием
  #8 (permalink)  
Старый 25.05.2017, 02:49
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

pentagrant,

<script>
function Determinant(A)
{  
    var n = A.length, subA = [], detA = 0;
        
    if (n==1) return A[0][0];
    if (n==2) return (A[0][0]*A[1][1]-A[0][1]*A[1][0]);
    if (n==3)
       { return ((A[0][0]*A[1][1]*A[2][2]+A[0][1]*A[1][2]*A[2][0]+A[0][2]*A[1][0]*A[2][1])
                 -(A[0][0]*A[1][2]*A[2][1]+A[0][1]*A[1][0]*A[2][2]+A[0][2]*A[1][1]*A[2][0]));
       }

    for (var i=0; i<n; i++)
        { for (var h=0; h<n-1; h++) subA[h]=[];
          for (var a=1; a<n; a++)
              { for (var b=0; b<n; b++)
                    { if (b<i)       subA[a-1][ b ] = A[ a ][ b ];
                      else if (b>i)  subA[a-1][b-1] = A[ a ][ b ];
                    }
              }
          var sign = (i%2==0) ? 1 : -1;
          detA += sign * A[0][i] * Determinant(subA);
        }

    return detA;
}

function generate()
{
	var rowCount = document.getElementById('rowCount').value;
	var colCount = document.getElementById('colCount').value;
	var tbl = document.createElement('table');
	tbl.insertRow(-1);
	for (var j=0; j<=colCount; j++)	tbl.tBodies[0].rows[0].insertCell(-1).innerHTML = j||' ';
	for (var i=1; i<=rowCount; i++)
	{
		tbl.insertRow(-1).insertCell(-1).innerHTML = i;
		for (var j=1; j<=colCount; j++)	
		{
			var input = document.createElement('input');
			input.id=input.name='m_'+i+'_'+j;
			input.size = "5";
			tbl.tBodies[0].rows[i].insertCell(-1).appendChild(input);
		}
	}
	document.body.appendChild(tbl);
	var det = document.createElement("INPUT");
	document.body.insertBefore(det, tbl);
	det.type = "button";
	det.value = "Determinant";
	det.onclick = function () {
		var mtx = [];
		for (var i = 1; i <= rowCount; i++) {
			mtx[i - 1] = [];
			for (var j = 1; j <= colCount; j++)
				mtx[i - 1].push( tbl.rows[i].cells[j].getElementsByTagName("input")[0].value );
		}
		alert( Determinant( mtx ) );
	};
}
</script>
rowCount: <input id='rowCount' type='text' value='4' /><br />
colCount: <input id='colCount' type='text' value='5' /><br />
<button onclick="generate()">generate</button>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для заданной квадратной матрицы сформировать.. valera_77 Общие вопросы Javascript 1 22.04.2015 16:49
Где найти скрипт - Социальный Замок для html ? klimentino Общие вопросы Javascript 1 25.10.2013 06:39
Как найти внешний html DOM-объекта jquery? posta jQuery 7 12.04.2013 15:26
как найти и удалить массив из массива? FRIE Общие вопросы Javascript 8 14.03.2011 15:48
как найти нужный объект? `p r o x y jQuery 2 05.05.2009 01:12