Поздравляем с Новым Годом!
   
Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: XXXIV Международной научно-практической конференции «Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ» (Россия, г. Новосибирск, 04 декабря 2017 г.)

Наука: Информационные технологии

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Орловская Л.А., Шиганова М.В., Гусев В.В. [и др.] РАЗРАБОТКА АЛГОРИТМА ДЛЯ РЕШЕНИЯ ЭКОНОМИЧЕСКИХ ЗАДАЧ МЕТОДОМ ГАУССА НА ЯЗЫКЕ С++ // Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ: сб. ст. по мат. XXXIV междунар. студ. науч.-практ. конф. № 23(34). URL: https://sibac.info/archive/meghdis/23(34).pdf (дата обращения: 27.12.2024)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

РАЗРАБОТКА АЛГОРИТМА ДЛЯ РЕШЕНИЯ ЭКОНОМИЧЕСКИХ ЗАДАЧ МЕТОДОМ ГАУССА НА ЯЗЫКЕ С++

Орловская Людмила Александровна

студент 3 курса, факультет естественных, математических и компьютерных наук, НГПУ им. К. Минина,

РФ, г. Нижний Новгород

Шиганова Марина Викторовна

студент 3 курса, факультет естественных, математических и компьютерных наук, НГПУ им. К. Минина,

РФ, г. Нижний Новгород

Гусев Вадим Владимирович

студент 3 курса, факультет естественных, математических и компьютерных наук, НГПУ им. К. Минина,

РФ, г. Нижний Новгород

Рахманова Екатерина Владимировна

студент 3 курса, факультет естественных, математических и компьютерных наук, НГПУ им. К. Минина,

РФ, г. Нижний Новгород

Христофоров Роман Петрович

студент 3 курса, факультет естественных, математических и компьютерных наук, НГПУ им. К. Минина,

РФ, г. Нижний Новгород

Наиболее распространенным методом для решения экономических задач является метод Гаусса. Сущность этого метода состоит в том, что посредством последовательных исключений неизвестных данная система превращается в ступенчатую систему, равносильную данной системе. [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++.

 

Список литературы:

  1. Павловская Т.А. «С/С++. Программирование на языке высокого уровня» – СПб.: Питер, 2015.
  2. Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов, – М, 2003.
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий