ВУЗ:
Составители:
Рубрика:
88
// операция сложения двух матриц
public static MatrixList operator+(MatrixList ob1, MatrixList ob2)
{
// матрицы должны иметь одинаковые размеры
if(ob1.m != ob2.m || ob1.n != ob2.n)
throw new BadDimensionException
(ob1.m, ob1.n, ob2.m, ob2.n);
// создается матрица-результат
// как копия первого слагаемого
MatrixList res = new MatrixList(ob1.m, ob1.n);
// вызов метода копирования списка класса List
res.list.AddRange(ob1.list);
res.count = ob1.count;
// просмотр элементов второй матрицы
for (int i = 0; i < ob2.count; i++ )
{
MatrixElement exists = res.ExistsElement
(ob2.list[i].I, ob2.list[i].J);
if (exists != null)
// если в матрице-результате элемент с такими
// индексами уже имеется, суммируем элементы
exists.Value += ob2.list[i].Value;
else
// если в матрице-результате элемент с
// такими индексами не существует,
// добавляем новый элемент в матрицу-результат
res[ob2.list[i].I, ob2.list[i].J] = ob2.list[i].Value;
}
return res;
}
Матрица является трехдиагональной, если ее ненулевые элементы
расположены только на главной диагонали и на двух соседних, параллельных
ей.
// метод проверки, является ли матрицы трехдиагональной
bool IsTripleDiagonal()
{
// если матрица неквадратная, генерируется исключение
if(m != n)
throw new NonSquareMatrixException();
MatrixElement exists1;
// в каждой строке проверяется наличие ненулевых
// элементов, расположенных до трех центральных
// диагоналей и после них. Если ненулевой элемент будет
// найден, матрица не является трехдиагональной.
for(int i = 0; i < m; i++)
{
for(int j = 0; j < i - 1; j++)
{
// операция сложения двух матриц public static MatrixList operator+(MatrixList ob1, MatrixList ob2) { // матрицы должны иметь одинаковые размеры if(ob1.m != ob2.m || ob1.n != ob2.n) throw new BadDimensionException (ob1.m, ob1.n, ob2.m, ob2.n); // создается матрица-результат // как копия первого слагаемого MatrixList res = new MatrixList(ob1.m, ob1.n); // вызов метода копирования списка класса List res.list.AddRange(ob1.list); res.count = ob1.count; // просмотр элементов второй матрицы for (int i = 0; i < ob2.count; i++ ) { MatrixElement exists = res.ExistsElement (ob2.list[i].I, ob2.list[i].J); if (exists != null) // если в матрице-результате элемент с такими // индексами уже имеется, суммируем элементы exists.Value += ob2.list[i].Value; else // если в матрице-результате элемент с // такими индексами не существует, // добавляем новый элемент в матрицу-результат res[ob2.list[i].I, ob2.list[i].J] = ob2.list[i].Value; } return res; } Матрица является трехдиагональной, если ее ненулевые элементы расположены только на главной диагонали и на двух соседних, параллельных ей. // метод проверки, является ли матрицы трехдиагональной bool IsTripleDiagonal() { // если матрица неквадратная, генерируется исключение if(m != n) throw new NonSquareMatrixException(); MatrixElement exists1; // в каждой строке проверяется наличие ненулевых // элементов, расположенных до трех центральных // диагоналей и после них. Если ненулевой элемент будет // найден, матрица не является трехдиагональной. for(int i = 0; i < m; i++) { for(int j = 0; j < i - 1; j++) { 88
Страницы
- « первая
- ‹ предыдущая
- …
- 87
- 88
- 89
- 90
- 91
- …
- следующая ›
- последняя »