|
|
|
СЛАУ ГАУССА
|
|||
|---|---|---|---|
|
#18+
// Метод Гаусса для квадратной матрицы #include <stdio.h> #include <conio.h> #include <math.h> main() { clrscr(); float a[100][100], x[50], t; int i, j, k, m, n; do { printf("Задайте количество строк матрицы:"); scanf("%d",&n); m = n + 1; } while(m < 1 || m > 99); //максимальная размерность матриц for (j = 0; j < n; j++) { for (i = 0; i < m; i++) scanf("%f", &a[j] ); printf("\n"); } printf("Исходная матрица\n"); for (j = 0; j < n; j++) { for (i = 0; i < m; i++) { printf("%6.2f\t", a[j]); } printf("\n"); x[j] = 0; } for (j = 0; j < n; j++) if (a[j] == 0) { k = j; while ((a[k+1][j] == 0) && (k < n)); { k++; } if (a[k+1][j] != 0) { for (i = 0; i < m; i++) { t = a[j]; a[j] = a[k+1]; a[k+1] = t; } } else { printf("СЛАУ имеет множество решений"); } } for (k = 0; k < n - 1; k++) for (j = k + 1; j < n; j++) { if (a[k][k] !=0) { t = a[j][k] / a[k][k]; for (i = 0; i < n + 1; i++) { a[j] = a[k] * t - a[j]; } } else { printf("СЛАУ не имеет решений"); } } printf("\nМатрица приведенная к треугольному виду:\n\n"); for (j = 0; j < n; j++) { for (i = 0; i < n + 1; i++) { printf("%6.2f\t", a[j]); } printf("\n"); } for (j = n - 1 ; j >= 0; j--) { t = a[j][n]; for (i = j + 1; i < n; i++) { t= t - a[j] * x; } x[j] = t / a[j][j]; } printf("\nКорни СЛАУ:\n\n"); for (i = 0; i < n; i++) printf("x%d = %6.2f\n", i, x); getch(); } Помогите исправить проверку на отсутствие и множество решений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2007, 22:25 |
|
||
|
СЛАУ ГАУССА
|
|||
|---|---|---|---|
|
#18+
В детали не вдвался, но числа с плавающей на равенство оператором == -занятие неблагодарное. Неужто не учили, как сравнивать числа с плавающей точкой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2007, 00:06 |
|
||
|
СЛАУ ГАУССА
|
|||
|---|---|---|---|
|
#18+
Написано непрофессионально с точки зрения программной реализации и неграмотно с математической точки зрения: 1.Матрица фактически фиксированного размера - так библиотечные функции не пишутся. 2.Выбора ведущего элемента нет - из-за этого вполне нормальная матрица данным алгоритмом может быть признана вырожденной 3.Критерий определения вырожденности матрицы путём сравнения очередного диагонального элемента и нуля очень наивен - для плохообусловленных, но не вырожденных матриц на любом компиляторе с поддержкой IEEE стандарта результаты будут выглядеть довольно забавно - часть неизвестных будет числами, часть - NaN'ами. Выводы: 1.автор не знаком с основами численных методов линейной алгебры. 2.имеет странное представление о том как пишется математический софт. Учиться, учиться, учиться... как сказал тот, чей день рожденья будет в воскресенье ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2007, 00:57 |
|
||
|
СЛАУ ГАУССА
|
|||
|---|---|---|---|
|
#18+
Помогите исправить проверку на отсутствие и множество решений С первого раза не заметил... Видите ли, собственно говоря с точки зрения данного алгоритма это вшистко едно. Гаусс либо находит решение, либо нет (то, что Вы называете "СЛАУ имеет множество решений" для данного алгоритма есть тупиковая ситуация и в любой промышленной библиотеке он просто абортируется быдав сообщение о вырожденности матрицы). Дело в том, что определять вырожденность матрицы численно... ну как бы не совсем корректно. Т.е. матрица м.б. ну очень-очень плохо обусловлена, но не вырожденна. Т.е. решение то теоретически существует, но на любом компе с конечной разрядностью (а других то и нет), будут лезть перепонения как грибы после дождя. Так что я бы не советовал заниматься проверкой единственности и существования решения. Если уж очень надо - считайте собственные числа и смотрите сколько из них "нули", предварительно определившись что такое для Вас есть "нуль". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2007, 01:16 |
|
||
|
СЛАУ ГАУССА
|
|||
|---|---|---|---|
|
#18+
Вы все такие вумные, а как помочь так никого и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2007, 07:48 |
|
||
|
СЛАУ ГАУССА
|
|||
|---|---|---|---|
|
#18+
http://algolist.manual.ru/maths/linalg/index.php ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2007, 06:58 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=57&tid=2029000]: |
0ms |
get settings: |
5ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 375ms |

| 0 / 0 |
