![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() всем доброго времени суток.
Сиделя я делал лабу по Компьютерному моделированию, практически все реализовал, и тут столкнулся с проблемой как результаты прикрутить к графикам. а конкретнее к TChart. Люди добрые помогите,пожалуйста. чуть не забыл вот задание лабы. В ходе выполнения работы требуется с использованием известных подходов синтезировать алгоритм генератора квазислучайных последовательностей и реализовать его в виде программы на языке высокого уровня. Синтезированный алгоритм необходимо сравнить со встроенным в программную библиотеку языка высокого уровня путем определения базовых характеристик их функционирования и сравнения с идеальными характеристиками случайного распределения. Код:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; i,a,b,M:integer; xs: array [1..50] of integer ; xf: array [1..50] of integer ; x:integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Randomize; Label1.Caption:=''; for i := 1 to 50 do begin xs[i] := Random(100); Label1.Caption:=Label1.Caption + FloatToStr(xs[i]) + ' ' ; end; end; procedure TForm1.Button2Click(Sender: TObject); begin Randomize; M:=100; Label2.Caption:=''; xf[1]:= Random(100); Label2.Caption:=Label2.Caption + FloatToStr(xf[1]) + ' ' ; xf[2]:= Random(100); Label2.Caption:=Label2.Caption + FloatToStr(xf[2]) + ' ' ; for i := 3 to 50 do begin x:=xf[i-1] + xf[i-2] ; xf[i]:=x mod M; Label2.Caption:=Label2.Caption + FloatToStr(xf[i]) + ' ' ; end; end; end. |
#2
|
|||
|
|||
![]() Ну, я подозреваю, что надо сделать большое кол-во генераций в некотором диапазоне, например, от 0 до 99. Далее посчитать кол-во соотв. значений и вывести 2 графика распределения - для твоего алгоритма и для стандартного.
Серии в TChart создать руками, а код примерно будет такой: Код:
type TRndTest = record Std, Tst : Integer end; const N = 100000; var A : Array [0..99] Of TRndTest; I : Integer; begin Randomize; // Init array For I := 0 To 99 Do Begin A[i].Std := 0; A[i].Tst := 0; End; // Run tests For I := 1 To N Do Begin Inc(A[Random(100)].Std); Inc(A[Random(100)].Tst); End; // Fill the chart For I := 0 To 99 Do Begin Chart1.Series[0].AddXY(I,A[i].Std); // Serie for built-in random Chart1.Series[1].AddXY(I,A[i].Tst); // Serie for your random End; end; |
#3
|
|||
|
|||
![]() огромное спасибо
не подскажете как к моему коду приявязать ниже идущее?? если не составит сильного труда в виде кода. - длина периода квазислучайной последовательности; - функция распределения плотности вероятности величин (предполагается графическая оценка данной функции на базе гистограмм); - математическое ожидание полученной последовательности; - дисперсия последовательности; - среднеквадратическое отклонение для последовательности. |
#4
|
|||
|
|||
![]() Цитата:
Вообще, за тебя лабу тут делать скорее всего никто не будет. Формулы для расчета всех нужных величин можно найти в интернете. Если немного приложить труда и желания, то все это делается за час-два. Посказка: код для гистограмы я тебе практически дал, достаточно выбрать соотв. тип графика. С длинной периода сложнее. Тебе надо найти с какого элемента твой генератор начинает повторяться. Остальное - просто расчет по соотв. формуле (иногда надо подумать как его реализовать, но исхоодные данные для расчета можно использовать те, что генерируются для графика). |