2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 CSR метод хранения разреженных матриц
Сообщение06.03.2011, 21:40 


06/03/11
2
Нужна ваша помощь. Необходимо реализовать CSR метод хранения симметричных разреженных матриц
Матрица считывается из файла matr, который выглядит следующим образом
7
9.0 0.0 0.0 3.0 1.0 0.0 1.0
0.0 11.0 2.0 1.0 0.0 0.0 2.0
0.0 2.0 10.0 2.0 0.0 0.0 0.0
3.0 1.0 2.0 9.0 1.0 0.0 0.0
1.0 0.0 0.0 1.0 12.0 0.0 1.0
0.0 0.0 0.0 0.0 0.0 8.0 0.0
1.0 2.0 0.0 0.0 1.0 0.0 8.0
где в 1ой строке указан размер матрицы
В результате должны получиться следующие 3 массива
AN: 9.0 3.0 1.0 1.0 11.0 2.0 1.0 2.0 10.0 2.0 9.0 1.0 12.0 1.0 8.0 8.0
JA: 0.0 3.0 4.0 6.0 1.0 2.0 3.0 6.0 2.0 3.0 3.0 4.0 4.0 6.0 5.0 6.0
IA: 0.0 4.0 8.0 10.0 12.0 14.0 15.0 16.0
Т.к матрица симметрична, то всю матрицу не нужно хранить, нужно только верхнюю треугольную построчно с диагональными элементами
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;

int main(int argc, char **argv)

{int a;
int N=0;
int i,j,col=0;
float JA[100],IA[100];
float A[100][100];

FILE *file_f1=fopen("matr.txt", "rt");if (!file_f1) {cout << "No file"<<"\n";}
//файл чтения
fscanf(file_f1,"%d",&N);
cout<<N<<"\n"<< endl;
   for(int i=0;i<N;i++)
    { for(int j=0;j<N;j++)
      {
       fscanf(file_f1,"%f",&A[i][j]);
      if ((A[i][j]!=0) && (i<=j))
      {   JA[j]=j;
           cout<<"JA    "<<JA[j]<<"\n"<< endl;
          col+=1;
            cout<<"AN   "<<A[i][j]<<"\n"<< endl;

      }   
      }
    }
cout<<"col  "<<col<<"\n"<< endl;

cin >> a;
fclose(file_f1);
   
cout << "Done..." << endl;


массивы AN и JA ищутся правильно. Как сформировать массив IA(номер, с которого в AN начинается новая строка?

 Профиль  
                  
 
 Re: CSR метод хранения разреженных матриц
Сообщение07.03.2011, 13:19 


06/03/11
2
может кому-то пригодится.Полностью рабочий вариант
Код:
int _tmain(int argc, _TCHAR* argv[])
{   
int a;
int N=0;
int i,j,col=0,num=0;
int JA[100],IA[100];
float A[100][100];
float AN[100];

FILE *file_f1=fopen("matr.txt", "rt");if (!file_f1) {cout << "No file"<<"\n";}
//файл чтения
fscanf(file_f1,"%d",&N);
//cout<<N<<"\n"<< endl;
   for(int i=0;i<N;i++)
    { for(int j=0;j<N;j++)
      {
       fscanf(file_f1,"%f",&A[i][j]);
      if ((A[i][j]!=0) && (i<=j))
      {   JA[j]=j;
          //cout<<"JA    "<<JA[j]<<"\n"<< endl;
          col+=1;
         AN[j]=A[i][j];
           //cout<<"AN   "<<AN[j]<<"\n"<< endl;
      }
     }
   IA[0]=0;
   IA[i+1]=col;
   
    }

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

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



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

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


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

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