IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Разреженные матрицы, сложение и умножение
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


допустим,если использовать самый простой способ хранения разреженных матриц-
хранение значений, номера строк и столбцов в трёх одномерных массивах...

собственно,вопрос стоит в том,чтобы складывать и умножать две мптрицы,заданные таким образом.

для сложения вроде процедуру придумала...только вот она считает сумму элементов тогда,когда индексы не совпадают...
Код

var
   i,j:integer;
begin
   h:=1;
   for i:=1 to k do
   for j:=1 to c do
   begin
      if (ia[i]=ib[j]) and (ja[i]=jb[j])
      then begin
      cn[h]:=an[i]+bn[j];
      ic[h]:=ia[i];
      jc[h]:=ja[i];
      h:=h+1;end
      else begin
      cn[h]:=an[i];
      ic[h]:=ia[i];
      jc[h]:=ja[i];
      h:=h+1;
      cn[h]:=bn[j];
      ic[h]:=ib[j];
      jc[h]:=jb[j];
      h:=h+1;end;
   end;  
end;

здесь k,c кол-во полученных элементов в матрицах а и b соответственно.

для умножения не могу сообразить условие,по которому выполнялась бы эта операция...

не могли бы вы помочь мне в этих вопросах?


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Обязательно самопальные алгоритмы писАть? Чем готовые не устраивают?
AlgLib: Разреженные матрицы
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


Цитата(volvo @ 13.03.2006 16:29) *

Обязательно самопальные алгоритмы писАть? Чем готовые не устраивают?
AlgLib: Разреженные матрицы

не устраивают способом.
мне нужно перемножать и складывать матрицы,заданные совершенно
простым способом.

да и хотя бы просто интересно,почему не работает полученный мной алгоритм


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
мне нужно перемножать и складывать матрицы,заданные совершенно простым способом.
dry.gif То-то я гляжу, у тебя самый простой способ, да не работает... Как всегда: "Лучше день потерять, потом за пять минут долететь"? (С) Ну, теряй, коли хочешь...

Цитата
почему не работает полученный мной алгоритм
Ты полностью программу приведи (вместе с ЗАПОЛНЕНИЕМ матрицы, и желательно с теми данными, на которых ты все это тестировала), а то придется все заново писать, чтобы проверить твои 20 строк, а кому это надо?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 233
Пол: Женский
Реальное имя: Dasha

Репутация: -  0  +


в общем так,правда это на делфи
Код
type
  savematr=array [1..100] of integer;
var
   an,bn,cn,dn,ia,ib,ic,id,ja,jb,jc,jd:savematr;
   k,c,m,n,h:integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
   k:=k+1;
   ia[k]:=StrToInt(Edit1.Text);
   ja[k]:=StrToInt(Edit2.Text);
   an[k]:=StrToInt(Edit3.Text);
   Edit1.Clear;
   Edit2.Clear;
   Edit3.Clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   c:=c+1;
   ib[c]:=StrToInt(Edit4.Text);
   jb[c]:=StrToInt(Edit5.Text);
   bn[c]:=StrToInt(Edit6.Text);
   Edit4.Clear;
   Edit5.Clear;
   Edit6.Clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
   mia,mib,mja,mjb,i:integer;
begin
   mia:=ia[1];
   for i:=1 to k do
   if ia[i]>mia then mia:=ia[i];
   mja:=ja[1];
   for i:=1 to k do
   if ja[i]>mja then mja:=ja[i];
   mib:=ib[1];
   for i:=1 to c do
   if ib[i]>mib then mib:=ib[i];
   mjb:=jb[1];
   for i:=1 to c do
   if jb[i]>mjb then mjb:=jb[i];
   if mia>mib then n:=mia else n:=mib;
   if mja>mjb then m:=mja else m:=mjb;
   Label21.Caption:=IntToStr(n);
   Label22.Caption:=IntToStr(m);
end;

procedure TForm1.Button4Click(Sender: TObject);
var
   v,b,i,g:integer;
begin
   v:=StrToInt(Edit7.Text);
   b:=StrToInt(Edit8.Text);
   for i:=1 to k do
   if (ia[i]=v) and (ja[i]=b) then begin
                                   Label11.Caption:=IntTostr(an[i]);
                                   g:=1;end;
   if g<>1 then  Label11.Caption:=IntToStr(0);

end;

procedure TForm1.Button5Click(Sender: TObject);
var
   v,b,i,g:integer;
begin
   v:=StrToInt(Edit7.Text);
   b:=StrToInt(Edit8.Text);
   for i:=1 to c do
   if (ib[i]=v) and (jb[i]=b) then begin
                                   Label11.Caption:=IntTostr(bn[i]);
                                   g:=1;end;
   if g<>1 then  Label11.Caption:=IntToStr(0);

end;

procedure TForm1.Button6Click(Sender: TObject);
var
   i,j:integer;
begin
   h:=1;
   for i:=1 to k do
   for j:=1 to c do
   begin
      if (ia[i]=ib[j]) and (ja[i]=jb[j])
      then begin
      cn[h]:=an[i]+bn[j];
      ic[h]:=ia[i];
      jc[h]:=ja[i];
      h:=h+1;end
      else begin
      cn[h]:=an[i];
      ic[h]:=ia[i];
      jc[h]:=ja[i];
      h:=h+1;
      cn[h]:=bn[j];
      ic[h]:=ib[j];
      jc[h]:=jb[j];
      h:=h+1;end;
   end;  
end;

procedure TForm1.Button7Click(Sender: TObject);
var
   v,b,i,g:integer;
begin
   v:=StrToInt(Edit9.Text);
   b:=StrToInt(Edit10.Text);
   for i:=1 to h do
   if (ic[i]=v) and (jc[i]=b) then begin
                              Label15.Caption:=IntTostr(cn[i]);
                              g:=1;end;
   if g<>1 then  Label15.Caption:=IntToStr(0);

end;
end.


ещё программу саму прилагаю.посмотрите,пожалуйста


Прикрепленные файлы
Прикрепленный файл  mein.rar ( 4.16 килобайт ) Кол-во скачиваний: 207


--------------------
irreparabilium felix olivio rerum
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






blink.gif Ну, и в каком порядке прикажешь на кнопки тыкать?

Неужели нельзя давать "говорящие" имена переменным и процедурам? "A", "C", "K", "CN" ну не говорят они ничего постороннему человеку !!! Чего куда вводить? Ты бы лучше сделала процедуру, в которую поступает разреженная матрица в общем виде, а на выходе - в твоем... А так - извини, но тыкать по кнопкам в надежде, что делаешь это правильно, НЕ ЗНАЯ (хотя я просил тебя привести) исходных данных - это пускай кто-нибудь другой делает...

P.S. Если это нужно тебе именно на Дельфи - я перенесу тему в соответствующий раздел...


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 6:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name