Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 18.05.2011
Сообщений: 39
1

Разряженные матрицы

08.11.2011, 00:50. Показов 961. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Есть задание написать модуль для работы с разряженными матрицами в форме RR(C)O. Нужно реализовать функцию умножения матрицы на вектор-столбец в этой форме. Результат так же должен быть в RR(C)O. Не могли бы вы подсказать, верно ли я написал этот модуль с точки зрения алгоритма?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
unit WeakMatrixUnit;
 
interface
uses
  SysUtils;
 
type
  TWeakMatrix = record
    A: Array of Real;
    IA: Array of Integer;
    JA: Array of Integer;
    Count: Integer;
    Rows: Integer;
  end;
 
procedure WeakMatrixInitialize(var Matrix: TWeakMatrix);
procedure WeakMatrixAddRow(var Matrix: TWeakMatrix; Row: String);
function WeakMatrixMul(const Matrix, Column: TWeakMatrix): TWeakMatrix;
 
implementation
 
procedure WeakMatrixInitialize(var Matrix: TWeakMatrix);
begin
  SetLength(Matrix.A, 10);
  SetLength(Matrix.IA, 10);
  SetLength(Matrix.JA, 10);
  Matrix.Count := -1;
  Matrix.Rows := 0;
  Matrix.IA[0] := 0;
end;
 
procedure WeakMatrixAddRow(var Matrix: TWeakMatrix; Row: String);
var
  Element: String;
  Value: Real;
  J: Integer;
begin
  Row := Row + ' ';
  J := 0;
  while Row <> '' do
  begin
    Element := Copy(Row, 1, pos(' ', Row) - 1);
    Delete(Row, 1, pos(' ', Row) - 1);
    Row := TrimLeft(Row);
    Value := StrToFloat(Element);
    if Value <> 0.0 then
    begin
      Inc(Matrix.Count);
      if Matrix.Count = High(Matrix.IA) then
      begin
        SetLength(Matrix.A, Round(High(Matrix.IA)*0.4));
        SetLength(Matrix.JA, Round(High(Matrix.JA)*0.4));
      end;
      Matrix.A[Matrix.Count] := Value;
      Matrix.JA[Matrix.Count] := J;
    end;
    Inc(J);
  end;
 
  Inc(Matrix.Rows);
  if Matrix.Rows = High(Matrix.IA) then
  begin
    SetLength(Matrix.IA, Round(High(Matrix.IA)*0.4));
  end;
  Matrix.IA[Matrix.Rows] := Matrix.Count+1;
 
end;
 
function WeakMatrixMul(const Matrix, Column: TWeakMatrix): TWeakMatrix;
var
  I, J: Integer;
  Sum: Real;
begin
  WeakMatrixInitialize(Result);
  for I := 0 to Matrix.Rows - 1 do
  begin
    Sum := 0;
    for J := Matrix.IA[I] to Matrix.IA[I+1] do
    begin
      if Column.IA[Matrix.JA[J]] <> Column.IA[Matrix.JA[J+1]] then
      begin
        Sum := Sum + Matrix.A[J]*Column.A[Matrix.JA[J]];
      end;
    end;
    WeakMatrixAddRow(Result, FloatToStr(Sum));
  end;
 
end;
 
end.
Возможность перемножения матрицы и столбца и то, что вторая матрица именно столбец проверяются другими частями программы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2011, 00:50
Ответы с готовыми решениями:

Сформировать из матрицы A матрицы по правилу; найти максимальный по модулю элемент первой строки матрицы
В целочисленной матрице А(3,4) найти m-количество положительных элементов, стоящих в четных...

Даны квадратные матрицы A и B. Получить матрицу D, вставив столбцы матрицы B между столбцами матрицы A.
Вот такая задача...помогите решить пожалуйста....

Матрицы и вектора. Удалить из матрицы строку, в которой находится минимальный элемент матрицы
1.Дана квадратная матрица A(nхn). Построить вектор b, где bi, i=1,…,n – сумма элементов i-ого...

Переставить строки и столбцы матрицы так, чтобы минимальный элемент матрицы находился в левом верхнем углу матрицы
Здравствуйте. Не могу вспомнить как это делается. Помогите пожалуйста, заранее спасибо. Условие :...

0
08.11.2011, 00:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2011, 00:50
Помогаю со студенческими работами здесь

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

Реализовать умножение матрицы, транспонирование матрицы, обращение матрицы
Реализовать умножение матрицы, транспонирование матрицы, (функция должна быть универсальной)...

Процедуры: Найти наименьшее из чисел x,y,z, где х – след матрицы А, y – след матрицы В, z – след матрицы С
Всем доброго времени суток!Ребята,прошу помогите пожалуйста! Даны матрицы А(3, 3), В(2, 2), С(5,...

Найти максимальное из трех чисел x, y, z, где x - след матрицы А, у - след матрицы В, z - след матрицы С
Заданы три матрицы А (третьего порядка), В (второго порядка) и С (третьего порядка). Найти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru