Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Метод ГАУСА для решения СЛАУ 
:(
    Опции темы
sos
Дата 13.10.2005, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уважаемые програмеры
я написал програму реализ. метод гауса(реш.системы лин.уравнений)
Оформить в виде функции
Оцените...Что можно сделать лучше,даите пару советов и рекомендаций...
что не рационально+т.п.д.
заранее благодарен...
уравнене
|3 2 1| |s0| |1|
|3 6 1|*|s1|=|3|
|3 2 1| |s2| |4|
p.s.Только начал программировать на C++

Код

//Gauss' Method

#include <iostream.h>
const int n=3;
double a1[n][n+1]={
        1,2,1,0,
        3,6,1,0,
        3,2,1,0
};
double b1[n]={1,3,4};
double s[n];

int x[n+1]={0,1,2,3};//y[i],x[j] Endex' coordinates    
int y[n]={0,1,2};     //          after transformation    




void mmax(double a[][n+1],int n1);//Functin searching max element
void show(double a[][n+1]);          //Function showing transformed matrix    
void coor_ini(int x[],int y[]);      //Initial condition    
void fgaus(double a[][n+1],double v[],double b[]);


void main()
{
    int l;
    fgaus(a1,s,b1);
    for(l=0;l<n;l++)
        cout<<"    "<<s[l];
    cout<<endl;

}



void fgaus(double a[][n+1],double v[],double b[])
{
    register int i,j,k;
    double r[n],d=0,sum;         //r[n]vector_solutin(mixed order)    


    coor_ini(x,y);
    for(i=0;i<n;i++)    //Getting extended matrix
        a[i][n]=b[i];
//Direct course++++++++++++++++++++++++++++++++++++++++++++++++
    for(k=0;k<n-1;k++){
        mmax(a,k);
        show(a);            
        for(i=k+1;i<n;i++){
            d=a[y[i]][x[k]]/a[y[k]][x[k]];
            for(j=k;j<(n+1);j++)
                 a[y[i]][x[j]]=a[y[i]][x[j]]-(d*a[y[k]][x[j]]);
        
        }
        show(a);
    }
//Return course++++++++++++++++++++++++++++++++++++++++++++++++
    r[n-1]=a[y[n-1]][x[n]]/a[y[n-1]][x[n-1]];    
    for(k=n-2;k>-1;k--){
        sum=0;
        for(j=k+1;j<n;j++){
            sum=sum+a[y[k]][x[j]]*r[j];
        }
        r[k]=(a[y[k]][x[n]]-sum)/a[y[k]][x[k]];
    }

//vector_solution[correct order]
    for(i=0;i<n;i++)
        v[x[i]]=r[i];

}

void coor_ini(int x0[],int y0[]){
    int i;
    for (i=0;i<n;i++)
        y0[i]=i;
    for (i=0;i<n+1;i++)
        x0[i]=i;
}

void mmax(double a[][n+1], int n1)//Functin searching max element
{
    register int i,j;
    int    mi,mj,v;
    double max=0;
    for (i=n1;i<n;i++)
        for(j=n1;j<n;j++)
            if(a[y[i]][x[j]]>=max){
                max=a[y[i]][x[j]];
                mi=i;mj=j;
            }
    v=x[n1];
    x[n1]=x[mj];
    x[mj]=v;
    v=y[n1];
    y[n1]=y[mi];
    y[mi]=v;
}

void show(double a[][n+1])            //Function showing transformed matrix    
{
    register int i,j;
    for(i=0;i<n;i++){
        for(j=0;j<n+1;j++)
            cout<<"   "<<a[y[i]][x[j]];
        cout<<"\n";
    }
    cout<<"\n";
}


PM MAIL   Вверх
HaronDDC
Дата 24.10.2005, 00:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я бы посмотрел алгоритм LUP разложения.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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