Za duża macierz ?
Ostatnio zmodyfikowano 2015-04-28 20:59
blazej6 Temat założony przez niniejszego użytkownika |
Za duża macierz ? » 2015-04-27 22:58:12 Witam, uzywam kompilatora Visual studio 2010 #include <iostream> #include <fstream> #include <cmath> using namespace std; int main() { double lambda = 0.75; double c = 3000000; double cb = 3996200; double Gb = 0.00125; double Tb = 37; double k = 4995.25; double Qmet = 245; double L = 0.035; const int n = 100; const int m = 750; double Qw; double WS; double a, h; double tw, tz; double qw, qz; Qw = k * Tb + Qmet; a = lambda / c; h = L / n; long double delT_ = 0.01; long double delT; delT =( h * h ) /( 2 * a ); cout << "Obliczona delta t wynosi: " << delT << endl; if( delT_ <= delT ) { cout << "Warunek stabilnosci zostal spelniony dla " << n << " wezlow " << endl; cout << endl; cout << endl; cout << "Podaj temperature wewnetrzna Tw " << endl; cin >> tw; cout << "Podaj temperature zewnetrzna Tz " << endl; cin >> tz; long double Q[ n ][ m ]; int i, f; Q[ 0 ][ 0 ] = 0; Q[ n - 1 ][ 0 ] =( 500 * h ) / lambda; for( i = 0; i <= n - 2; i++ ) Q[ i ][ 0 ] = 0; for( f = 1; f <= m - 1; f++ ) { Q[ 0 ][ f ] = 0; Q[ n - 1 ][ f ] =( Qw * delT ) / c; for( i = 1; i <= n - 1; i++ ) { Q[ 0 ][ f ] = 0; Q[ n - 1 ][ f ] =( 500 * h ) / lambda; Q[ i ][ f ] =( Qw * delT ) / c; } } long double const1 = 1 -(( 2 * a * delT ) /( h * h ) ) -(( k * delT ) / c ); long double const2 =( a * delT ) /( h * h ); long double T[ n ][ m ]; int I, F; T[ 0 ][ 0 ] = tw; T[ n - 1 ][ 0 ] = tz; for( I = 0; I < n - 1; I++ ) { T[ I ][ 0 ] = 36.6; } for( F = 1; F <= m - 1; F++ ) { T[ 0 ][ F ] = tw; T[ I ][ 0 ] = 36.6; T[ n - 1 ][ F ] = tz + Q[ n - 1 ][ 0 ]; for( I = 1; I <= n - 2; I++ ) { T[ I ][ F ] =( T[ I ][ F - 1 ] * const1 ) +( T[ I - 1 ][ F - 1 ] * const2 ) +( T[ I + 1 ][ F - 1 ] * const2 ) + Q[ I ][ F - 1 ]; } } fstream plik1; plik1.setf( ios::fixed, ios::floatfield ); plik1.precision( 3 ); plik1.open( "temperatura.txt", ios::trunc | ios::out ); if( plik1.good() == true ) { cout << "Uzyskano dostep do pliku 'Temperatura'." << endl; plik1 << "Temperatura w danym wezle i danej chwili czasu w [C]:" << endl << endl; for( F = 0; F <= m - 1; F++ ) { plik1 << "F=" << F << endl; for( I = 0; I <= n - 1; I++ ) { plik1 << T[ I ][ F ] << endl; } plik1 << endl; } } else cout << "Dostep do pliku zostal zabroniony!" << endl; } else cout << "Warunek stabilnosci nie jest spelniony\n"; system( "pause" ); return 0; }
i przy wpisaniu np m=750 program sie sypie. Co może być powodem, jak sobie poradzić ? |
|
Quirinnos |
» 2015-04-28 00:15:55 Stos się przeładował. Alokuj tę pamięć dynamicznie. |
|
DejaVu |
» 2015-04-28 01:05:06 Uściślając terminologię: nastąpiło przepełnienie stosu (a nie jego przeładowanie). No ale przyczyna została właściwie wskazana jak i sposób rozwiązania problemu ;) |
|
blazej6 Temat założony przez niniejszego użytkownika |
» 2015-04-28 08:40:38 a macie jakiś szybki sposób na to ? z dynamicznymi nigdy mi nie szło ;/ |
|
maly |
» 2015-04-28 08:58:23 std::vector < std::vector < long double > > Q( n, m );
|
|
blazej6 Temat założony przez niniejszego użytkownika |
» 2015-04-28 09:07:03 wrzuciłem to zamiast tego co zahashowałes ale nie hula to ;/ |
|
maly |
» 2015-04-28 09:16:03 Bo to nie hulahop żeby hulało:) Więc jaki konkretnie problem? |
|
blazej6 Temat założony przez niniejszego użytkownika |
» 2015-04-28 09:20:09 rozumiem zę to ->long double Q[ n ][ m ]; mam zamienić na to-> std::vector < std::vector < long double > > Q( n, m ); i tylko tyle ? Jeśli tak vector jest niezdefiniowany i "is not a member std" |
|
« 1 » 2 |