|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.02.2010, 18:05 | #1 |
Новичок
Джуниор
Регистрация: 05.02.2010
Сообщений: 2
|
проверить на баги
Задали лабу по вычислительной математике, сделал, как мог, но чувствую есть косяк в переборе итераций, гляньте
Program ITERATION; uses crt; const n = 9; const eps = 0.0001; var k,s : Real; a : array [1..4,1..4] of Real; c : array [1..4,1..4] of Real; b : array [1..4] of Real; d : array [1..4] of Real; x : array [1..4] of Real; max : array [1..10000] of Real; i : Integer; j : Integer; z : Integer; normc,normb: Real; tempc : array [1..4] of Real; begin clrscr; a[1,1] := (0.95 + 0.1*n)/10; a[1,2] := (0.26 + 0.1*n)/10; a[1,3] := (-0.17 + 0.1*n)/10; a[1,4] := (0.27 + 0.1*n)/10; a[2,1] := (-0.15 + 0.1*n)/10; a[2,2] := (1.26 + 0.1*n)/10; a[2,3] := (0.36 + 0.1*n)/10; a[2,4] := (0.42 + 0.1*n)/10; a[3,1] := (0.26 + 0.1*n)/10; a[3,2] := (-0.54 + 0.1*n)/10; a[3,3] := (-1.76 + 0.1*n)/10; a[3,4] := (0.31 + 0.1*n)/10; a[4,1] := (-0.44 + 0.1*n)/10; a[4,2] := (0.29 + 0.1*n)/10; a[4,3] := (-0.78 + 0.1*n)/10; a[4,4] := (-1.78 + 0.1*n)/10; b[1] := 2.48/10; b[2] := -3.16/10; b[3] := 1.52/10; b[4] := -1.29/10; {sformiruem matricu C} for i := 1 to 4 do begin for j := 1 to 4 do c[i,j] := a[i,j]; end; WriteLn('Matrix:'); WriteLn(''); for i := 1 to 4 do begin for j := 1 to 4 do Write(c[i,j]:3:4,' '); WriteLn(''); end; WriteLn(''); WriteLn('b:'); WriteLn(''); for i := 1 to 4 do Write(b[i]:3:4,' '); WriteLn(''); {najdem normu C i D} normb := abs(b[1]); for i := 2 to 4 do if (abs(b[i]) > normb) then normb := abs(b[i]); WriteLn(''); WriteLn('Norm b: ',normb:3:4); for i := 1 to 4 do tempc[i] := abs(c[i,1]) + abs(c[i,2]) + abs(c[i,3]) + abs(c[i,4]); normc := tempc[1]; for i := 2 to 4 do if (normc < tempc[i]) then normc := tempc[i]; WriteLn('Norm C: ',normc:3:4); WriteLn(''); k:=round(((ln(eps*(1-normc)/normb))/ln(normc))-1); WriteLn(''); writeln('Kolichestvo iteracii: ',k); for i:=1 to 4 do begin s:=0; for j:=1 to 4 do s:=s+c[i,j]*b[i]; d[i]:=s; end; WriteLn(''); WriteLn('d:'); WriteLn(''); for i := 1 to 4 do Write(d[i]:3:4,' '); WriteLn(''); for i:=1 to 4 do begin x[i]:=b[i]-d[i]; end; WriteLn(''); WriteLn('x:'); WriteLn(''); for i := 1 to 4 do Write(x[i]:3:4,' '); WriteLn(''); z:=1; max[z] := abs(x[1]); for i := 2 to 4 do if (abs(x[i]) > max[z]) then max[z] := abs(x[i]); Write(max[1]:3:4,' '); z:=z+1; while abs(max[z]-max[z-1])>=eps do begin z:=z+1; for i:=1 to 4 do begin s:=0; for j:=1 to 4 do s:=s+c[i,j]*x[i]; d[i]:=s; end; for i:=1 to 4 do begin x[i]:=b[i]-d[i]; end; max[z] := abs(x[1]); for i := 2 to 4 do if (abs(x[i]) > max[z]) then max[z] := abs(x[i]); end; writeln ('chislo iteracii = ', z+1); WriteLn('x:'); WriteLn(''); for i := 1 to 4 do Write(x[i]:3:4,' '); WriteLn(''); Readln(); end. |
05.02.2010, 19:54 | #2 |
Новичок
Джуниор
Регистрация: 05.02.2010
Сообщений: 2
|
переделал так
Program ITERATION; uses crt; const n = 9; const eps = 0.0001; var k,s : Real; c : array [1..4,1..4] of Real; b : array [1..4] of Real; d : array [1..4] of Real; x : array [1..4] of Real; max : array [1..10000] of Real; i : Integer; j : Integer; z : Integer; normc,normb: Real; tempc : array [1..4] of Real; begin clrscr; c[1,1] := (0.95 + 0.1*n)/10; c[1,2] := (0.26 + 0.1*n)/10; c[1,3] := (-0.17 + 0.1*n)/10; c[1,4] := (0.27 + 0.1*n)/10; c[2,1] := (-0.15 + 0.1*n)/10; c[2,2] := (1.26 + 0.1*n)/10; c[2,3] := (0.36 + 0.1*n)/10; c[2,4] := (0.42 + 0.1*n)/10; c[3,1] := (0.26 + 0.1*n)/10; c[3,2] := (-0.54 + 0.1*n)/10; c[3,3] := (-1.76 + 0.1*n)/10; c[3,4] := (0.31 + 0.1*n)/10; c[4,1] := (-0.44 + 0.1*n)/10; c[4,2] := (0.29 + 0.1*n)/10; c[4,3] := (-0.78 + 0.1*n)/10; c[4,4] := (-1.78 + 0.1*n)/10; b[1] := 2.48/10; b[2] := -3.16/10; b[3] := 1.52/10; b[4] := -1.29/10; WriteLn('Matrix C:'); for i := 1 to 4 do begin for j := 1 to 4 do Write(c[i,j]:3:4,' '); WriteLn(''); end; WriteLn(''); WriteLn('= matrix B:'); for i := 1 to 4 do Writeln(b[i]:3:4,' '); normb := abs(b[1]); for i := 2 to 4 do if (abs(b[i]) > normb) then normb := abs(b[i]); WriteLn(''); WriteLn('Norm b: ',normb:3:4); for i := 1 to 4 do tempc[i] := abs(c[i,1]) + abs(c[i,2]) + abs(c[i,3]) + abs(c[i,4]); normc := tempc[1]; for i := 2 to 4 do if (normc < tempc[i]) then normc := tempc[i]; WriteLn('Norm C: ',normc:3:4); k:=round(((ln(eps*(1-normc)/normb))/ln(normc))-1); writeln('Predvaritelnoe kolichestvo iteracii: ',k:0:0); for i:=1 to 4 do begin s:=0; for j:=1 to 4 do s:=s+c[i,j]*b[i]; d[i]:=s; end; for i:=1 to 4 do begin x[i]:=b[i]-d[i]; end; WriteLn(''); WriteLn('predvaritelnoe reshenie, x= :'); for i := 1 to 4 do Write(x[i]:3:4,' '); WriteLn(''); z:=1; max[z] := abs(x[1]); for i := 2 to 4 do if (abs(x[i]) > max[z]) then max[z] := abs(x[i]); z:=z+1; while abs(max[z]-max[z-1])>=eps do begin z:=z+1; for i:=1 to 4 do begin s:=0; for j:=1 to 4 do s:=s+c[i,j]*x[i]; d[i]:=s; end; for i:=1 to 4 do begin x[i]:=b[i]-d[i]; end; max[z] := abs(x[1]); for i := 2 to 4 do if (abs(x[i]) > max[z]) then max[z] := abs(x[i]); end; WriteLn(''); writeln ('chislo iteracii = ', z-1); WriteLn('okonchatelnoe reshenie'); WriteLn('x='); for i := 1 to 4 do Write(x[i]:3:4,' '); WriteLn(''); Readln; end. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Баги с Query и Table | Toky | БД в Delphi | 3 | 15.12.2009 00:01 |
Баги онлайн игр | 4erw | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 2 | 10.04.2009 07:58 |
Помогите найти баги | Роман Радер | Софт | 0 | 01.04.2007 17:44 |