|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.04.2014, 23:32 | #1 |
Форумчанин
Регистрация: 12.03.2014
Сообщений: 217
|
PascalABC.Net Метод итераций для решения систем линейных уравнений
Задания
I. Напишите программу решения системы линейных уравнений методом итераций с наперед заданной точностью. II. Приведите примеры таких систем с преобладающими диагональными элементами, после приведения которых к итерационному виду, при их решении методом итераций используется первая метрика, вторая метрика, систем, к которым метод итераций не применим. Решите эти системы линейных уравнений методом итераций с наперед заданной точностью и осуществите проверку найденного решения. Обоснуйте правильность полученных результатов. Последний раз редактировалось now2; 15.04.2014 в 23:36. |
15.04.2014, 23:33 | #2 |
Форумчанин
Регистрация: 12.03.2014
Сообщений: 217
|
если честно то вот это задание в отличии от метода Жордана - Гаусса я вообще не знаю как делать (((((
|
15.04.2014, 23:36 | #3 |
Участник клуба
Регистрация: 05.11.2013
Сообщений: 1,601
|
ничего не отвечу, пока не вобьете в яндексе
Метод итераций для решения слау паскаль |
15.04.2014, 23:37 | #4 |
Форумчанин
Регистрация: 12.03.2014
Сообщений: 217
|
|
15.04.2014, 23:41 | #5 |
Форумчанин
Регистрация: 12.03.2014
Сообщений: 217
|
еще условие : Цель работы. Разработка компьютерной программы для решения
систем линейных уравнений методом Жордана-Гаусса. |
15.04.2014, 23:45 | #6 |
Форумчанин
Регистрация: 12.03.2014
Сообщений: 217
|
Код C++
1 2 3 4 5 6 7 8 9 10 11 //Сам метод Гаусса - матрица приводится к виду, когда под главной диаганалью нули for (k=0 ; k < n ; k++) { if(usr_vedelm->isChecked()) vedElem(A,k); //если выбрана опция вызова процедуры выбора ведущего элемента for ( i = k+1 ; i < n; i++ ) { buf = A[i][k]/A[k][k]; for ( j = k ; j < n+1 ; j++) A[i][j]=A[i][j]-buf*A[k][j]; } } Код C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 //Ищем решение снизу вверх прямой подстановкой void MyWidget::findSolution(double **A, double **B) { int n = usr_dim -> text().toInt(); int i,j; double buf=0.0; double* X = new double [n]; X[n-1]=A[n-1][n]/A[n-1][n-1]; for ( i = n-2; i >= 0; i-- ) { buf =0; for ( j = i+1 ; j < n ; j++) buf=buf+A[i][j]*X[j]; X[i]=1.0/A[i][i]*(A[i][n]-buf); } newValue(X,1); nevyazka(B,X); //ищем невязку } Процедура выбора ведущего (главного) элемента. Передается указатель на матрицу и номер итерации Код C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 void MyWidget::vedElem(double **A, int k) { int n = usr_dim->text().toInt(); int kmax=k; double det = 1.0; double Amod; double Amax=fabs(A[k][k]); if (k<n) { for (int i = k+1 ; i < n ; i++) { Amod=fabs(A[i][k]); if (Amod > Amax) { Amax=Amod; kmax=i; } } } if (fabs(Amax)<=DBL_EPSILON) //DBL_EPSILON - машинный ноль, для типа double { det=0.0; crash(); return; } if (kmax!=k) { for (int j = k; j < n+1 ; j++) { double buf=A[k][j]; A[k][j]=A[kmax][j]; A[kmax][j]=buf; |
15.04.2014, 23:45 | #7 |
Форумчанин
Регистрация: 12.03.2014
Сообщений: 217
|
только вот на С++
|
15.04.2014, 23:47 | #8 |
Форумчанин
Регистрация: 12.03.2014
Сообщений: 217
|
или вот , но вообще ничего не понятно
uses crt; program solvgj2; const maxr = 8; maxc = 8; type ary = array[1..maxr] of real; arys = array[1..maxc] of real; ary2s = array[1..maxr,1..maxc] of real; ary2 = ary2s; var y : ary; coef,yy : arys; a,b : ary2s; n,m,i,j : integer; first, error : boolean; external procedure cls; procedure get_data(var a: ary2s; var y: ary; var n,m: integer); var i,j : integer; begin writeln; repeat write('How many unknowns? '); readln(m); if first then first:=false else cls; until m<maxc; if m>1 then begin repeat write('How many equations? '); readln(n) until n>=m; for i:=1 to n do begin writeln('Equation',i:3); for j:=1 to m do begin write(j:3,':'); read(a[i,j]) end; write(',C:'); readln(y[i]) { clear line } end; { i-loop } writeln; for i:=1 to n do begin for j:=1 to m do write(a[i,j]:7:4,' '); writeln(':',y[i]:7:4) end; writeln end { if n>1 } end; { procedure get_data } procedure write_data; var i : integer; begin for i:=1 to m do write(coef[i]:9:5); writeln end; { write_data } {external procedure square ( y : ary; var a : ary2s; var g : arys; nrow,ncol : integer);} begin { MAIN program } first:=true; cls; writeln; writeln('Best fit to simultaneous equations'); writeln('By Gauss-Jordan'); repeat get_data(a,y,n,m); if m>1 then begin square(a,y,b,yy,n,m); gaussj(b,yy,coef,m,error); if not error then write_data end until m<2 end. |
15.04.2014, 23:49 | #9 | |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Цитата:
|
|
15.04.2014, 23:50 | #10 |
Участник клуба
Регистрация: 05.11.2013
Сообщений: 1,601
|
Метод простых итераций вроде как называется. Ищите по этим ключевым словам.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
написать програму для решения системы линейных алгебраических уравнений | Горянський Павло | C++ Builder | 11 | 16.11.2014 01:54 |
Метод итераций для систем | serhan | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 29.11.2011 18:20 |
Метод Холесского (Краута) для решения систем линейных уравнений (скрин с алгоритмом вложен)) | Bogdand | Помощь студентам | 0 | 24.06.2011 07:54 |
Курсовой проект на тему решение систем линейных уравнений методом посл.итераций | Ericnex | Помощь студентам | 1 | 11.05.2010 15:58 |
метод прогонки решения линейных уравнений | Laplas | Общие вопросы C/C++ | 4 | 03.10.2009 12:13 |