Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Metoda Gaussa - Seidla

Ostatnio zmodyfikowano 2010-01-03 09:03
Autor Wiadomość
Macius700
Temat założony przez niniejszego użytkownika
Metoda Gaussa - Seidla
» 2010-01-02 11:39:18
C/C++
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 * Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1( TComponent * Owner )
    : TForm( Owner )
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click( TObject * Sender )
{
    int n, iter;
    try {
        n = StrToInt( Edit1->Text );
        iter = StrToInt( Edit2->Text );
    }
    catch( Exception * e )
    {
        Edit1->Text = "";
        Edit2->Text = "";
        return;
    }
    W->ColCount = n;
    W->RowCount = n;
    X0->RowCount = n;
    Z->RowCount = n;
    X->RowCount = n;
    X->ColCount = iter;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click( TObject * Sender )
{
    Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click( TObject * Sender )
{
    int n, iter, i, j, k;
    double ** Ws, * X0s, * Xs, * Zs, suma;
   
    try {
        n = StrToInt( Edit1->Text );
        iter = StrToInt( Edit2->Text );
    }
    catch( Exception * e )
    {
        Edit1->Text = "";
        Edit2->Text = "";
        return;
    }
   
    Ws = new double *[ n ];
    for( i = 0; i < n; i++ )
         Ws[ i ] = new double[ n ];
   
    X0s = new double[ n ];
    Zs = new double[ n ];
    Xs = new double[ n ];
   
    for( i = 0; i < n; i++ ) {
        for( j = 0; j < n; j++ )
             Ws[ i ][ j ] = StrToFloat( W->Cells[ j ][ i ] );
       
        X0s[ i ] = StrToFloat( X0->Cells[ 0 ][ i ] );
        Zs[ i ] = StrToFloat( Z->Cells[ 0 ][ i ] );
    }
   
   
    for( k = 0; k < iter; k++ ) { //wlasciwa metoda iteracji prostej
        for( i = 0; i < n; i++ )
        {
            X0s[ i ] = Xs[ i ];
            suma = 0;
            for( j = 0; j < i; j++ )
                 suma -= Ws[ i ][ j ] * X0s[ j ];
           
            Xs[ i ] = suma + Zs[ i ];
        }
        for( j = i + 1ji < n; j++ ) {
           
            X->Cells[ k ][ i ] = FloatToStr( Xs[ i ] );
        }
       
    }
}
//---------------------------------------------------------------------------



for( k = 0; k < iter; k++ )
for( i = 0; i < n; i++ ) {
    x[ i ] = b[ i ]; // x = D^-1*b -
    for( j = 0; j < i; j++ )
         x[ i ] -= L[ i ][ j ] * x[ j ]; // D^-1*L * x -
   
    for( j = i + 1; j < n; j++ )
         x[ i ] -= U[ i ][ j ] * x[ j ];
   

Dobrze zrobiłem metode Gaussa seidla

zgodnie z materiałem
http://www.algorytm.org/index.php?option=com_content &task=view&id=160&Itemid=28
P-12645
GoldWolf
» 2010-01-03 09:03:26
Używasz środowiska Embarcadero (CodeGear/Borland) mało ludzi tutaj coś takiego używa. Trudno się sprawdza coś takiego.
Zajrzyj na forum - Cyfrowego.
P-12669
« 1 »
  Strona 1 z 1