Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
ganterrr
2 / 2 / 0
Регистрация: 10.01.2010
Сообщений: 26
#1

эффективность сравнения

17.04.2010, 14:14. Просмотров 488. Ответов 3
Метки нет (Все метки)

вот у меня 2 метода решения линейных уравнения гаусса и простой итерации
нужно сравнить быстродействие использовал функцию gettickcount
пишет всё время 0 или 15 милисекунд
где ошибка вот кусок кода
Delphi
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
procedure TForm1.Button2Click(Sender: TObject);
 var a: Matrix_a;
      b,x:matrix_B;
      d: Double;
      i,j,k,l:integer;
begin
p:=gettickcount;
for i:=1 to n do for j:=1 to n do a[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);
for i:=1 to n do b[i]:=StrToFloat(StringGrid2.Cells[0,i-1]);
for i:=1 to n-1 do
begin
for k:=i+1 to n do
begin
d:=a[k,i]/a[i,i];
for j:=i+1 to n do
a[k,j]:=a[k,j]-a[i,j]*d;
b[k]:=b[k]-b[i]*d;
end;
end;
for i:=n downto 1 do
begin
for j:=i+1 to n do
b[i]:=b[i]-a[i,j]*x[j];
x[i]:=b[i]/a[i,i];
end;
 //Вывод результата
    Memo2.Lines.Add('Meтодом Гаусса');
     Memo2.Lines.Add(' Количество итераций: '+IntToStr(k));
     Memo2.Lines.Add('Время '+FloatToStrf((gettickcount-p),fffixed,10,1)+'мс');
    for i:=1 to n do Memo2.Lines.Add('x'+inttostr(i)+'='+floattostrf((x[i]),fffixed,12,7));
если заитересует посмотрите прикреплённый файл.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Вложения
Тип файла: rar методом простой итерации и гаусса.rar (2.93 Мб, 17 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2010, 14:14
Ответы с готовыми решениями:

Эффективность поиска элемента последовательным и бинарным методами
Помогите выполнить задание:

Array и Сравнения
Ещё раз всем привет, опять я завел себя в тупик... У меня такая порка =) Есть...

Создание процедуры сравнения чисел
еще вопрос.... создать на форму 2 эдита и баттон... создать процедуру, вводя...

Сравнения внутри массива. Курсач :С
Вот собственно само задание....

Не работает оператор сравнения в Delphi
Надо найти минимальные элементы строк 2-мерного массива, но у меня не работает...

3
Mawrat
12823 / 5731 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
17.04.2010, 14:41 #2
Между вызовами GetTickCount() надо вызвать процедуру решения уравнений по нескольку раз - раз 100 или 1000, например. После этого разность значений по двум вызовам GetTickCount() разделить на соответствующее число - соответственно, на 100 или на 1000.
0
ganterrr
2 / 2 / 0
Регистрация: 10.01.2010
Сообщений: 26
18.04.2010, 09:18  [ТС] #3
Можете пожалуйста записать на примере что у меня выше, а то как то не понимаю...

Добавлено через 17 часов 41 минуту
Mawrat, помогите по поводу gettickcount

Добавлено через 44 минуты
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
begin
dwstart:=gettickcount();
for o:=1 to 100 do
sleep(1);
d:=a[k,i]/a[i,i];
for j:=i+1 to n do
a[k,j]:=a[k,j]-a[i,j]*d;
b[k]:=b[k]-b[i]*d;
end;
for i:=n downto 1 do
begin
for j:=i+1 to n do
b[i]:=b[i]-a[i,j]*x[j];
x[i]:=b[i]/a[i,i];
dwend:=gettickcount();
dwdiff:=(dwend-dwstart) div 100;
end;
Вот так будет выглядеть??
0
Mawrat
12823 / 5731 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
18.04.2010, 16:41 #4
Ganterrr, sleep() здесь противопоказан. В общем, удобнее поступить так. Метод простых итараций оформить в виде отдельной процедуры. И метод Гаусса - тоже в виде отдельной процедуры. Заголовок процедуры по вычислению приближения простыми итерациями будет выглядеть, наверное, так:
Delphi
1
2
3
4
procedure SimpleIter(
  const aArrA : Matrix_a; const aArrB : Matrix_b;
  const aEps : Extended; var aIterCnt : Longword
  );
Затем в обработчике нажатия кнопки замеряется усреднённое время выполнения:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm1.Button1Click(Sender: TObject);
const
  Rep = 1000;
var
...
  A : Matrix_a
  B : Matrix_b
  i, IterCnt : Integer
  //Время в миллисекундах.
  TimeStart, TimeRes : Extended;
begin
...
  //Инициализация массивов А и B и величины Eps.
...
  //Исследование метода простых итераций.
  TimeStart := GetTickCount;
  for i := 1 to Rep do begin
    SimpleIter(A, B, Eps, IterCnt);
  end;
  //Усреднённое время вычислений по методу простых итераций.
  TimeRes := (GetTickCount - TimeStart) / Rep;
  //В данный момент в переменной IterCnt записано количество выполненных итераций.
...
end;
Аналогично для метода Гаусса.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2010, 16:41

Сравнения массива, заполненного в текстовый файл
есть массив adres2.ip он заполняет ip адреса в текстовый файл построчно...

Создать редактор для сравнения файлов
Всем добрый вечер ! Пишу простенький редактор типа hex, для сравнения двух...

Списки TList, не работает процедура сравнения
Ребят, помогите пожалуйста, я уже с 3.00 ночи сижу понять не могу почему не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru