Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/40: Рейтинг темы: голосов - 40, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 56

Операции с матрицами

19.05.2011, 22:19. Показов 8575. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прет. Пишу прогу работа с матрицами, но остались действия которые я не знаю, это:
1. Обратная матрица
2. Алгебраическое дополнение(a13, a23, a31)(вывожу в Edit)
3. Миноры матриц (m12, m22, m31)(Сдесь вывожу миноры в Edit)
4. Решение системы уравнений
5. Определитель матрицы
В проге везде использую StringGrid как матрица, кто может помочь то напишите здесь куски программы, которые выполняют данные действия!!! Буду оч благодарен, да и сдавать нужн о эту прогу уже совсем скоро.

Добавлено через 29 минут
И нужно чтобы каждое действие выводилось по нажатию кнопки (каждое действие в отдельной форме). Кто сможет помочь, то отпишите здесь плиз!!

Добавлено через 1 час 33 минуты
Никто не может помочь??((((( ппц.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.05.2011, 22:19
Ответы с готовыми решениями:

Операции над матрицами с использованием radiogroup
Народ, помогите пожалуйста.Нужно с помощью RadioGroup найти сумму и произведение матрицы , когда ставишь галочку на "сумму" и при...

Структура матрицы и операции с матрицами
Написать структуру вывода матриц из файла txt, и умножение матриц

Класс: Разработать класс для работы с матрицами(операции над матрицами)...
Добрый вечер, хочу попросить о помощи с отловом проблемы. Сама задача: разработать класс для работы с матрицами(операции над...

32
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 56
20.05.2011, 11:11  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от taras atavin Посмотреть сообщение
Циклами с рекурсией.
Сам я не смогу написать, и надеюсь ток на форум((
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.05.2011, 11:13
А Гуассом?

Добавлено через 23 секунды
Цитата Сообщение от vajiera17 Посмотреть сообщение
4. Решение системы уравнений
Гауссом.

Добавлено через 1 минуту
Цитата Сообщение от vajiera17 Посмотреть сообщение
Сдесь вывожу миноры в Edit
Минор - это матрица, в Edit он не поместится. Или нужен не сам минор, а его определитель?
0
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 56
20.05.2011, 11:14  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
А Гуассом?
Ну на листике с помощью математики то решу))) но программу написать не смогу
_____________________
мда, все больше мне стыдно

Добавлено через 38 секунд
Цитата Сообщение от taras atavin Посмотреть сообщение
А Гуассом?

Добавлено через 23 секунды
Гауссом.

Добавлено через 1 минуту
Минор - это матрица, в Edit он не поместится. Или нужен не сам минор, а его определитель?
Нужен определить минора!!!
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.05.2011, 11:24
Даже Гаусом? Странно. Ладно, лови, причём, с дополнительными сложностями типа арифметики указателей там, где она нафиг не нужна:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
double Det (double **a, int N)
{
 double **i, **j, **lr, *u, *d, *lu, r;
 lr=a+N-1;
 for (i=a; i<=lr; ++i)
 {
  for (j=i+1; j<=lr; ++j)
  {   
   for (u=*i+(i-a), d=*j+(i-a), lu=*i+N, z=*d/ *u; u<=lu; ++u, ++d)
   {
    *d-=*u*z;
   }
  }
 }
 for (i=a, r=1.0; i<=lr; ++i)
 {
  u=*i+(i-a);
  r*=*u;
 }
 return r;
}
. А через массив единственаня сложность будет в математике.
2
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 56
20.05.2011, 11:33  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
Даже Гаусом? Странно. Ладно, лови, причём, с дополнительными сложностями типа арифметики указателей там, где она нафиг не нужна:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
double Det (double **a, int N)
{
 double **i, **j, **lr, *u, *d, *lu, r;
 lr=a+N-1;
 for (i=a; i<=lr; ++i)
 {
  for (j=i+1; j<=lr; ++j)
  {   
   for (u=*i+(i-a), d=*j+(i-a), lu=*i+N, z=*d/ *u; u<=lu; ++u, ++d)
   {
    *d-=*u*z;
   }
  }
 }
 for (i=a, r=1.0; i<=lr; ++i)
 {
  u=*i+(i-a);
  r*=*u;
 }
 return r;
}
. А через массив единственаня сложность будет в математике.
эт что считает??
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.05.2011, 11:46
Определитель. Сначала перегони свою матрицу из грида в динамический массив даблов, потом вызывай.
1
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 56
20.05.2011, 11:51  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
Определитель. Сначала перегони свою матрицу из грида в динамический массив даблов, потом вызывай.
Мда, туго до меня доходит))
Я программирование не увлекаюсь(прост учеба заставила), поэтому хотел бы тя папросить обьеснить уже все па полочкам, куда этот код вставлять, как перегнать в динамический массив, как вызвать эту функцию, вообщем как сделать так, чтоб по нажатию кнопки определить выводился в эдит?
_____________________________________
ну я вообще ни че не понимаю((((
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.05.2011, 12:00
Цитата Сообщение от vajiera17 Посмотреть сообщение
как перегнать в динамический массив
C++
1
2
3
4
5
6
7
8
9
a= new double* [N];
for (i=1; i<=N; ++i)
{
 a[i-1]=new double [N];
 for (i=1; i<=N; ++i)
 {
  a[i-1][j-1]=Grid.Cells[i][j];
 }
}
1
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 56
20.05.2011, 19:17  [ТС]
Может кто еще помочь???
0
1 / 1 / 0
Регистрация: 27.04.2014
Сообщений: 8
06.05.2014, 18:38
не буду создавать новую тему так как эта названа операции с матрицами. Есть маленькая проблема, дали задание написать прогу для обращения матриц, все сделал, но когда мы делаем проверку, допустим матрицы 2 на 2, по формуле A*A(-1)=E (А(-1) - обратная, E-единичная, А-исходная)
должен быть результат
1 0
0 1
а он выдает так
0 1
0 1
в чем проблема посмотрите пожалуйста, все эти действия выполняются в proverk`е и выводе, вот код, остальное все правильно должно работать и работает
C++
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
//---------------------------------------------------------------------------
#include <windows.h>//malloc, system("pause")
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream>
#include <ctype.h>
//---------------------------------------------------------------------------
 
int main(int argc, char* argv[])
{
 float **A, **copyA, **proverka, **inverseA, *E, kf, temp; int i,j,k=0,n,t; bool w=true;
 printf("vvedite razmernost matrix\n");
 scanf("%d",&n);
 A= (float **)malloc(n*sizeof(float));
 E= (float *)malloc(n*sizeof(float));
 copyA=(float **)malloc(n*sizeof (float));
 inverseA=(float **)malloc(n*sizeof (float));
 proverka=(float **)malloc(n*sizeof (float));
 
 
 
 /*_______________ââîä ìàòðèöû A íàðÿäó ñ ñîçäàíèåì____________*/
 //randomize();
 
 while(w!=false)
   {
      printf("Vvod matrix A: \n");
      for(i=0;i<n;i++)
        {
          
          A[i]=(float *)malloc(n*sizeof(float));
          copyA[i]=(float *)malloc(n*sizeof(float));
          inverseA[i]=(float *)malloc(n*sizeof(float));
          for(j=0;j<n;j++)
          {
             printf("\nvvedite A[%d, %d] element: ",i+1,j+1);
             scanf("%f",&A[i][j]);
          }
        }
      w=false;
      for(i=0;i<n;i++)
        {
          if(A[i][i]==0)
            {
              printf("\n\n->Na diagonali 0!;\n->Vvedite matrix zanovo!\n\n");
              w=true;
            }
        }
   }
 
 
 printf("\n----------Matrix A vvedena--------\n\n");
 for(i=0;i<n;i++)
   {
     for(j=0;j<n;j++)
     printf("%6.2f\t",A[i][j]);
     printf("\n\n");
   }
 
 
 
 system("pause");
 
 /*____________ïðåîáðàçîâàíèå ìàòðèö A äî âåðõíåòðåóãîëüíîé________*/
 /*_________________ìåòîäîì êîýôèöèåíòà è âû÷èòàíèÿ________________*/
 
 
for(t=0;t<n;t++)
 {
   for(i=0;i<n;i++)
     for(j=0;j<n;j++)
       copyA[i][j]=A[i][j];
 
   for(i=0;i<n;i++)
     E[i]=0;
   E[t]=1;
 
   for(i=0;i<n-1;i++)
     {
       for(k=i+1;k<n;k++)
         {
           kf=copyA[k][i]/copyA[i][i];
           A[k][j]=0;
           for(j=i+1;j<n;j++)
             {
               copyA[k][j]=copyA[k][j]-kf*copyA[i][j];
             }
           E[k]=E[k]-kf*E[i];
         }
     }
 
 
 /*___________________________îáðàòíûé õîä________________________________*/
 
 
 
   inverseA[n-1][t]=E[n-1]/copyA[n-1][n-1];
   for(k=n-2;k>=0;k--)
     {
       for(i=k+1;i<n;i++)
         {
          temp= temp+copyA[k][i]*inverseA[i][t];
         }
       inverseA[k][t]=(E[k]-temp)/copyA[k][k];
       inverseA[k][t]=float(inverseA[k][t]*1000000+0.5)/1000000;
       temp=0;
     }
 
 }
 
/*____________________________Î÷èñòêà_____________________________________*/
 
  //delete[]copyA;
  //delete[]E;
  delete[]A;
/*________________________________________________________________________*/
 
 printf("\n\n--------------------Obratnaya Matrix A^(-1)---------------------\n\n");
 for(i=0;i<n;i++)
   {
     for(j=0;j<n;j++)
       printf("%6.2f",inverseA[i][j]);
     printf("\n\n");
   }
   system("pause");
/*---------------------------A*A(-1)=E---------proverka--------------------------------------------------*/
printf("\n\n----------------------------proverka-----------------------------------\n\n");
t=0;
  for(i=0;i<n;i++)
    for(j=0;j<n;j++)
    {
      proverka[i][j]=0;
      for(t=0;t<n;t++)
        {
          proverka[i][j]+=A[t][i]*inverseA[j][t];
        }
      }
/*-------------------------------------------âûâîä E-----------------------------------------*/
      for(i=0;i<n;i++)
       { for(j=0;j<n;j++)
          {
           printf("%6.2f",proverka[i][j]);
          }
         printf("\n\n");
       }
/*--------------------------------------------------------------------------------------*/
 printf("Vihod...");
 
 getch();
 
 
 return 0;
}
//---------------------------------------------------------------------------
Добавлено через 5 часов 16 минут
а если ввожу к примеру матрицу 3х3 вообще вылетает, не работает
1
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 600
07.05.2014, 16:38
- vajiera17, если Вы не знаете что такое - Det, то, по моему, Вы не знаете - ничего...
Садитесь читать!
- Если - же Вы не умеете пользоваться C++, то внимательно разберите примеры из постов #2 и #30.
Они очень многое прояснят ...
0
1 / 1 / 0
Регистрация: 27.04.2014
Сообщений: 8
08.05.2014, 12:31
ребят может все таки кто нибудь поможет в моем коде на 3 странице в конце?)
0
1 / 1 / 0
Регистрация: 27.04.2014
Сообщений: 8
12.05.2014, 12:01
вообщем кому надо вот моя прога, сам нашел ошибку, условия задачи звучит так
метод гаусса для обращения матрицы
C++
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
//---------------------------------------------------------------------------
#include <windows.h>//malloc, system("pause")
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream>
#include <ctype.h>
//---------------------------------------------------------------------------
 
int main(int argc, char* argv[])
{
 float **A, **copyA, **P, **inverseA, *E, kf, temp; int i,j,k=0,n,t; bool w=true;
 printf("vvedite razmernost matrix\n");
 scanf("%d",&n);
 A= (float **)malloc(n*sizeof(float));
 E= (float *)malloc(n*sizeof(float));
 copyA=(float **)malloc(n*sizeof (float));
 inverseA=(float **)malloc(n*sizeof (float));
 P=(float **)malloc(n*sizeof (float));
 
 
 
 /*_______________ввод матрицы A наряду с созданием____________*/
 //randomize();
 
 while(w!=false)
   {
      printf("Vvod matrix A: \n");
      for(i=0;i<n;i++)
        {
          
          A[i]=(float *)malloc(n*sizeof(float));
          copyA[i]=(float *)malloc(n*sizeof(float));
          inverseA[i]=(float *)malloc(n*sizeof(float));
          P[i]=(float *)malloc(n*sizeof (float));
          for(j=0;j<n;j++)
          {
             printf("\nvvedite A[%d, %d] element: ",i+1,j+1);
             scanf("%f",&A[i][j]);
          }
        }
      w=false;
      for(i=0;i<n;i++)
        {
          if(A[i][i]==0)
            {
              printf("\n\n->Na diagonali 0!;\n->Vvedite matrix zanovo!\n\n");
              w=true;
            }
        }
   }
 
 
 printf("\n----------Matrix A vvedena--------\n\n");
 for(i=0;i<n;i++)
   {
     for(j=0;j<n;j++)
     printf("%6.2f\t",A[i][j]);
     printf("\n\n");
   }
 
 
 
 system("pause");
 
 /*____________преобразование матриц A до верхнетреугольной________*/
 /*_________________методом коэфициента и вычитания________________*/
 
 
for(t=0;t<n;t++)
 {
   for(i=0;i<n;i++)
     for(j=0;j<n;j++)
       copyA[i][j]=A[i][j];
 
   for(i=0;i<n;i++)
     E[i]=0;
   E[t]=1;
 
   for(i=0;i<n-1;i++)
     {
       for(k=i+1;k<n;k++)
         {
           kf=copyA[k][i]/copyA[i][i];
           A[k][j]=0;
           for(j=i+1;j<n;j++)
             {
               copyA[k][j]=copyA[k][j]-kf*copyA[i][j];
             }
           E[k]=E[k]-kf*E[i];
         }
     }
 
 
 /*___________________________обратный ход________________________________*/
 
 
 
   inverseA[n-1][t]=E[n-1]/copyA[n-1][n-1];
   for(k=n-2;k>=0;k--)
     {
       for(i=k+1;i<n;i++)
         {
          temp= temp+copyA[k][i]*inverseA[i][t];
         }
       inverseA[k][t]=(E[k]-temp)/copyA[k][k];
       inverseA[k][t]=float(inverseA[k][t]*1000000+0.5)/1000000;
       temp=0;
     }
 
 }
 
/*____________________________Очистка_____________________________________*/
 
/*delete[]copyA;
delete[]E;
 delete[]A;
/*________________________________________________________________________*/
 
 printf("\n\n--------------------Obratnaya Matrix A^(-1)---------------------\n\n");
 for(i=0;i<n;i++)
   {
     for(j=0;j<n;j++)
       printf("%20.14e",inverseA[i][j]);
     printf("\n\n");
   }
 
/*---------------------------A*A(-1)=E---------P--------------------------------------------------*/
printf("\n\n----------------------------Proverka-----------------------------------\n\n");
t=0;
  for(i=0;i<n;i++)
    for(j=0;j<n;j++)
    {
      P[i][j]=0;
      for(t=0;t<n;t++)
        {
          P[i][j]+=A[t][i]*inverseA[j][t];
        }
      }
/*-------------------------------------------вывод E-----------------------------------------*/
 for(i=0;i<n;i++)
   {
     for(j=0;j<n;j++)
       printf("%20.14e",P[i][j]);
     printf("\n\n");
   }
   system("pause");
/*--------------------------------------------------------------------------------------*/
 printf("Vihod...");
 
 getch();
 
 
 return 0;
}
//---------------------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2014, 12:01

Операции с матрицами
Здравствуйте, знатоки программирования и любители!! Мне необходимо на Делфи разработать unit-модуль, содержащий процедуры ввода,...

Операции с матрицами
Здравствуйте! Я создал матрицу с одной строкой и 3 столбцами. Как мне посчитать количество элементов и их сумму? MathCad 15 P.S....

Операции с матрицами
Народ выручайте=(( Написать программу, производящую некоторые операции над матрицами произвольной размерности, такие как,...

Операции с матрицами
Здравствуйте! Подскажите пожалуйста, как прибавить нулевую строку и столбец к существующей матрице в Матлабе? Для этого же не надо цикл...

Операции с матрицами
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; struct matrix { const int m=0;n= 0; ...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru