Форум программистов, компьютерный форум CyberForum.ru

Метод Гаусса - C++

Восстановить пароль Регистрация
 
boones
0 / 0 / 0
Регистрация: 08.03.2013
Сообщений: 3
08.03.2013, 11:08     Метод Гаусса #1
Суть в том что бы СЛАУ методом Гаусс с последовательным исключениям неизвестных.Вот система:
2.7x+3.3y+1.3z=2.1
3.5x-1.7y+2.8z=1.7
4.1x+5.8y-1.7z=0.8
Надо программа что бы задавали массив 3x3 и мы вадили эти числа,2.7,3.3 и так далее,потом выводилась в общем виде,как я сверху написал.И в концу уже сами решения.Очень прошу помощи
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2013, 11:08     Метод Гаусса
Посмотрите здесь:

Метод Гаусса C++
C++ Метод Гаусса
Метод Гаусса C++
C++ метод гаусса
метод Гаусса C++
метод гаусса C++
Метод Гаусса C++
Метод Гаусса C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_XDD_
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 5
08.03.2013, 18:29     Метод Гаусса #2
хм... вроде была где то работа, там 3 методами сделано, Гаусс, треугольный и еще какой то, сейчас поищу по вк кому скидывал...

Добавлено через 23 минуты
тааак, просьба ток сильно не ругать, писал довольно давно работу...

class SystemEquation
//Родительский класс. Система из трех линейных уравнений с тремя неизвестными x , y , z .
//Данные – коэффициенты, решение системы.
//Методы – ввод данных, вывод данных, нахождение решения методом Крамера.

листинг systemEqyation.h

Кликните здесь для просмотра всего текста

Код
#ifndef SYSTEMEQUATION_H
#define SYSTEMEQUATION_H

#include <math.h>
#include <iostream>

//Родительский класс. Система из трех линейных уравнений с тремя неизвестными x , y , z .
//Данные – коэффициенты, решение системы.
//Методы – ввод данных, вывод данных, нахождение решения методом Крамера.

using namespace std;

class SystemEquation
{
protected:
    //коофициенты
    int x,  y,  z;
    int x1, y1, z1;
    int x2, y2, z2;

    //переменные
    double resultX,  resultY,  resultZ;

    //результат каждого уравнения
    double result;
    double result1;
    double result2;

protected:
    double multiplication(const int &_x, const int &_y, const int &_z)
    {
        return _x * _y * _z;
    }

public:
    SystemEquation(const int &_x  = 0, const int &_y  = 0, const int &_z  = 0, const double &_result  = 0,
                   const int &_x1 = 0, const int &_y1 = 0, const int &_z1 = 0, const double &_result1 = 0,
                   const int &_x2 = 0, const int &_y2 = 0, const int &_z2 = 0, const double &_result2 = 0)
    {
        setEquation (_x,   _y,  _z, _result );
        setEquation1(_x1, _y1, _z1, _result1);
        setEquation2(_x2, _y2, _z2, _result2);
    }

    void setEquation(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        x = _x;
        y = _y;
        z = _z;
        result = _result;
    }

    void setEquation1(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        x1 = _x;
        y1 = _y;
        z1 = _z;
        result1 = _result;
    }

    void setEquation2(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        x2 = _x;
        y2 = _y;
        z2 = _z;
        result2 = _result;
    }

    //возврат значений переменных
    double getResultX()
    {
        return resultX;
    }

    double getResultY()
    {
        return resultY;
    }

    double getResultZ()
    {
        return resultZ;
    }

    double calculationDeterminant()
    {
        return (multiplication(x, y1, z2) + multiplication(x2, y, z1) + multiplication(x1, y2, z)) -
                (multiplication(x2, y1, z) + multiplication(z2, x1, y) + multiplication(x, z1, y2));
    }

    double calculationDeterminant(const int &_x , const int &_y , const int &_z ,
                                          const int &_x1, const int &_y1, const int &_z1,
                                          const int &_x2, const int &_y2, const int &_z2)
    {
        return (multiplication(_x, _y1, _z2) + multiplication(_x2, _y, _z1) + multiplication(_x1, _y2, _z)) -
                (multiplication(_x2, _y1, _z) + multiplication(_z2, _x1, _y) + multiplication(_x, _z1, _y2));
    }

    virtual void calculation()
    {
        double determinant = calculationDeterminant();
        if(fabs(determinant) < 0.000001) //при методе Крамера определитель != 0
            return;

        double determinantX = calculationDeterminant(result, y, z,
                                                     result1, y1, z1,
                                                     result2, y2, z2);
        resultX = determinantX / determinant;

        double determinantY = calculationDeterminant(x, result, z,
                                                     x1, result1, z1,
                                                     x2, result2, z2);
        resultY = determinantY / determinant;

        double determinantZ = calculationDeterminant(x, y, result,
                                                     x1, y1, result1,
                                                     x2, y2, result2);
        resultZ = determinantZ / determinant;
    }

    void inputToStream()
    {
        cout << "x: " << resultX << endl;
        cout << "y: " << resultY << endl;
        cout << "z: " << resultZ << endl << endl;
    }

};

#endif // SYSTEMEQUATION_H



далее уже нужный вам класс
листинг systemEquation1.h

Кликните здесь для просмотра всего текста

Код
#ifndef SYSTEMEQUATION1_H
#define SYSTEMEQUATION1_H

#include "systemTriangleEquation.h"


//Методы – нахождение решения
//(делением коэффициентов в каждом уравнении).

class SystemEquation1:public SystemEquation
{
public:
    SystemEquation1(const int &_x  = 0, const int &_y  = 0, const int &_z  = 0, const double &_result  = 0,
                    const int &_x1 = 0, const int &_y1 = 0, const int &_z1 = 0, const double &_result1 = 0,
                    const int &_x2 = 0, const int &_y2 = 0, const int &_z2 = 0, const double &_result2 = 0):
        SystemEquation(_x, _y, _z, _result,
                       _x1, _y1, _z1, _result1,
                       _x2, _y2, _z2, _result2){}

    void setEquation(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        this->SystemEquation::setEquation(_x, _y, _z, _result);
    }

    void setEquation1(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        SystemEquation::setEquation1(_x, _y, _z, _result);
    }

    void setEquation2(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        SystemEquation::setEquation2(_x, _y, _z, _result);
    }


    void calculation()
    {
        double _x = x, _y = y, _z = z;
        double _x1 = x1, _y1 = y1, _z1 = z1;
        double _x2 = x2, _y2 = y2, _z2 = z2;
        double factor;

        //сократим х

        factor = _x1 / _x;
        _x1 = 0;
        _y1 = _y1 - _y * factor;
        _z1 = _z1 - _z * factor;
        result1 = result1  - factor * result;

        factor = _x2 / _x;
        _x2 = 0;
        _y2 = _y2 - _y * factor;
        _z2 = _z2 - factor * _z;
        result2 = result2 - factor * result;


        //сократим у
        factor = _y2 / _y1;

        _y2 = 0;
        _z2 = _z2 - factor * _z1;
        result2 = result2 - factor * result1;


        //привели к треугольному виду

        resultZ = result2 / _z2;
        resultY = (result1 - _z1 * resultZ) / _y1;
        resultX = (result - _y * resultY - _z * resultZ ) / _x;
    }
};

#endif // SYSTEMEQUATION1_H
boones
0 / 0 / 0
Регистрация: 08.03.2013
Сообщений: 3
11.03.2013, 19:01  [ТС]     Метод Гаусса #3
Цитата Сообщение от _XDD_ Посмотреть сообщение
хм... вроде была где то работа, там 3 методами сделано, Гаусс, треугольный и еще какой то, сейчас поищу по вк кому скидывал...

Добавлено через 23 минуты
тааак, просьба ток сильно не ругать, писал довольно давно работу...

class SystemEquation
//Родительский класс. Система из трех линейных уравнений с тремя неизвестными x , y , z .
//Данные – коэффициенты, решение системы.
//Методы – ввод данных, вывод данных, нахождение решения методом Крамера.

листинг systemEqyation.h

Кликните здесь для просмотра всего текста

Код
#ifndef SYSTEMEQUATION_H
#define SYSTEMEQUATION_H

#include <math.h>
#include <iostream>

//Родительский класс. Система из трех линейных уравнений с тремя неизвестными x , y , z .
//Данные – коэффициенты, решение системы.
//Методы – ввод данных, вывод данных, нахождение решения методом Крамера.

using namespace std;

class SystemEquation
{
protected:
    //коофициенты
    int x,  y,  z;
    int x1, y1, z1;
    int x2, y2, z2;

    //переменные
    double resultX,  resultY,  resultZ;

    //результат каждого уравнения
    double result;
    double result1;
    double result2;

protected:
    double multiplication(const int &_x, const int &_y, const int &_z)
    {
        return _x * _y * _z;
    }

public:
    SystemEquation(const int &_x  = 0, const int &_y  = 0, const int &_z  = 0, const double &_result  = 0,
                   const int &_x1 = 0, const int &_y1 = 0, const int &_z1 = 0, const double &_result1 = 0,
                   const int &_x2 = 0, const int &_y2 = 0, const int &_z2 = 0, const double &_result2 = 0)
    {
        setEquation (_x,   _y,  _z, _result );
        setEquation1(_x1, _y1, _z1, _result1);
        setEquation2(_x2, _y2, _z2, _result2);
    }

    void setEquation(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        x = _x;
        y = _y;
        z = _z;
        result = _result;
    }

    void setEquation1(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        x1 = _x;
        y1 = _y;
        z1 = _z;
        result1 = _result;
    }

    void setEquation2(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        x2 = _x;
        y2 = _y;
        z2 = _z;
        result2 = _result;
    }

    //возврат значений переменных
    double getResultX()
    {
        return resultX;
    }

    double getResultY()
    {
        return resultY;
    }

    double getResultZ()
    {
        return resultZ;
    }

    double calculationDeterminant()
    {
        return (multiplication(x, y1, z2) + multiplication(x2, y, z1) + multiplication(x1, y2, z)) -
                (multiplication(x2, y1, z) + multiplication(z2, x1, y) + multiplication(x, z1, y2));
    }

    double calculationDeterminant(const int &_x , const int &_y , const int &_z ,
                                          const int &_x1, const int &_y1, const int &_z1,
                                          const int &_x2, const int &_y2, const int &_z2)
    {
        return (multiplication(_x, _y1, _z2) + multiplication(_x2, _y, _z1) + multiplication(_x1, _y2, _z)) -
                (multiplication(_x2, _y1, _z) + multiplication(_z2, _x1, _y) + multiplication(_x, _z1, _y2));
    }

    virtual void calculation()
    {
        double determinant = calculationDeterminant();
        if(fabs(determinant) < 0.000001) //при методе Крамера определитель != 0
            return;

        double determinantX = calculationDeterminant(result, y, z,
                                                     result1, y1, z1,
                                                     result2, y2, z2);
        resultX = determinantX / determinant;

        double determinantY = calculationDeterminant(x, result, z,
                                                     x1, result1, z1,
                                                     x2, result2, z2);
        resultY = determinantY / determinant;

        double determinantZ = calculationDeterminant(x, y, result,
                                                     x1, y1, result1,
                                                     x2, y2, result2);
        resultZ = determinantZ / determinant;
    }

    void inputToStream()
    {
        cout << "x: " << resultX << endl;
        cout << "y: " << resultY << endl;
        cout << "z: " << resultZ << endl << endl;
    }

};

#endif // SYSTEMEQUATION_H



далее уже нужный вам класс
листинг systemEquation1.h

Кликните здесь для просмотра всего текста

Код
#ifndef SYSTEMEQUATION1_H
#define SYSTEMEQUATION1_H

#include "systemTriangleEquation.h"


//Методы – нахождение решения
//(делением коэффициентов в каждом уравнении).

class SystemEquation1:public SystemEquation
{
public:
    SystemEquation1(const int &_x  = 0, const int &_y  = 0, const int &_z  = 0, const double &_result  = 0,
                    const int &_x1 = 0, const int &_y1 = 0, const int &_z1 = 0, const double &_result1 = 0,
                    const int &_x2 = 0, const int &_y2 = 0, const int &_z2 = 0, const double &_result2 = 0):
        SystemEquation(_x, _y, _z, _result,
                       _x1, _y1, _z1, _result1,
                       _x2, _y2, _z2, _result2){}

    void setEquation(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        this->SystemEquation::setEquation(_x, _y, _z, _result);
    }

    void setEquation1(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        SystemEquation::setEquation1(_x, _y, _z, _result);
    }

    void setEquation2(const int &_x, const int &_y, const int &_z, const double &_result)
    {
        SystemEquation::setEquation2(_x, _y, _z, _result);
    }


    void calculation()
    {
        double _x = x, _y = y, _z = z;
        double _x1 = x1, _y1 = y1, _z1 = z1;
        double _x2 = x2, _y2 = y2, _z2 = z2;
        double factor;

        //сократим х

        factor = _x1 / _x;
        _x1 = 0;
        _y1 = _y1 - _y * factor;
        _z1 = _z1 - _z * factor;
        result1 = result1  - factor * result;

        factor = _x2 / _x;
        _x2 = 0;
        _y2 = _y2 - _y * factor;
        _z2 = _z2 - factor * _z;
        result2 = result2 - factor * result;


        //сократим у
        factor = _y2 / _y1;

        _y2 = 0;
        _z2 = _z2 - factor * _z1;
        result2 = result2 - factor * result1;


        //привели к треугольному виду

        resultZ = result2 / _z2;
        resultY = (result1 - _z1 * resultZ) / _y1;
        resultX = (result - _y * resultY - _z * resultZ ) / _x;
    }
};

#endif // SYSTEMEQUATION1_H

я как понимаю это метод крамера?
Yandex
Объявления
11.03.2013, 19:01     Метод Гаусса
Ответ Создать тему
Опции темы

Текущее время: 15:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru