Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Aleksandr1234
2 / 0 / 0
Регистрация: 08.05.2013
Сообщений: 5
1

Решение системы уравнений методом обратной матрицы

10.05.2013, 04:07. Просмотров 1230. Ответов 2
Метки нет (Все метки)

Всем доброго времени суток.Прошу помоч с заданием написать программу в С, которая находит решения системы из 4 уравнений с 4-мя неизвестными методом обратной матрицы, если кто-то где-то сталкивался с этим, скиньте пожалуйста, для MSVS 2010
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
typedef struct matrix
 {
     double mat[N][N];
     uint A, B;
 } matrix;
 matrix minor( matrix M, uint q, uint p )
 {
     uint i, j;
     uint l;
     double *stolb, *stroka;
     if( /*(M.A != M.B) ||*/ (M.A <= 2) || (M.B <= 2) )
         throw error("невозможно посчитать минор");
     stolb = (double*)malloc(sizeof(double) * M.A);
     stroka = (double*)malloc(sizeof(double) * M.B);
     for( j = 0; j < M.A; j++ )
         stolb[j] = 0;
     for( i = 0; i < M.B; i++ )
         stroka = 0;
     if( NUM == 1 )
     {
         q--;
         p--;
     }
     
     for( i = q; i < M.A-1; i++ )
         for( j = 0; j < M.B; j++ )
             M.mat[j] = M.mat[i+1][j];
 
     for( j = p; j < M.B-1; j++ )
         for( i = 0; i < M.A; i++ )
             M.mat[j] = M.mat[j+1];
 
     free(stolb);
     free(stroka);
 
     M.A--;
     M.B--;
     return M;
 }
 double det( matrix M )
 {
     uint i;
     double s;
     if( M.A != M.B )
     {
         M.err = 1;
         throw error("Матрица не квадратная. Невозможно вычислить det");
         return 0;
     }
     if( (M.A == 1) || (M.B == 1) )
     {
         M.err = 1;
         throw error("Неправильная размерность матрицы");
         return 0;
     }
     if( (M.A == 2) && (M.B == 2) )
         return (M.mat[0][0]*M.mat[1][1] - M.mat[1][0]*M.mat[0][1]);
     s = 0;
     for( i = 0; i < M.B; i++ )
         s += pow(-1, i) * M.mat[0] * det(minor(M, 0, i));
     return s;
 }
 
 matrix transp( matrix M )
 {
     matrix A;
     uint i, j;
     A.A = M.B;
     A.B = M.A;
     for( i = 0; i < M.A; i++ )
         for( j = 0; j < M.B; j++ )
             A.mat[j] = M.mat[j];
     return A;
 }
 matrix obr( matrix M )
 {
     matrix A;
     uint i, j;
     double D;
 
     D = det(M);
     if( D == 0 )
     {
         A.err = 1;
         throw error("det = 0, построение обратной матрицы невозможно");
         return A;
     }
         A.err = 0;
     A.A = M.A;
     A.B = M.B;
     for( i = 0; i < A.A; i++ )
         for( j = 0; j < A.B; j++ )
             A.mat[j] = pow(-1, i+j) * det(minor(M, i, j));
     A = transp(A);
     for( i = 0; i < A.A; i++ )
         for( j = 0; j < A.B; j++ )
             A.mat[j] /= D;
 
     return A;
     
 }
 matrix mult( matrix A, matrix B )
 {
     matrix C;
     uint i, j, v;
     C.err = 0;
     if( A.B != B.A )
     {
         C.err = 1;
         throw error("Умножение невозможно. Количество строк в первой не равно количеству столбцов во второй.");
         return C;
     }
     C.A  = A.A;
     C.B = B.B;
     C = init(C);
     for( i = 0; i < A.A; i++ )
         for( j = 0; j < B.B; j++ )
             for( v = 0; v < A.B; v++ )
                 C.mat[j] += A.mat[v] * B.mat[v][j];
     return C;
 }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2013, 04:07
Ответы с готовыми решениями:

Решение системы уравнений методом Гаусса
Не компилируется,не могу понять в чем ошибка,помогите разобраться #include &lt;stdio.h&gt; #include...

Решение системы уравнений методом Зейделя
Привет. У меня есть код программы, которая решает систему. Можете посмотреть, или это метод...

Решение системы линейных уравнений методом Гаусса
Здравствуйте! Ребят, помогите пожалуйста с программой. Нужно доработать несколько замечаний: 1) В...

Решение системы линейных уравнений методом Гаусса
Помогите,пожалуйста,написать программу. При выполнении задания необходимо ввести в программу...

Решение системы несовместных линейных уравнений методом наименьших квадратов
помогите пожалуйста написать программу на СИ, тема &quot;Решение системы несовместных линейных уравнений...

2
zss
Модератор
Эксперт С++
7920 / 7110 / 4444
Регистрация: 18.12.2011
Сообщений: 18,785
Завершенные тесты: 1
10.05.2013, 10:43 2
Так Вы почти все написали.
Решаем уравнение Ax=b:

x=obr(A)*b

1. Вычисляем обраную к А матрицу
2. умножаем результат на вектор b, получаем вектор x.
0
Aleksandr1234
2 / 0 / 0
Регистрация: 08.05.2013
Сообщений: 5
13.05.2013, 02:40  [ТС] 3
Мне бы чтоб в MSVС++ компелировалось.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2013, 02:40

Решение системы двух уравнений с двумя неизвестными методом Крамера
нужно составить алгоритм на языке СИ, который бы решил систему двух уравнении с двумя неизвестными

Решение системы несовместных линейных уравнений методом наименьших квадратов (Basic -> C)
Решение системы несовместных линейных уравнений методом наименьших квадратов В головной программе...

Решение избыточной системы нелинейных и трансцендентных уравнений обобщенным методом Ньютона
нужна помощь в написании программы на СИ, тема &quot;Решение избыточной системы нелинейных и...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru