Уравнивани реакции.проблема с чтением данных, С++ |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Уравнивани реакции.проблема с чтением данных, С++ |
volvo |
Сообщение
#21
|
Гость |
Скорее всего, твоя система имеет не единственное решение (или не имеет решения вообще), в таком случае надо смотреть в сторону вот этого метода, например: Поиск фундаментальной системы решений с минимизацией невязки
|
Tribunal |
Сообщение
#22
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
а если система имеет решение, но при этом нужно взять какую-то неизвестную свободной?
то есть установить значение,в зависимости от которого всё считается... -------------------- irreparabilium felix olivio rerum
|
Tribunal |
Сообщение
#23
|
Бывалый Группа: Пользователи Сообщений: 233 Пол: Женский Реальное имя: Dasha Репутация: 0 |
извините....пожалуйста! помогите сделать,чтобы этот код работал с моими матрицами...
у меня никак не получается=(( заранее спасибо! Код static const int maxsvditerations = 30; double extsign(double a, double b); double mymax(double a, double b); double pythag(double a, double b); void svdsolvefundamental([b]ap::real_2d_array a[/b], int m, int n, [b] ap::real_2d_array& solutions[/b], int& dimension) { int nm; int minmn; ////........ ap::real_1d_array rv1; ap::real_1d_array w; ap::real_2d_array v; bool flag; double epsilon; rv1.setbounds(1, n); w.setbounds(1, n); v.setbounds(1, n, 1, n); if( m<n ) { minmn = m; } else { minmn = n; } g = 0.0; vscale = 0.0; anorm = 0.0; for(i = 1; i <= n; i++) { l = i+1; rv1(i) = vscale*g; g = 0; s = 0; vscale = 0; if( i<=m ) { for(k = i; k <= m; k++) { vscale = vscale+fabs(a(k,i)); } /// ..... epsilon = epsilon*n*ap::machineepsilon; dimension = 0; for(i = 1; i <= n; i++) { if( fabs(w(i))<=epsilon ) { dimension = dimension+1; } } solutions.setbounds(1, n, 0, dimension); for(i = 1; i <= n; i++) { solutions(i,0) = 0; for(j = 1; j <= m; j++) { solutions(i,0) = solutions(i,0)+a(j,i)*a(j,n+1); } } k = 1; for(j = 1; j <= n; j++) { if( fabs(w(j))>epsilon ) { for(i = 1; i <= n; i++) { v(i,j) = v(i,j)/w(j); } } else { for(i = 1; i <= n; i++) { solutions(i,k) = v(i,j); } k = k+1; } } for(i = 1; i <= n; i++) { a(1,i) = 0; for(j = 1; j <= n; j++) { if( fabs(w(j))>epsilon ) { a(1,i) = a(1,i)+v(i,j)*solutions(j,0); } } } for(i = 1; i <= n; i++) { solutions(i,0) = a(1,i); } } вот файлы этого алгоритма ap.rar ( 4.59 килобайт ) Кол-во скачиваний: 331 svdsolveunit.rar ( 3.48 килобайт ) Кол-во скачиваний: 321 -------------------- irreparabilium felix olivio rerum
|
volvo |
Сообщение
#24
|
Гость |
По-моему, было бы проще добавить в код пару строк, конвертирующих массив index в объект типа ap::real_2d_array. Если брать за основу то, что я привел в посте №13, то достаточно добавить после заполнения StringGrid-а вот это:
ap::real_2d_array arr; , и в мемо будет записано частное решение системы. Ну, и базис выводится аналогично... Только все-же что-то с системой не так... Получается нулевое решение, хотя тестовые примеры показывают работоспособность svdsolvefundamental... |
-Tribunal- |
Сообщение
#25
|
Гость |
вот например для уравнивания
KMnO_4+KNO_2+H_2SO_4-->MnSO_4+KNO_3+K_2SO_4+H_2O при нахождении коэффициентов из линейных уравнений, нужно положить одному из коэфф-тов значение. может использовать ненулевую правую часть? не знаю что делать=(( p.s. ответить со своего аккаунта не могу.ошибка в форуме. |
Текстовая версия | 11.01.2025 15:53 |