Поиск:

Ответ в темуСоздание новой темы Создание опроса
> решение системы линейных уравнений 
:(
    Опции темы
Danza
Дата 24.12.2007, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.12.2007
Где: Krasnodar

Репутация: нет
Всего: нет



Метод Гаусса на с++:
Код

float det(float [20][20], int);
//___________________________________________________________________
void iskl(float a[20][20], int k, int n) //cyda peredaetsya matrica temp
{
    int i, j;
    float r, b[40];

    r=a[k][k];
    for (j=k; j<n+1; j++) a[k][j]/=r;
    for (i=k+1; i<n; i++)
    {
        r=a[i][k];
        for(j=k; j<n+1; j++) a[i][j]-=a[k][j]*r;
    }
}
//____________________________________________________________________
int _tmain(int argc, _TCHAR* argv[])
{
    int i, j, n, k;
    float a[20][20], d[20][20], b[40], temp[20][20], t, intDet;
    char anyKey;
    //____sozdanie____
    ofstream outfile("matr1.txt");
    cout<<"VVedite razmernost yravneniya: ";
    cin >> n;
    cout<<endl;
    cout<<"Vvedite postro4no matricy:"<<endl;
    for (i=0; i<(n*n+n); i++)
    {
        cin >> t;
        outfile << t <<" ";
    }
    outfile.close();
    cout<<"Poly4ennaya matrica:"<<endl;
    //_____4tinie i pe4at_____
    fstream infile("matr1.txt");
    for (i=0; i<n; i++)        //bilo n+1
    {
    cout<<endl;
    for (j=0; j<n+1; j++)
    {
        infile >> t;
        temp[i][j]=t;
        cout<<t<<" ";
    }
    }
    //_____razbivaem matricy na matrice i vecto
    //matrica
    for (i=0; i<n; i++)
    for (j=0; j<n; j++)
        a[i][j]=temp[i][j];
    //vector
//    for (i=0; i<n; i++) 
//        b[i]=temp[i][n+1];
    //___proveryaem est li reweniya
    intDet=det(a, n);
    if (intDet==0) 
    {
        cout<<"Reweniya net. ";
        goto net;
    }
    else
    {
        cout<<"Sistema rewaema )) YRA ))"<<endl;
        cout<<"det= "<<intDet;
    }
    //____pryamoi xod_______
    cout<<"Treygolnii vid:"<<endl;
    for (i=0; i<n; i++) iskl(temp, i, n);
    for (i=0; i<n; i++)
    {
        cout<<endl;
        for (j=0; j<n+1; j++) cout<<temp[i][j]<<' ';
    }

    //________obratnii xod, t.e. rewenie sistemi
    cout<<"\n";
    for (i=0; i<n+1; i++){b[i]=temp[i][n]; cout<<b[i]<<" ";}
    cout<<"\n"<<"Rewenie SLAY:"<<endl;
    for (i=n; i>-1; i--)
    {
        b[i]/=temp[i][i];
        for (j=i+1; j<n; j++)    b[i]-=b[j]*temp[i][j];
    }
    for (i=0; i<n; i++) cout<<b[i]<<" ";
net:
    cout<<"\nPress anykey to exit.";
    cin>>anyKey;
    return 0;
}
//___________________________________________
float det(float b[20][20], int n)
{
    float x,s;
    int i,j,k;
    for (i=0; i<n-1; i++)
    for (k=i+1; k<n; k++)
    { 
        x=b[k][i]/b[i][i];
        for (j=i; j<n; j++) b[k][j]=b[k][j]-b[i][j]*x; //tyt perepolnenie (((
    }
    s=1;
    for (i=0; i<n; i++) s=s*b[i][i];
    return s;
}

Насколько помню, всё работает.
Можно ещё решать методом Якоби. Но что бы матрица была "решаема" необходимо диагональное преобладание. Могу скинуть код если надо.
PM MAIL ICQ   Вверх
Alleut
Дата 12.3.2008, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 20.12.2007

Репутация: нет
Всего: нет



Объясните, плиз, как решать неоднородные системы итерационным методом Якоби?
В общем виде это записывается так:
Код

 x{k+1}=Cx{k} + d

Как выбирать x{0} (икс нулевое)?
PM MAIL   Вверх
cardinal
Дата 12.3.2008, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Пожалуйста, один топик - один вопрос.
Правила форума: http://forum.vingrad.ru/index.php?act=boardrules


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0642 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.