Статья опубликована в рамках: XXXIV Международной научно-практической конференции «Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ» (Россия, г. Новосибирск, 04 декабря 2017 г.)
Наука: Информационные технологии
Скачать книгу(-и): Сборник статей конференции
дипломов
РАЗРАБОТКА АЛГОРИТМА ДЛЯ РЕШЕНИЯ ЭКОНОМИЧЕСКИХ ЗАДАЧ МЕТОДОМ ГАУССА НА ЯЗЫКЕ С++
Наиболее распространенным методом для решения экономических задач является метод Гаусса. Сущность этого метода состоит в том, что посредством последовательных исключений неизвестных данная система превращается в ступенчатую систему, равносильную данной системе. [2] На практике при решении системы линейных уравнений методом Гаусса удобнее приводить к ступенчатому виду не саму систему уравнений, а расширенную матрицу этой системы, выполняя элементарные преобразования над ее строками.
Данная работа по разработке алгоритма носит планомерный характер, преимущественно включает в себя элементы разработки. Для проверки работоспособности программы были обозначены входные и выходные данные.
Метод Гаусса включает в себя 2 стадии: последовательное исключение и обратную подстановку. Используя данный способ, нужно решить расширенную матрицу системы. Сначала происходит последовательный ввод данных: R (размерность системы), сама система - матрица коэффициентов – A[i][j], вектор свободных коэффициентов – B[i] (Рис. 1). Далее матрица А приводится к диагональному виду. Организуется поиск max по модулю элемента в g-м столбце [1]. Происходит перемена мест строк g и d (Рис. 2, 3). Если последний элемент диагонали равен 0 и последний коэффициент вектора свободных членов равен 0, то система имеет бесконечное множество решений. Если последний коэффициент вектора свободных членов не равен 0, система не имеет решений.
Рисунок 1. Блок-схема (часть 1)
Рисунок 2. Блок-схема (часть 2)
Рисунок 3. Блок-схема (часть 3)
Итоговый листинг программы выглядит следующим образом:
using namespace std;
int GAUSS ( double ** matrica_A, int R, double *vektor_B, double *X )
{ int i, j, g, d; double z, D, max, c; double **A, *B; A=new double * [ R ];
for (i=0; i<R; i++) A [ i ]=new double [ R ]; B=new double [ R ];
for ( i =0; i<R; i++) for ( j =0; j<R; j++) A [ i ] [ j ]=matrica_A [ i ] [ j ];
for ( i =0; i<R; i++) B [ i ]=vektor_B [ i ];
for ( g=0;g<R; g++) { max=fabs ( A [ g ] [ g ] ); d=g;
for (i=g+1; g<R; i++) if ( fabs ( A [ i ] [ g ] )>max) { max=fabs ( A [ i ] [ g ] ); d= i; }
for ( j =0; j<R; j++) { z=A [ g ] [ j ]; A [ g ] [ j ]=A [ d ] [ j ]; A [ d ] [ j ]= z; }
z=B [ g ]; B [ g ]=B [ d ]; B [ d ]= z;
for ( i=g+1; i<R; i++) { for (D=A [ i ] [ g ] / A [ g ] [ g ], j=g; j<R; j++)
A [ i ] [ j ]-=D*A [ g ] [ j ]; B [ i ]-=D*B [ g ]; } }
if ( A [ R-1 ] [ R-1]==0) if ( B [ R-1]==0) return -1; else return -2; else
{ for ( i=R-1; i >=0; R --) { for ( c =0, j= i +1; j<R; j++) c+=A [ i ] [ j ] * X [ j ];
X [ i ]=( B [ i ]- c ) / A [ i ] [ i ]; } return 0; }}
int main ( )
{ int res, i, j,r; double **a, *b, *x; cout<<"\nVvedite razmernost' matritsy, R=";
cin>>r; a=new double * [r ];
for ( i =0; i<r; i++) a [ i ]=new double [r ]; b=new double [r ]; x=new double [r ];
cout<<"\nVvedite matritsu A"<<endl;
for ( i =0; i<r; i++) for ( j =0; j<r; j++) cin>>a [ i ] [ j ];
cout<<"\nVvedite vektor B"<<endl;
for ( i =0; i<r; i++) cin>>b [ i ]; res=GAUSS( a,r, b, x );
if ( res ==0) { cout<<" Resheniy, X "<<endl; for ( i =0; i<r; i++) cout<<x [ i ]<<" \t ";
cout<<endl; } else if ( res ==-1)
cout<<"Sistema imeyet beskonechnoye mnozhestvo resheniy\n "; else if ( res ==-2)
cout<<"Resheniy net\n "; getch(); return 0;}
Для проверки работоспособности алгоритма, задаем исходные данные:
В результате выполнения программы, видим следующий результат:
Рисунок 5. Результат выполнения программы
Чтобы проверить правильность итоговых значений, можно воспользоваться пакетом MathCAD, реализуя метод Крамера. Как видно из Рис.6, созданный нами алгоритм корректен и более эффективен, чем MathCAD.
Рис. 6. Проверка правильности исчислений в пакете MathCAD
В данной статье был представлен пример решения экономической задачи методом Гаусса. Использованный алгоритм был написан на языке C++.
Список литературы:
- Павловская Т.А. «С/С++. Программирование на языке высокого уровня» – СПб.: Питер, 2015.
- Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов, – М, 2003.
дипломов
Оставить комментарий