Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Решение систем линейных уравнений методом Гаусса






    САНКТ-ПЕТЕРБУРГСКИЙ

    КОЛЛЕДЖ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

    Лабораторные работы по численным методам

    (Вариант № 9)

     

     

    Выполнила

    студентка группы № 394 СПбКИТ

    Каштанова Анна

    Преподаватель

    Матысик И. А.

     

    Тема Дата Оценка Подпись преподавателя
                 
             
             
      Решение нелинейных уравнений методом деления отрезка пополам        
             
             
             
             
             
             
             

    Лабораторная работа № 1

    Решение систем линейных уравнений методом Гаусса

     

    Постановка задачи:

     

    Дана система линейных уравнений:

    ..........

     

     

     

     

     

     

     

    Данная система называется линейной, потому что она не содержит тригонометрических, логарифмическиx, показательныx функций, и потому что x входят в степень не выше первой.

     

    Необходимо решить систему линейных уравнений методом Гаусса, т. е. привести матрицу коэффициентов к треугольному виду (прямой ход), выразить и найти неизвестные – xn (обратный ход).

     

    Иначе систему можно записать так: Anxn* Xn = Bn

     

    Anxn – двумерный массив

    Xn и Bn – одномерные массивы

     

    I этап – Прямой ход:

     

    Anxn Xn Bn Преобразование к треугольному виду

    A’nxn X’n B'n

     

    II этап – Обратный ход:

     

    A’nn* Xn = B'n

    Xn = B’n / A’nn

     

     

    Исходные данные:

     

     

    Алгоритм решения:

     

    1) Задать N – количество уравнений в системе

     

    2) Задать исходные данные к задаче:

    float A[N][N] = {{..,..,..,.., },

    {..,..,..,.., },

    {..,..,..,.., },

    {..,..,..,.., }};

    float B[N] = {..,..,..,.., };

     

    3) Реализация метода Гаусса:

    Прямой ход:

     

    н. ц. i = 1, n

    н. ц. j = i + 1, n

    h = aji / aii

    н. ц. k = 1, n

    ajk = ajk – h*aik

    к. ц. k

    bj = bj – h*bi

    к. ц. j

    к. ц. i

     

    Обратный ход: Xn = Bn / Ann

     

    н. ц. i = n – 1, 1

    float h = bi

    н. ц. j = i + 1, n

    h = h – xj*aij

    к. ц. j

    xi = h / aii

    к. ц. i

     

    5) Вывод результатов решений (Xn).

     

    6) Проверка результатов.

    Текст программы:

     

    #include< conio.h>

    #include< iostream.h>

    float **A, *B, h, *X, **a, *q;

    int n;

    void main(void)

    {

    int i, j, k;

    clrscr();

    cout< < " Vvod 0 (n=) "; cin> > n; //выводит текущий пример по 0 или задаём

    if(n==0) размер и вводим матрицы

    {

    n=4;

    A=new float *[n]; for(i=0; i< n; i++) A[i]=new float[n];

    B=new float [n];

    X=new float [n]; for(i=0; i< n; i++) X[i]=0;

    a=new float *[n]; for(i=0; i< n; i++) a[i]=new float[n];

    q=new float [n]; for(i=0; i< n; i++) q[i]=0;

    float A1[4][4]={0.81, 0.07, -0.38, 0.21, //исходные данные

    -0.33, 0.41, 0.00, 1.00,

    -0.51, 0.07, 0.91, 0.11,

    0.22, 0.92, -0.11, -0.33};

    float B1[4]={-0.81, -1.21, 1.71, -0.64};

    cout< < " \nVvod A[4][4]: \n\n";

    for(int i=0; i< n; i++)

    {

    for(int j=0; j< n; j++)

    {A[i][j]=A1[i][j]; //копируем в A

    cout< < A[i][j]< < " "; }

    cout< < " \n"; }

    cout< < " \nVvod B[4]: \n\n";

    for(i=0; i< n; i++)

    {B[i]=B1[i];

    cout< < B[i]< < " "; }

    cout< < " \n"; }

    else

    {

    A=new float *[n]; for(i=0; i< n; i++) A[i]=new float[n];

    B=new float [n];

    X=new float [n]; for(i=0; i< n; i++) X[i]=0;

    a=new float *[n]; for(i=0; i< n; i++) a[i]=new float[n];

    q=new float [n]; for(i=0; i< n; i++) q[i]=0;

    cout< < " \nVvod A[" < < n< < " ][" < < n< < " ]: \n\n";

    for(i=0; i< n; i++)

    for(j=0; j< n; j++)

    cin> > A[i][j];

    cout< < " \n";

    cout< < " \nVvod B[" < < n< < " ]: \n\n";

    for(i=0; i< n; i++)

    cin> > B[i]; }

    for(i=0; i< n; i++)

    for(j=0; j< n; j++)

    a[i][j]=A[i][j]; //копирует А в а, чтобы потом сделать проверку

    for(i=0; i< n; i++) //прямой ход - приводим к треугольному виду

    for(j=i+1; j< n; j++)

    {h=A[j][i]/A[i][i];

    for(k=0; k< n; k++)

    A[j][k]=A[j][k]-h*A[i][k];

    B[j]=B[j]-h*B[i]; }

    cout< < " \n";

    for(i=n-1; i> =0; i--) //обратный ход - находим решение

    {h=B[i];

    for(j=i+1; j< n; j++)

    h=h-X[j]*A[i][j];

    X[i]=h/A[i][i]; }

    cout< < " Resenie: \n\n";

    for(i=0; i< n; i++)

    cout< < X[i]< < " ";

    cout< < " \n";

    cout< < " \nProverka: \n\n";

    for(i=0; i< n; i++)

    {for(int j=0; j< n; j++)

    q[i]+=(a[i][j]*X[j]);

    cout< < q[i]< < " "; }

    for(i=0; i< n; i++) delete[] A[i]; delete[] A; //освобождает место в

    delete[] B; оперативной памяти

    delete[] X;

    for(i=0; i< n; i++) delete[] a[i]; delete[] a;

    delete[] q;

    getch();

    }

     

    Скриншот результата программы:

     

     

    Результаты работы программы и проверка:

     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.