2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Как выделить память под треугольную матрицу?
Сообщение27.11.2006, 01:17 


26/11/06
76
Есть симметричная матрица жесткости(NxN), естественно в целях экономии памяти не смысла хранить её полностью , но как выделить память только для хранения одной треугольной её части через оператор new (в С++ или Java)?
Вот выделение памяти через оператор new для всей матрицы:
Код:
int n,i;
float **a = new float*[n];
for(i=1;i<=n;i++)
a[i]=new float[n];

 Профиль  
                  
 
 Re: Как выделить память под треугольную матрицу?
Сообщение27.11.2006, 02:09 
Заслуженный участник


15/05/05
3445
USA
vitaly333 писал(а):
Есть симметричная матрица жесткости(NxN), естественно в целях экономии памяти не смысла хранить её полностью , но как выделить память только для хранения одной треугольной её части через оператор new (в С++ или Java)?

В численных алгоритмах с экономией памяти для симметричных матриц ее элементы обычно хранят не в 2-мерном, а в 1-мерном массиве:
Код:
int n;
float *a = new float*[n*(n+1)/2];

Для пересчета индексов можно использовать функцию типа
Код:
int GetAddr(int i, int j)
{
    return ( i>=j ? j+i*(i+1)/2 : i+j*(j+1)/2 );
}

Она соответствует хранению нижней части по строкам (== верхней - по столбцам): 00, 10, 11, 20, 21, 22, 30, ... Для эффективности можно включить адресную арифметику внутрь циклов, избавляясь от умножений.
Однажды мне встретился вариант, когда в 1-мерном массиве сначала идут N диагональных элементов, а затем поддиагональный или наддиагональный треугольник.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group