![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 30.03.2011
Сообщений: 6
|
![]()
подскажите пожалуйста почему программа работает не доконца?
#include <stdlib.h> #include <iostream.h> void put( double **x, size_t n, size_t m ) {size_t i, j; for( i = 0; i < n; i++ ) {for( j = 0; j < m; j++ ) cout << x[i][j] << "\t"; cout << endl;}} double *mul( double **x, double *r, size_t n ) {size_t i, j; double *ret = new double [n]; i = n; while ( i-- ) { double p = .0; j = n; while ( j-- ) p += x[i][j] * r[j]; ret[i] = p;} return ret; } int main( int argv, char *argc[] ) { cout << " ÌÅÒÎÄ ÍÀÉØÂÈÄØÎÃÎ ÑÏÓÑÊÓ ÄËß "<<endl; cout << " ÐÎÇÂ'ßÇÀÍÍß ÑÈÑÒÅÌÈ Ë²Í²ÉÍÈÕ Ð²ÂÍßÍÜ "<<endl; cout << "-------------------------------------------------------------------"<<endl; cout << "ÂÂÅIJÒÜ ÐÎÇ̲РÌÀÒÐÈÖ²: "; size_t n; cin >> n; size_t i, k; double **a = new double *[n]; i = n; while ( i-- ) a[i] = new double [n + 1]; double **x = new double *[2]; i = 2; while ( i-- ) x[i] = new double [n]; double *r = new double [n]; cout << "ÂÂÅIJÒÜ ÌÀÒÐÈÖÞ ÊÎÅÔ²Ö²ªÍÒ²Â:" << endl; for( i = 0; i < n; i++ ) for( k = 0; k < n; k++ ) cin >> a[i][k]; cout << "--------------------------------------------------------------------------------"; cout << "ÂÂÅIJÒÜ Â²ËÜͲ ÅËÅÌÅÍÒÈ: "; for( i = 0; i < n; i++ ) cin >> a[i][n]; cout << "ÂÂÅIJÒÜ ÏÎ×ÀÒÊÎÂÅ ÍÀÁËÈÆÅÍÍß: "; for ( i = 0; i < n; i++ ) cin >> x[0][i]; cout << "ÂÂÅIJÒÜ ÒÎ×ͲÑÒÜ eps: "; double eps; cin >> eps; double mu; do { r = mul( a, x[0], n ); i = n; while ( i-- ) r[i] -= a[i][n]; double *v = mul( a, r, n ); double *g = mul( a, v, n ); double l = 0.; double q = 0.; for( i = 0; i < n; i++ ) { l += r[i] + g[i]; q += g[i] * g[i]; } mu = l / q; for ( i = 0; i < n; i++ ) x[1][i] = x[0][i] - mu * v[i]; delete []g; delete []v; double r_max; r_max = r[0]; if ( r_max < 0 ) r_max = -r_max; for( k = 0; k < n; k++ ) { if (r_max<r[k]) r_max=r[k];} if ( r_max < eps ) break; for( i = 0; i < n; i++ ) { x[0][i] = x[1][i]; x[1][i] = 0; } delete []r; } while( 1 ); cout << "Mu: " << mu << endl; cout << "r:" << endl; for ( i = 0; i < n; i++ ) cout << "\t" << r[i] << endl; cout << endl; cout << "ÍÀÁËÈÆÅÍͲ ÊÎÐÅͲ ÑÈÑÒÅÌÈ:" << endl; for ( i = 0; i < n; i++ ) cout << "\t" << x[0][i] << endl; cout << endl; delete []r; i = 2; while ( i-- ) delete []x[i]; delete []x; i = n; while ( i-- ) delete []a[i]; delete []a; return EXIT_SUCCESS; } |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 15.07.2010
Сообщений: 35
|
![]()
подвисает? не на этом месте while( 1 );?
|
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 30.03.2011
Сообщений: 6
|
![]()
да подвисает!!! а куда нужно поставить while(1) в этом случаи?
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 15.07.2010
Сообщений: 35
|
![]()
возможно, условие выхода из while никогда не срабатывает
|
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 30.03.2011
Сообщений: 6
|
![]()
и как это исправить!?
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 10.06.2010
Сообщений: 239
|
![]()
Ты бы код нормально оформил а то нечитабельно.
Код:
Ну исправить это собственно можно поменяв условие на if (r_max>r[k]) r_max=r[k]; Но только я не уверен что тогда программа будет давать пральныйц ответ, т.к. я с самим алгоритмом не разбирался.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
Последний раз редактировалось KobolD; 30.03.2011 в 09:03. |
![]() |
![]() |
![]() |
#7 |
Новичок
Джуниор
Регистрация: 30.03.2011
Сообщений: 6
|
![]()
а можна как то вот эту сходимость убрать, и место нее вставить количество итераций!?
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 10.06.2010
Сообщений: 239
|
![]()
Ну если ты опишеш принцип работы алгоритма, то можно что нибудь придумать, а то ковыряться в твоей программе не хочется, темболее у тебя там ни отступов ни коментариев нет.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
|
![]() |
![]() |
![]() |
#9 |
Новичок
Джуниор
Регистрация: 30.03.2011
Сообщений: 6
|
![]()
1. Вводим размер матрицы n
2. Вводим матрицу A, Вводим столбец свободных элементов b 3. Вводим начальное приближение вектора x[0] и число итераций. 4. по формуле находим невязку r[i]=A*x[i]-b 5. находим мю[i]=(r[i], AAr[i])/(AAr[i], AAr[i]) где Ar[i]=A*r[i] отсюда AAr[i]=A*Ar[i] 6. и затем находим корни уравнения x[i+1]=x[i]-мю[i]*A*r[i] ну что то вроде этого, но я могу сбросить лучше в электронке, там более понятно написано, да и пример есть!!! |
![]() |
![]() |
![]() |
#10 |
Новичок
Джуниор
Регистрация: 30.03.2011
Сообщений: 6
|
![]()
мне поможет кто то, плиззз!!!
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Конкурс для программистов - Решение целочисленной СЛУ | Zealint | Свободное общение | 1 | 11.02.2011 17:17 |
Решение СЛАУ. Метод простой итерации | Alexander886 | Помощь студентам | 5 | 24.03.2010 18:43 |
Решение СЛАУ (метод простых итераций) | XeN0N | Помощь студентам | 2 | 15.02.2009 21:33 |
Метод градиентного спуска | varvara16 | Мультимедиа в Delphi | 0 | 25.10.2008 19:38 |
Решение СЛУ методом Гаусса-Джордана | Жизнь | Помощь студентам | 2 | 05.10.2008 16:23 |