Add(IntegerArray,1369151,308,175) { IntArray=['0'=3,'1'=2,'2'=4,'3'=5,'4'=6] } Add(IntegerArray,7105367,315,217) { IntArray=['0'=9,'1'=7,'2'=12,'3'=15,'4'=17] } Add(Button,794109,231,259) { Left=65 Top=10 Width=75 Caption="Расчитать" link(onClick,7364257:doEvent1,[]) } Add(Edit,10779859,357,259) { Left=75 Top=35 Width=140 Text="" } Add(InlineCode,2865515,308,259) { WorkPoints=#53:doCorrelation=Подсчет корреляции между двумя масивами| EventPoints=#46:onCorrelation=Резултат вычисления (Корреляция)| VarPoints=#22:Correlation=Корреляция|21:Covariance=Ковариация|36:sig1=Стандартное отклонение масива 1|36:sig2=Стандартное отклонение масива 2| DataPoints=#137:Array1=1-й массив для подсчета корреляции. Количество элементов подсчета выбирается по меньшему количеству элементов из Array1 и Array2. |136:Array2=2-й массив для подсчета корреляции. Количество элементов подсчета выбирается по меньшему количеству элементов из Array1 и Array2.| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|28: ArrIn1, ArrIn2: PArray;|27: cov, r, sx, sy : real;|9: public|0:|30: onCorrelation: THI_Event;|23: Array1: THI_Event;|23: Array2: THI_Event;|57: procedure doCorrelation(var Data:TData; Index:word);|55: procedure Correlation(var Data:TData; index:word);|54: procedure Covariance(var Data:TData; index:word);|48: procedure sig1(var Data:TData; index:word);|48: procedure sig2(var Data:TData; index:word);|0:|5: end;|0:|14:implementation|0:|36:procedure THiAsmClass.doCorrelation;|3:var|23: dx, dy, s1, s2: real;|16: i, n: integer;|23: ind, dt1, dt2: TData;|5:begin|31: ArrIn1 := ReadArray(Array1);|54: if (ArrIn1 = nil) or (ArrIn1._Count = 0) then exit;|31: ArrIn2 := ReadArray(Array2);|54: if (ArrIn2 = nil) or (ArrIn2._Count = 0) then exit;|79: if ArrIn1._Count>ArrIn2._Count then n:=ArrIn2._Count else n:=ArrIn1._Count;|11: s1 := 0;|11: s2 := 0;|23: for i := 0 to n-1 do|8: begin|23: Ind := _DoData(i);|27: ArrIn1._Get(Ind, dt1);|28: s1 := s1 + ToReal(dt1);|27: ArrIn2._Get(Ind, dt2);|28: s2 := s2 + ToReal(dt2);|7: end;|12: s1:=s1/n;|12: s2:=s2/n;|9: sx:=0;|9: sy:=0;|10: cov:=0;|23: for i := 0 to n-1 do|8: begin|23: Ind := _DoData(i);|27: ArrIn1._Get(Ind, dt1);|27: ArrIn2._Get(Ind, dt2);|48: cov:=cov+(ToReal(dt1)-s1)*(ToReal(dt2)-s2);|36: sx := sx + sqr(ToReal(dt1)-s1);|36: sy := sy + sqr(ToReal(dt2)-s2);|7: end;|22: r:=cov/sqrt(sx*sy);|32: _hi_onEvent(onCorrelation, r);|4:end;|0:|61:procedure THiAsmClass.Covariance(var Data:TData; index:word);|5:begin|20: dtReal(Data, cov);|4:end;|0:|62:procedure THiAsmClass.Correlation(var Data:TData; index:word);|5:begin|18: dtReal(Data, r);|4:end;|0:|55:procedure THiAsmClass.sig1(var Data:TData; index:word);|5:begin|19: dtReal(Data, sx);|4:end;|0:|55:procedure THiAsmClass.sig2(var Data:TData; index:word);|5:begin|19: dtReal(Data, sy);|4:end;|0:|4:end.| link(onCorrelation,10779859:doText,[]) link(Array1,1369151:Array,[]) link(Array2,7105367:Array,[]) } Add(Edit,9353038,315,350) { Left=75 Top=85 Width=140 Text="" link(Str,2865515:Covariance,[]) } Add(Hub,7364257,273,259) { OutCount=5 link(onEvent1,2865515:doCorrelation,[]) link(onEvent2,6682233:doText,[(304,272)(304,306)]) link(onEvent3,9353038:doText,[(301,279)(301,356)]) link(onEvent4,13153538:doText,[(296,286)(296,396)]) link(onEvent5,10804726:doText,[(291,293)(291,437)]) } Add(Edit,13153538,322,390) { Left=75 Top=110 Width=140 Text="" link(Str,2865515:sig1,[]) } Add(Edit,10804726,329,431) { Left=75 Top=135 Width=140 Text="" link(Str,2865515:sig2,[]) } Add(Edit,6682233,308,300) { Left=75 Top=60 Width=140 Text="" link(Str,2865515:Correlation,[]) }