Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / СЛАУ ГАУССА / 8 сообщений из 8, страница 1 из 1
20.04.2007, 22:25
    #34477627
serakuz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СЛАУ ГАУССА
// Метод Гаусса для квадратной матрицы
#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();
}

Помогите исправить проверку на отсутствие и множество решений
...
Рейтинг: 0 / 0
21.04.2007, 00:06
    #34477710
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СЛАУ ГАУССА
В детали не вдвался, но числа с плавающей на равенство оператором == -занятие неблагодарное.
Неужто не учили, как сравнивать числа с плавающей точкой?
...
Рейтинг: 0 / 0
21.04.2007, 00:57
    #34477739
mikhail_n
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СЛАУ ГАУССА
Написано непрофессионально с точки зрения программной реализации и неграмотно с математической точки зрения:

1.Матрица фактически фиксированного размера - так библиотечные функции не пишутся.

2.Выбора ведущего элемента нет - из-за этого вполне нормальная матрица данным алгоритмом может быть признана вырожденной

3.Критерий определения вырожденности матрицы путём сравнения очередного диагонального элемента и нуля очень наивен - для плохообусловленных, но не вырожденных матриц на любом компиляторе с поддержкой IEEE стандарта результаты будут выглядеть довольно забавно - часть неизвестных будет числами, часть - NaN'ами.

Выводы:

1.автор не знаком с основами численных методов линейной алгебры.
2.имеет странное представление о том как пишется математический софт.

Учиться, учиться, учиться... как сказал тот, чей день рожденья будет в воскресенье
...
Рейтинг: 0 / 0
21.04.2007, 01:16
    #34477744
mikhail_n
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СЛАУ ГАУССА
Помогите исправить проверку на отсутствие и множество решений

С первого раза не заметил...

Видите ли, собственно говоря с точки зрения данного алгоритма это вшистко едно. Гаусс либо находит решение, либо нет (то, что Вы называете "СЛАУ имеет множество решений" для данного алгоритма есть тупиковая ситуация и в любой промышленной библиотеке он просто абортируется быдав сообщение о вырожденности матрицы). Дело в том, что определять вырожденность матрицы численно... ну как бы не совсем корректно. Т.е. матрица м.б. ну очень-очень плохо обусловлена, но не вырожденна. Т.е. решение то теоретически существует, но на любом компе с конечной разрядностью (а других то и нет), будут лезть перепонения как грибы после дождя. Так что я бы не советовал заниматься проверкой единственности и существования решения. Если уж очень надо - считайте собственные числа и смотрите сколько из них "нули", предварительно определившись что такое для Вас есть "нуль".
...
Рейтинг: 0 / 0
21.04.2007, 07:48
    #34477812
serakuz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СЛАУ ГАУССА
Вы все такие вумные, а как помочь так никого и нет.
...
Рейтинг: 0 / 0
21.04.2007, 18:55
    #34478164
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СЛАУ ГАУССА
Помочь выбрать стену?
...
Рейтинг: 0 / 0
22.04.2007, 06:58
    #34478436
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СЛАУ ГАУССА
http://algolist.manual.ru/maths/linalg/index.php
...
Рейтинг: 0 / 0
22.04.2007, 07:08
    #34478439
serakuz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СЛАУ ГАУССА
То есть эта прога в принципе тупиковая? и ничего здесь не исправить?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / СЛАУ ГАУССА / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]