From f213e9988b0dd1a7f714c52bf7b8870b703c6694 Mon Sep 17 00:00:00 2001 From: Hani Medhat Date: Sun, 6 Jun 2010 02:34:11 +0300 Subject: [PATCH] Added: AbsoluteMinimum() AbsoluteMinimumIndex() GetSubVector() - rename SubVector() Maximum() MaximumIndex() Minimum() MimumIndex() Sum() SumMagnitudes() SetValues() DyadicProduct() Random() TensorMultiply() --- src/FSharpUnitTests100602(1).vsp | Bin 0 -> 459994 bytes src/FSharpUnitTests100602(2).vsp | Bin 0 -> 461876 bytes src/FSharpUnitTests100602.vsp | Bin 0 -> 460592 bytes .../LinearAlgebra/Double/DenseVector.cs | 504 ++++++++++++++++++ .../LinearAlgebra/Double/Matrix.Arithmetic.cs | 123 +++-- src/Numerics/LinearAlgebra/Double/Matrix.cs | 1 + src/Numerics/LinearAlgebra/Double/Vector.cs | 400 +++++++++++++- src/Numerics/Settings.StyleCop | 6 + .../Double/DenseVectorTests.cs | 399 +++++++++++++- .../Double/VectorTests.Arithmetic.cs | 302 ++++++++++- .../LinearAlgebraTests/Double/VectorTests.cs | 28 +- 11 files changed, 1683 insertions(+), 80 deletions(-) create mode 100644 src/FSharpUnitTests100602(1).vsp create mode 100644 src/FSharpUnitTests100602(2).vsp create mode 100644 src/FSharpUnitTests100602.vsp create mode 100644 src/Numerics/Settings.StyleCop diff --git a/src/FSharpUnitTests100602(1).vsp b/src/FSharpUnitTests100602(1).vsp new file mode 100644 index 0000000000000000000000000000000000000000..099e8fee265afda202c0e6083cf0cd61369d1735 GIT binary patch literal 459994 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%0A>(Qxr>F;lSB9~jD3-B@rU5=NHQ6XM7 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 z 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 z z3iNK^QHnAKlT%XkXrPy(I&okj3LkMGUZ+Oofv6;&k?&~IXEla@NXwc0n7beiQ|0fZ zli~lD+uRr;5RV@(;;?}+ES^T6Ct2LOL0`@sSx+)&r_9Qi-zf9x_eAV5;t`Zt`HCBf z$G$anE$SR!d=?iQqepp(8@(5>t8BYX5Qkq{bsldd)FUI6pLTlksD_$=olgVvLZNUY@|2V|U6389-v? z)S(kUM$Dm&bc7Tqjs;kPf;{{4N){sl^J5nZ%=y4@3e5SyJ{0J+KqN+i7SDfy3l#Rc z6zCw$U&?82PP{$DQ_@0@dt?m@wg1-1?H!yLL7*@*HwuF zYf{uE4s1hFpEwW)x<`89tuY z04GzlCk}jqq62Z@CW>yvfjAhV+W{|8pfQ0SYL~$Tz+@B=M1iR(h7t#6pcqCRn2`bp zLSRmcQN)2&DI$pj+fqy-4(vgJHUajem`WTth~g>YKpbE(y#hB;JVPA#8pT55z*q_# z2!U@=EFlhjj{+SOh>nO3y79^h?x4O{>7bRVp2{maon05CjkJTJaj^h#R*}{q8U-B` z*pec>K^*XMQvjc!$YXFO;oTI#*%bE}j3UfW0eqgKh{3N2@1+2KO@Yn|{GOtuK|I4P zM;us$0-X~000l1CfOuI2of3$bRbUVhM!=xDm(H?5(YwT;GPJGoOJ)TB<$Fj2X(KfV zg~tL!A!$lx#K95CfY>RLwRrnyPL>dmO!=?>bh6#8l5NHT!uOWc3`0%%6{lp+(MDP` z*pCH>nvr9Sm>*J605LzLF^H#J=n_C51x_J=^(f#35QTsf&wiDe3m0n&hpwgkvQyzO zz_f5E5Eftw3KR}lha#;(Btv2#5+LytCrfeS(B0xnd-_~CO?o_I|E0arku`CkD-Y1; zXm4P3icAJED6&%kF=L?+KqNyUYIkqMg@`eQI7go=|HG*eKhj282=sI;z{(V;J+M9n zngiIJ0!{!sQDiarC}D02Af~Up265_=j{=BkrmiPNcwb4LF$s*Gj-C6a@{g zB)p#jxSj&XG9X3~Ml+E51fM(sF|_L#qzZ7~0-|E*TSaFdJ!HZ0_v>&bFF(~a4ZXbPil!) zP~O7nn=jjFBTbNsI6210Ei@gDQ$RFbh(R=6K?-0|3OEDAc`qh6AWkc)8mvKxb6g+_ zib4ZXI5bU#FUoVFV@#nl(C5m-oC@8BHbOzMz!mHi2r+irbY>ggX}sAf3Z%Tb(@vkG zjdZ7JiKF&FbZFEbn1cd`1)!IrfWi9+i%b#T_$CzZOrSddRiT`dbYknBR$vpf0wN#$gDcL_! z%e%_PbK(e-crn#dc{-=Wfs+R2W-LI=&1no`KF&-5Y)6411AK%6lLv4F1%?W6Iz=gi z^9XSU1)NWTAp}I>&;iRgny`gux&z`CX2DRy>4H4*4jAZGVG>{gA}NldKp#aWgS7~e z7>EQ&oIcyroH*Jf!|9>&%t=X{p9ENdm^?5BftUm^!2kzQATbaLka*{`>@RYSKad*F zPf0a4oQ`sd*BIBgI=5ps!U9AREK_JF*b$lopY@|aVSxQ93K|?p2&aI9DbQrVAr$u- z97>2|0T9gzH-RH5N*f$Uh-L+jrzmf55@BTu;A9FMM}SXK)G&zd;iCXabR}xGm1E{2*m>8 zz%dldi32B5tRxP^4g475zzY-@Hoz1qwCY;=nT$IQ0R3OMzeC0bZrZMjVLm%H!S?FcU>y;=pVa1&9L+Qs6aj zU}Xy2DgaiYz^wvcQwrQB06t9NBMyw9s81X?i~=1Rh(3o79o4lkcWBQc>Cl*6m1lD5 z(CC2Lp`Aw3eY6dd0kKmgJGrDXCkr#lV(D|`Ax_D5(MFoA8gVSZ#uS(@fUPLf80oyUD|J@d^Zr+B4LKty3sR$)~iJvy3_yNz$A&`QO-2GIdinB4u+?48dizVyB|}( z*Pi3lO>zBAo4Ma6A`jrj9E!OV7*W8b6det|MA(Z0xRs)}!EJ;%ZUJ{u3^I6-a5x3< z5CujP5XT5K>h!h;xKU$1_Rl@avpO}Z)7*oD9{MRTvAHMWx#OJ7b3~Gb(RRvdGETe) z1)i&5$5?6c>>iEShPJBiK z98Xc1J_kNUQJpw&HAQXWz%>+TH{b~hoW%gYqrh1VFb!20XEDIE6m5tDi&Nl?23VHj z|F!oeaCQ{+x-}sNLr9ne5_XtC5^^A!O!kFb0!S> z@1&->ySkSDS6}_>UrYC4ebXmE1Ws*R9{_jYc}=t*;8}BidJ=Gt;~@jwG@SFGKOGKb z34EGh1de_+9D$?H=0=;9{&qNae)MmKJ0bMH2>*0A`u`4B5&CSJ6o5VpN&&w4YP}ZV zhf%XU5T0YXEWV`_+bp{;t~@}RRlJ}x`!5v2oMU+;KC}P8Lk2BYH4pkUScw+>6>vm| z{yI1|QTm(UXcExxgd;-qAAlPb`k#V-G93Lcz?~ZUPryGLj{eJVM2)3_;?^p z)r(pfQp}v=vy1V<&;~KWFe4uHPlKZ{^vA%l>giL^A)!wyun_c_84FQ&@rln6(cNJo zzJ~ke9N&tIF9fADh3ISkeFb^3(DYe27JBo)R|JLb_))|;b3Qhy(8X|$O7&NNtqd}o zch~K~R)*auggL);m_{gT2Jj+0#K`yFRux1(^vwH$$c?yf&L7VenPMIsvp9(S)lf|6 z17*%(;m6m_NIYcfWry+@#RwP-h0t=?{UU;-}B0d6Jg?iEylY`V^j^ z+_<(j07V^)T8%l!5GWp$Qn#A#{&;gxh>c+(NKA8nR#G8e?^ZML)o0GfCuR2c&fS4(_V=i44;<1pumrR*=b0o>*ceTNJ{RXa z=ud=WgQhvjwv^KrUQ52QjvBbpox6`Dz=mYzHd!K=&GinAAI4?|X=; zGbjHrsW+K`H|dje!t41xep2eS@BZ7%Or2=>hoAZ?JjWxWJvBS@lgs|Ak>8wgFJi?Z z;HSPcEc^H{)wzkO3pd?X7spLvbh~;>fP9^*RIAh?w1En>P_0m_;V)9#gZA73*0q6m zTfy(~YOz|QHU$jqP-}6o4WYF`tL#QNTlu+&+pb!i6uNL#i+I!#*CAGgngnOJ;_KB+ z#p;bKiLD0;Ex`h{10|z2sz4c;Bel?G_)BrOUUeWu>yMpkjv{SKm2;%?Du7=*G}x8^ zC6B^!W!aYP*U3X4oYn zBs$o-hQpaYe{tBkP6!{F89jPb&XRloU046>VM;;$>mR-p?+8WBgb!+))Q?q)Yp*oB z$yNo{Bw0u^4t~4(K18Ax_YYr+&xds}I(+aFKSIjulfvf>4|G{^^T5S!O8b`u*U3_p z-(L4#O2IzCKYS^^7)miNe6Y{zBDEBwUL5=bO2HEQhcCs~LX*}=agiS(<+X2r_gvSs zxGC+qI=D`*i_^Y7@Qe>Z3ien2;Y;x?uP(fL_oEkoUEb=(Ex#_fPL|@vxmPq$3igHm z;Y)EtD8-oY!MFGkN_AcHAvdK%cLmqUQcU~o+=nOy`&<9;r8p~Ol&QD3`VmTXU2|ob zlT^h6!DX@(yGD+AnNqMv_YWh*x-j7Ckhtt?cwC~r(*ND)NwGhl6bFyoH~zzrqDRYF zWinE%3hzw_>jIAlM|J2I>xIc>kAn}r&#jA{9}Tidu8U_sFtn9Y&{FXaBgN`4pfjus z(}w!2E{=Fo9Qb%pf@CQknRn+tNVh|6B8Zw=Rx+I>;kg ziu0>3{3E5Hz2qN8iYvl^x{v~!<*jnm`94$ zzy02SQi_pw@xyZ?#pv+*(vVTS&*K#BmHuyPDRyliG5jNtVpL37j1)$rt_&-|^xbn} z;-tA{+JW(V;&%MhWz@W%1VPD+8g=pwD=EdvJxN3-MvBYBTb~Hq#hKytyy(%=p6&6Z z*!{~O{bVV|J<_s^QpB;tNUf@WT|e*qHB!tA?_Ll}VRE14Je~f+&$H)x|EsPP zRTt!uV!-E~c$`w45mN{w#f4$mgis1IMxPuLrzE!y406?0`P4j8-1f|#zfcOJckEIa zDa`o#*P#@q@9wP>VfT}5nO6*Ur8qP{j}&)4{ky3TK#H^M;)mx(3bX3;Ew5e7jER%x zR-zPDLtH7UF3Tguy$^lkPD*ihO!h_!GZ%PnsA=(daEytGljauF=MfYUeoyP(IKq{p zqA`yY4UeAvB&Dcea^7L2Fzbu&38e@^nyQf%CkM~Y{kzi#YaNHIF5 z2u6xb7`7v%fN9-vabl85yk!_=9*C|_b)`6PLmnxv`p)pHD8)G@Da$ufEC}!YTUZHZ z#M;}saEofKa@Snv25sD(M~YXrth|R(oNJZdoEjL6n7l{@$!#Cim_gacxj|C^HFDo&Cf8ZIwnqE-b%JW_HO@|U6f*6 zO!h{K+A!=-;o#iNUA_KN#1vX?2?BzEARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qD zARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U z2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg# zfFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|( z2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Ko zf`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`b zAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_` z0)l`bAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5KoeT2Y*Me|peA?V;;Du?Iy-#>En*uhh10y>tS*P|6`AAhMAZ%4t~4( zK14e_mLurtVtpN#FeM_P6<<|$cm^o``0ckCQ1BHm z^R(14mmO%njWJJ89dp3vo_L%w&qy8fwrBSIg)z@8I3~5^>cc;qL+!=mH5^LK(ic0+ z)S0setyrYys5-SCb_;Emy1;trMsHoIR-sSsj=58zRwJYXF}i}DoH2Lcxh?478FOn8 zZzB9{xYvx(Hr0q{>)<+ZR;O~?19hqaF}C8lOAxyOskG*e6WI_u&sJ)xmJok0NH)59 zo=H9#GvF(4p$)V9U8|gjPI+}ok}2mrSM0^cDId6wao>@U3uRiC81tDJ5f~wE7Eo z>Rx%b$DL!2yh?@CF;RVM&feu(@6@0-X-D7CiGF8`sz9&O2A#rDWrZ4#5#=m3LuH_S zRtEhKpY4Kc0iP<=I^63*&r**V6<}O9&YN(r9aoc86?(ra#N-%Nr(KJXc09{otOj>G zkq-Mk_IX>;r!^y<{mgdcJq^#U3F3DkCUs;hwBR=Q-MC`U7%^J3q^SJYokUN9bV=3&NE#SKKU%0dHcUOPHog4h>e+7C6>twUe zFk|%f!MHb?8_XVybDnt-dMwTg>ydmj<`MO5v>roW8}w!zlTXE{d@9E0v+*=J*BCt4 z49(SMX)GC|CsC`vaHpf`yAQhDc}VM>@?+KIiG5bKy|YFw#h843Xe~z;4_7jTJ4q}k z?tXva&drOT^0@Pu=1#{TRhFX9T7q#_+z3m!Qyf2X#p*BIdFszkd)&E2uSx7VLEV-@ z@2m}GbXI%gbA|p(^iD1w6cg58xO2wGp7FS|BpjnFwIPMxS%ES7a?4uLYgxjbVz`kn zPJiLfZD)SZ<4&38&Yt7du9SMGCS0E~v&qCj^iDn|qz~^e+?n;2haYim<@QkT3{dk@ z=$&e;gX%T)Xe~>)lb#oa#ON>F8F>8XJnr1CZROqNYF`TO=(W&VjL@SomT;#KCZvC+ zzi?;3w=4d)t9KN34C1IMQ^&sZm2e%s2CEI1swMb4U)>b$_2PPG4d!%Ku|6pQFFKY?OA=lCea99by|#yxFu^6*{sob`U`iq4>WtAz z+{s>(pslsi8`B!(p4?=RfhJ@K3=d~=S6e#hpY zHFxF>Q7^xt_A9RoYzF31F0?MD^GYqdy=9j%@8 z!pxxF@aJf~{dLcct32*}Uvp>YVD*P0xT9yT?H*9LW9qb2et+o^e{th;7rA<8#QH$S z{R31*3TtXUb_T5oRy@cX^9}}kAmL7_IAhZ3FWlLDe*@ke(P_(a%?`$<-MxX)v z%(&-lO7O1<*V6)9eg^JOQ!{b538D4)HyLk*%|iGL zcJKbu-g)e|7vCMrokPo2GI!#4CF-}|vw5`y^Vti*BE7@RuiLsFc5OiY^F2c2HXu#| z7%>w}nGWtuM+)TCR6Iw%%<}d%YW_u*mbn)0^o}PzvCFkyp)F1BeD$%Fhh6Rr`9q+0 z=9Q^QM`1_nR_HD2Fz$V&-s1bBQSA$Ndg{$O=`VfOz_Rm3@mniAbf5K4`t7eHO1&?| zN-N*qxg4u!wJQ6)!CX69g*zJiG=KXGcRu#W55~FN`TPDt3+qU}(2|C!(X-E24OFk8 zvod|wtMzYP>T>5SJ@eRcvij!PN%K4L_D(TxVdz=wtI=E8?~LX8+F$R!?jziZxX_z3 z+B@6N{7ALSog2fQ^h4EIDOTw(#Rz>7Y~r=(wfMcC$Y#mC8(O%Nz6SeCpY@|jPh9D8 zXQZ}wI?B}DMcF&tGZZmL<=IIu+t z&m9-HCb7o)N>E*}vM>v)3p0bY2ChHM#%yvk=8|V%C87!83~9mqauXb%;|w!bC-{%+ z5q5h1T150-k?5V+rjY6;_0GHA@x@=e+^N;v+25?{MkI~VOT``gTf3E5x8UqD@&zwi zuo}U&tOoF7YQUh`U<~;*4Lq5Jvj*^IX22?j&q6%1iE9@vNFhFDpHK1y-c*FK9wvAG zcF)}7`E6?+dR{r?4!*UX%$@l8oqX$A+__kdv3yd^=3Cj~w>hYF$dQ&n*HHgdLGw(7 zOG-7ebof0?cWq0!qiepvzvY@6W^VAQ^+!&3xfAwT8>i>!vwF)NyKl+In0#xYc3Kfn zA}to(6Ydnqk)+4UH8%`*UTqujdzU*O&|l!)GfWMgmDFd&bElYjWqym7J>U-PonU`e zkDiIUQllCd?)X*NAI9kXb(MGg?ED4%odO=Z&pKLf@aQi?33oL1Y5w*X?mV=1mdBl= z`_`#&Ck<=#v;BcPW+(l<4}IfK?xe>LWW*lXJLyf#hDXnSk})e{00_4heH4Uqs>OyxR5)K-0|VR#Bv8a z)sndrZ=DrBD$HG@rM305`C{g!_~+b9GW#f3r(zV&1xM$M+d?OjaCyBReL4XvzG7<^Orjg>E(HNWKoAfF1OY)n5D)|e z0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n z5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF z1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#= zKoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z5CjAPK|l}? z1Ox#=KoAfF1OY)n5D*03pa^_)uo}dozZM?$dBXrVtjv1u2`}CND{R5gC?3;0CJY-0 zf1?-gO<@?b|IBewJYKV4^m$zF#XHstTR+5&_hu{X7B9`gR#>f<=5bcoTrbTbR@mt$ zMET*iIz9}ed{=pC4h_R7!>><@;_-Tz6;|zqonVDs;?+aB6;|)%H{1$a=#_Is7{+oA z^5i?wig!_2R8HJhCxu~*SLVeV8HQ1w)m~XfSz&irY4X{Vt*|e9@lLVAHh5vDT4CSt z!cMcoF84TidKg9-8m)M^RA*RWO8Fr2p_PAG;bFHwidufib!XEX)##&(wRylE7jSItw*&$E{UeF%b z!9OoN9}oX2i=S6ONo2yX^Wi^yOcZY#t}h6~CcvLGFbbQ2>xp4lCHzaQ{Qk^m!>}s& zmsw%!pm-)*VV|+`tHb>%VHorKidD{PTu%+dSk50>VcU@=%Sy}{_NW!ca!$9xR#|2F z4P<9HYvuP*l;y%OY%csut^CeF*hOI& z^E+sTvHTZ@VXUJ+ToC2Q^1USt`R{Pms??{dS!W=74}5ETb3)Vu%_W|81;xQhSfds8U9TRRtgz7@*3DMf550IT zR@jMF|4tjLH4NJXf07kOozxbFT@C+qE9@y;Ut@*MwZf=g^jf09l`zWVHoQHy1S=;FUR$cFpT-V z&x*(VP`02wFy06&?0#I|5QZ_{*Q_+ju^X*0VAPWzZHa%f!m6z_sgG|8!6^2po((zcR=BPTg z9=zVFn!u>*P|I~{C9WI6g?3!Es}|I5rCOz$;n%5p-0Q;m7S#Y&@4%fUYCh80fLLo( zwOWBYi*dFIPj-Tbl?ZFcSu^fm3)`epRpD9f^ITtVKx$R6YFc2Sw7}YEfn_uqC7O=A z^|)W3m}(`S+8nemEs^{!27$T}dzY`+{lY7sTy)I4c&^kirG1^+I6u*vfLcl!KMY?K z@`*Km4eD$qYOWhxi1_2*sZguIjgEk8ZFrV3$*L`3%&h_MCW4>aaIYDmn$1UGVu_L%{Aj*yYVQ-v<32l}odlrE^mkR{0g4?)tqqy!U6jcFbA!K;6Nc zpZV=oUsi_(s>f#zqG}5c>S_BJU#t0Kd=pkm{WJqwhrH?nYsj+A;6(%Oxsd@{ZXexv9oy9dqIX_esLb~rhTMc~X?gH{aLaYcsx9naOyG8On?f~R{4 zFMXTllkrXPA=p@$I#H*hW|7iNleAa zu%&RETjE%k_8M%so-pQdNtoXdoc|?s%#ZdY;sj+m0q5%nXveVg;W)R%JX+v5zM*}{ zFy?LMmX5_aZPsOQgW*nv>~I~e=P3PQ8v~M!|sK@7j6>n(=pA7a0d~_bCzXh=$OY;I5TEsKSm7b z-UP?|8TNJfe}o_mryB-$797KlM;2Z>^xvG4heBwLC3Ij!?0U%{}DKr zjgIv^DGXZ)dfosx9oKYr*d4fEhRQW{WQYCc%_uhtKOb@EnBN>YmgR2Te-4fuq+=M< zX4v54z!SJdxTdqi-Vbtq;dsq0@{3`_kMUjtpkKm`OL0xdFq7XeP_VzkvCilqs@e$0 zcrOC@eE_Qg*K~}xDhzuG_rDI3a*RgDF!F@)x=vH-aWv+eaZSfCV#lzFsE~)@IM$?N zn5m<^NMPPMO5KHfbS(c8IL2$j{p;cOApqwlR=a7F9 zI)-uF%(;RA@KH^{obL?yOrJb8a|KLuDID`NX_~nL#(NI#`7n$!n7IO`b2xOUl0Xj5 z6%e1R;Jy$#wxfEu>(R#GDbTQo*Tk#>j&lY7jk%$5IKMA+i{X<~f3o74`lIf>63)yO zFwG;OV;R}z7g+HqFCFDv31{XCC?1RZl<`|waeeHK2-Cl%C1|eDF?!ypzmN09j_zY(c*#!)uW#I> zdEy1jr63>(2m(bTKs%+BbAqyFQFK+j?h(sSf;WmCBKB(E)1{PpLDmZTzP|b@hc}X5 zknu@hu^>vf351B-(O_d=8LSv@$BJ-Auhr}kN*N$0p9cL=$Z6+W+KF8e?6$O;X?3$=_c2g`y z`dg9GMx;0wIW(xNQ9hP*0@7u) z+aSYMAZORbI;6T8X*T2j68!B}dIgM6E{1%~2yKG2<30IpeAl2phzIwnux@vtmYP#z z5?=?GBCT$egXP(X72&yyP53P(FF#t!JW5IL{Z5v54 zv+Z;DkKXY^c^Bc@?9-`-?jugR1?rNr-SEK5Ybp&JuiaZw7xS>Q{hCig<4+T7?Z&yq`N_X%m_Hl@?;cS;fcX%egL zvaSG!*h^^++r2qkOk_J`)RzikbTJy)?!&3OsBId-{H-|CZEYSHUWHbWwtpy;MOCR; z)LS`yeUye7cKwyMMc66Zy@+Oq&16@9)}o$hgHjjLDm1N${$wzh|BBZlcB$g!Z2()? zYq^}&EoU+`@}~>pZp4;&ZQO`{j&_%}$jL_A-nCmxF|x+>xwhoFTWYSlDW&D<;&10# z7=ueEWnuYo?Bv?^$rAXS?mOHfy*dHBjYd$qrDW7Supsiw7jMx=W5ZU+ZjW3Rg1_81 z&v?|Yov?R#ULV-Kov<{fptW*8d^L3MwRqwhgt}v#Ot8T#f7y!BkFGpxQT8^pY4!%$ zP^@O#djg7g;-PU zq4iiVm&S=Wl~F$`A%D!smH4uTI#4Qe&+U(s+E1y+QyI0Qpphw&kJC5vApyrMJHYo# zvPLv|_kJ6~Hv{$SgBB2B+gmNq8qKAT?3~hT*EFe{@d`&Q1CJ?0-{fO5TVXT?<+y1~ zXvcL!w@kwhwy7A!Oz9IVu78YG;_QY=-prlWR;A}rw!Ic{sZ`cizC7%{?De&Q(&%L~ z(t=)r-kclEzEUUC((Axlubvkg}0;FSc#pu93SX+8!Mp;^~_Ku>>!S=JJ2d8W4HEf=%mT$ z&0X6s4XaHrvIRNNzG{LlWgeXEp+@b(I|cD|Hx+Fv>ebB5w%a1pl*H7hKW~tpA8~f3 zErUVRpDRAl3k@EP^jK3`7S5U(ZSK~Puc^%Fw)EEdn1VPMS(7$Sww80pp^F1{cK3pJ zN%?TTD*X&#{_-gdSQ<~eiX{fydIlDg-L>yBVml4Hg-Xh&>Cjc7+KA?Hw|wd81h zkE6LXJjn#_ccf`sakg+Jw1^q)t_j9hENAJ)z4sP`XjF4N<4QW`8Mw;BHLgzRL+U`S z6QdO%uB=g4>2)x!4bw(y4z;FU1*!~2lhmhtD}Za+rj61XTv3pPRLsnYzn-e?@D*56B(v=Z$x%BTgHxX2HhP=MSWhWMslmc&lcpx zy#sFQ(ba_58MOR5pcL$(_TbzXTbyZW{`}jx0ev%T;r5&P<&E@7t{$d$eT;3X*t{!E z=}K#_>s23jH&AcqJK|cCjkarF*{z53Tf+*nNP5p(+RB_yZ$W?bTPAb?EHHO0z+`RK0AeIpEGZq|+x6r|dRhYmAMs z6!qHu)Sgj`9=(`R3}-wt>YF9k9o(rJt;)FV&*eI$h|@^EWmTB=I8ac(kd&vNho1MX z#JE7){+utFS%mc+)l{-R(PPR9SnrH>KG=LH4Qg5GS=twCywL611y z){q91WcHNS-m_;vGwN_bI22>u_@mqwj9kph;&j*?_Q=I<3#Gx#wkciPHhpi=d+8@( z-hn)-#~uyt@hx8VV#;Fg*uy^Yg8Boub(vlFW`3j+t$@2#w9aHZJy8>ZM=GfvkWjdrB> zhh)!n^*uhWMvnH|O|tgeRl`2vz8-)6pyQ}%8Qt%4jes)?EVI!$oZFu1%{3gI8soQx z|GwWDve{?%QTkiTqH_v+A2Y6Z5}gyhdznt>lzz^V^A2X_*tK1X zU!~?cA;+58Uw>W#YmvIo>_g@A+G<{kIGdpbX-S&*Q%(P9^mQ(2s-4+s&IYvyYo1(b z>4XLOIh619_^O4E0l({B7zX?r_p=3|%G#!7#I?5hNS&jO2AtOe$xDF4He7KAfLC01 z;(qycaI~H{qhE}c=!BkK9dO~?;kZ8hi+XC%=EYFi$j-n{%}EcUJILwBTBxF!ZzB98s`{$3;uBp zs|F!#r`q=5w-5B(wL9-)_pZq{%zSG!q-Qsyc%0#WwBKmJY*gyl^Iw2#cR4<1<6u4ib*{&cf;#m+0_AV88hnEqg0-iupT(W*9O~+zf0ry z6`A1M(D{46zCtDweD}GO`MWL1<+rVU`zlZKrer>Qg1tU%xadtf_WPTIo`tIyQOT>J zJIOabyCvvtYVce=uDKu3uTh`>6A+7E=;0R`GQn4x`$vx-CqMPw&3)D~TxQG%CT<(G zapL+x|G+7^<@tR_q?24piR!OPjH+#aR>BtQ2!81*x2|zlI!f98?9#k3`+Zvi_90#B zkrLOK%ZY4z$zCyaYs#H>$Tw2oTTr9zclx~dV z64B<5%ipXIZoqpE9FunjTDk?ASwHQ@qD6XRR<4{o=C8?_{qY=A`uA9KW~9T>zC8k2 zgRpL-!4U|@rOoI=++U(2S`1;o zeWZJyD-Sz0vr-%Fe#zB_lGkae?TJm4j(%g)l`mhd`QuV|-=%(M(^#n)d@C=z-r{5< z^JueZ#*tSnDY;2Ygzrvp{b791{+~#O=q#h&idCB4NmCh)yIGTF{*jE-WA8;M5xKe^ zrQxsbF(emPlInu@DH&TPr6zNda?Z6IsduuvHJ6K1+4BeH9iPHu+26@YW`0`stpJj= z5Y_~2VH@{%r??oolJNaHv$L!(%VgR;XV7w&FWNzA_9psoYPs_C9xr#tBfnmht4^cx zO@AG*E4HkB>x1>2Pdb+!cC3uLs=yw|?+IvQaP_n)*hNR%!rxEl?zDFpd_duLlPaqQjz8zP!HtwH&?Lv}qhGc`89`9ph! z>qw2z(A27wgShis9ZAp8f}wTkB5miy5gg}e<183mqnv^7boNS`Rea7UwdU+83e72_ zrr`|$x0Lap;cwv+z9P-@__I=9MTZt%fEz`g*q=Yo1n5 zGH>G%^sU`-MWo?t1L^@<@cc4vu}Jz-a=b-bWNV)C#o1j^`%Bl-lPnwl8nv-9bKxCV zmfZMOW9(wb(kQr^l_{9r)$VyF_{}kwL$$!n{{FIV;R}!pTSgN?IU>p)&BD$sP*X&D zDjLtR9Yj_iuQ-RQN1xO}o3ql6XQ$5so9kwrqiuC;Dx`nBesK0bri z=<8`?U9jEj5mN3^Pp*+g_LxwA3&Ur4#K5@z%OA^`HAXYe$yI_R4e-Vu+Z?@7N=E%4 ziy`@~fT%u=_sb{(YrKqVH~gFefy(Oi@_~NC1w!yD&3Yq@96Jg+RyMyBeu=V zF*SFCnE8)!=#}{Gj{LfXGG7nIkz0EHgemK<-mouSg!|^JH*wGK%Q&>w$Vfdd&utS# zqfs+fs|w!O;|`4cr8O;qbCKDaa4u46#LB}4%)HW~F~2#n5E7B`UBRjszfM(&(WQ=G z_^i>zuv3`!)ZnXM_$7zbB{roes&@OP4e|Y~)Z!VI+a|vx-~e}uMKk4WEAexyT|uo= z!*rsSS?}o?@7fqX|1;`^lE_u4Jh{tn+oDl#oYv;GwdPl|q$^bSYRk*UUL(miz>ekhikBffHQL_nzqBlU*I&6KpJL|3liDKn9eW7kZN?=T z^@(28bAGKfGtft_PT=)rE}o+&Xiw^377Mf&8r~9}&>wu0ng(?DZyFw)sepwcUog z*0vVkR7`GXuC_BeMDL?;5n;XAJ$4~0d0au$qYVEm%DGAux2Be@hdk8(hT2S;o1^u@-$8c~jgOseU7MAj%TS}V_w-I_Z4Zz?)UE7s2V}LBxEyTR z^@^pobg8-ZOoZk{TJ4-K-CQh;E2mp3e@@kHZFUcKM;6XZN$+4K8@0@2ug-yEl4vd@ z{%&D*KN(ylxueEj&o^z=^b--Tac3Fzd`v0gT5lCz8TCK1WQ${IzR`vW zx8EP>3cdlx-Ef+Z(Oe9BCZjQTpnmmu&)i`f=e{k!-uoKyzC^hW@)Y*9=Cx>D9M9DP z6}A`tUK+mwt=}$a1t03Mwo(blRTzHHn0P&i^k0vCZuWN|vP)iN$y*j`c5;=! zgs=gnFe&@{T(7{WobyVR=mpGK_Ioe!Ph}9p=aP@7{+%ZxqsImrbtEf}k3$!p=4_RX zpKZzIe-oH}ZYNU6^?MA(rfAxYYiYPOYooxoPUhs5*{&h8PeZTcX9{2~dsnXHaAz51 zk6261=a$W&?e-OwV7=A?W)tmHKQw68>L}^sk4ka9@eX`%k5pGk>2O;T1-b9oSvr?w2e0fUxkf- z+mow=@o%j8@08f(aM5206#F8Vj4F@8BYp?8jm%`AqQB%a8R&4%Oz#L_DWfmsy7lGS z6J%+ewH&3TzoVM#y<58lyQ$mX&GWx39@)449)EuEonxp8MPkC=LE+bJam{Pg#u3)L}P#b$4t{hlrBn_7aS{}%Ab)!ll;luxI-nv?sx^qq`4KWClVEzjjS zd*RokM(q+EjT*J{!|%x!pw*3i;p=U!8Kz~m0{7i5{pM_C&RWr0PrsY!)(Y(_*2~na zTx^|CO05~s{i9JcHVPTVc?ZA$vY&8qs)B_U*Ms?WVJyF5Y`{%1C9>IMmuPDE8xy{U z^ve@xf$~l3oq2f~*-^Bixnfmn3xdCa;MYKsywku@{O862|Q(qMhv5YI3`p0%lSFWZQ`0MfFK|U2m*qDAn*@>!2bs&2>GG_ literal 0 HcmV?d00001 diff --git a/src/Numerics/LinearAlgebra/Double/DenseVector.cs b/src/Numerics/LinearAlgebra/Double/DenseVector.cs index a7a801c2..ffa7a56d 100644 --- a/src/Numerics/LinearAlgebra/Double/DenseVector.cs +++ b/src/Numerics/LinearAlgebra/Double/DenseVector.cs @@ -752,6 +752,510 @@ namespace MathNet.Numerics.LinearAlgebra.Double return ret; } + /// + /// Returns the value of the absolute minimum element. + /// + /// The value of the absolute minimum element. + public override double AbsoluteMinimum() + { + return Math.Abs(this.Data[AbsoluteMinimumIndex()]); + } + + /// + /// Returns the index of the absolute minimum element. + /// + /// The index of absolute minimum element. + public override int AbsoluteMinimumIndex() + { + int index = 0; + double min = System.Math.Abs(this.Data[index]); + for (int i = 1; i < Count; i++) + { + double test = System.Math.Abs(this.Data[i]); + if (test < min) + { + index = i; + min = test; + } + } + + return index; + } + + /// + /// Creates a vector containing specified elements. + /// + /// The first element to begin copying from. + /// The number of elements to copy. + /// A vector containing a copy of the specified elements. + /// If is not positive or + /// greater than or equal to the size of the vector. + /// If + is greater than or equal to the size of the vector. + /// + /// If is not positive. + public override Vector SubVector(int index, int length) + { + if (index < 0 || index >= Count) + { + throw new ArgumentOutOfRangeException("start"); + } + + if (length <= 0) + { + throw new ArgumentOutOfRangeException("length"); + } + + if (index + length > Count) + { + throw new ArgumentOutOfRangeException("start"); + } + + DenseVector result = new DenseVector(length); + + CommonParallel.For( + index, + index + length, + i => result.Data[i - index] = this.Data[i]); + return result; + } + + /// + /// Set the values of this vector to the given values. + /// + /// The array containing the values to use. + /// If is . + /// If is not the same size as this vector. + public override void SetValues(double[] values) + { + if (values == null) + { + throw new ArgumentNullException("values"); + } + + if (values.Length != Count) + { + throw new ArgumentException("values", Resources.ArgumentVectorsSameLength); + } + + CommonParallel.For( + 0, + values.Length, + i => this.Data[i] = values[i]); + } + + /// + /// Returns the value of maximum element. + /// + /// The value of maximum element. + public override double Maximum() + { + return this.Data[MaximumIndex()]; + } + + /// + /// Returns the index of the absolute maximum element. + /// + /// The index of absolute maximum element. + public override int MaximumIndex() + { + int index = 0; + double max = this.Data[0]; + for (int i = 1; i < Count; i++) + { + if (max < this.Data[i]) + { + index = i; + max = this.Data[i]; + } + } + + return index; + } + + /// + /// Returns the value of the minimum element. + /// + /// The value of the minimum element. + public override double Minimum() + { + return this.Data[MinimumIndex()]; + } + + /// + /// Returns the index of the minimum element. + /// + /// The index of minimum element. + public override int MinimumIndex() + { + int index = 0; + double min = this.Data[0]; + for (int i = 1; i < Count; i++) + { + if (min > this.Data[i]) + { + index = i; + min = this.Data[i]; + } + } + + return index; + } + + /// + /// Computes the sum of the vector's elements. + /// + /// The sum of the vector's elements. + public override double Sum() + { + double result = 0; + for (int i = 0; i < Count; i++) + { + result += this.Data[i]; + } + + return result; + } + + /// + /// Computes the sum of the absolute value of the vector's elements. + /// + /// The sum of the absolute value of the vector's elements. + public override double SumMagnitudes() + { + double result = 0; + for (int i = 0; i < Count; i++) + { + result += Math.Abs(this.Data[i]); + } + + return result; + } + + /// + /// Pointwise multiplies this vector with another vector. + /// + /// The vector to pointwise multiply with this one. + /// If the other vector is . + /// If this vector and are not the same size. + /// A new vector that is the pointwise multiplication of this vector and . + public virtual DenseVector PointWiseMultiply(DenseVector other) + { + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + DenseVector result = new DenseVector(Count); + PointWiseMultiply(other, result); + return result; + } + + /// + /// Pointwise multiplies this vector with another vector and stores the result into the result vector. + /// + /// The vector to pointwise multiply with this one. + /// The vector to store the result of the pointwise multiplication. + /// If the other vector is . + /// If the result vector is . + /// If this vector and are not the same size. + /// If this vector and are not the same size. + public virtual void PointWiseMultiply(DenseVector other, DenseVector result) + { + if (result == null) + { + throw new ArgumentNullException("result"); + } + + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + if (Count != result.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "result"); + } + + CommonParallel.For( + 0, + this.Count, + index => result.Data[index] = this.Data[index] * other.Data[index]); + } + + /// + /// Pointwise add this vector with another vector. + /// + /// The vector to pointwise add with this one. + /// If the other vector is . + /// If this vector and are not the same size. + /// A new vector that is the pointwise addition of this vector and . + public virtual DenseVector PointWiseAdd(DenseVector other) + { + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + DenseVector result = new DenseVector(Count); + PointWiseAdd(other, result); + return result; + } + + /// + /// Pointwise add this vector with another vector and stores the result into the result vector. + /// + /// The vector to pointwise add with this one. + /// The vector to store the result of the pointwise addition. + /// If the other vector is . + /// If the result vector is . + /// If this vector and are not the same size. + /// If this vector and are not the same size. + public virtual void PointWiseAdd(DenseVector other, DenseVector result) + { + if (result == null) + { + throw new ArgumentNullException("result"); + } + + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + if (Count != result.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "result"); + } + + CommonParallel.For( + 0, + this.Count, + index => result.Data[index] = this.Data[index] + other.Data[index]); + } + + /// + /// Pointwise subtarct this vector with another vector. + /// + /// The vector to pointwise subtract from this one. + /// If the other vector is . + /// If this vector and are not the same size. + /// A new vector that is the pointwise subtraction of this vector and . + public virtual DenseVector PointWiseSubtract(DenseVector other) + { + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + DenseVector result = new DenseVector(Count); + PointWiseSubtract(other, result); + return result; + } + + /// + /// Pointwise subtract this vector with another vector and stores the result into the result vector. + /// + /// The vector to pointwise subtract from this one. + /// The vector to store the result of the pointwise subtraction. + /// If the other vector is . + /// If the result vector is . + /// If this vector and are not the same size. + /// If this vector and are not the same size. + public virtual void PointWiseSubtract(DenseVector other, DenseVector result) + { + if (result == null) + { + throw new ArgumentNullException("result"); + } + + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + if (Count != result.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "result"); + } + + CommonParallel.For( + 0, + this.Count, + index => result.Data[index] = this.Data[index] - other.Data[index]); + } + + /// + /// Pointwise divide this vector with another vector. + /// + /// The vector to pointwise divide this one by. + /// If the other vector is . + /// If this vector and are not the same size. + /// A new vector that is the pointwise division of this vector and . + public virtual DenseVector PointWiseDivide(DenseVector other) + { + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + DenseVector result = new DenseVector(Count); + PointWiseDivide(other, result); + return result; + } + + /// + /// Pointwise divide this vector with another vector and stores the result into the result vector. + /// + /// The vector to pointwise divide this one by. + /// The vector to store the result of the pointwise division. + /// If the other vector is . + /// If the result vector is . + /// If this vector and are not the same size. + /// If this vector and are not the same size. + public virtual void PointWiseDivide(DenseVector other, DenseVector result) + { + if (result == null) + { + throw new ArgumentNullException("result"); + } + + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + if (Count != result.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "result"); + } + + CommonParallel.For( + 0, + this.Count, + index => result.Data[index] = this.Data[index] / other.Data[index]); + } + + /// + /// Dyadic product of two vectors + /// + /// First vector + /// Second vector + /// Matrix M[i,j] = u[i]*v[j] + /// If the u vector is . + /// If the v vector is . + public static DenseMatrix DyadicProduct(DenseVector u, DenseVector v) + { + if (u == null) + { + throw new ArgumentNullException("u"); + } + + if (v == null) + { + throw new ArgumentNullException("v"); + } + + DenseMatrix matrix = new DenseMatrix(u.Count, v.Count); + CommonParallel.For( + 0, + u.Count, + i => CommonParallel.For(0, v.Count, j => matrix.At(i, j, u.Data[i] * v.Data[j]))); + return matrix; + } + + /// + /// Generates vector with random elements + /// + /// Dimensionality of vector. + /// + /// An n-dimensional vector with uniformly distributed + /// random elements in [0, 1) interval. + /// + /// If the n vector is non poisitive. + public new virtual DenseVector Random(int n) + { + // use any class which inherits the AbstractRandomNumberGenerator + return Random(n, new MathNet.Numerics.Random.SystemCryptoRandomNumberGenerator()); + } + + /// + /// Generates a vector with random elements + /// + /// Number of elements in the vector. + /// Continuous Random Distribution or Source + /// + /// A vector with n-random elements distributed according + /// to the specified random distribution. + /// + /// If the n vector is non poisitive. + public new virtual DenseVector Random(int n, MathNet.Numerics.Random.AbstractRandomNumberGenerator randomDistribution) + { + if (n < 0) + { + throw new ArgumentException(Resources.ArgumentMustBePositive, "n"); + } + + DenseVector v = new DenseVector(n); + CommonParallel.For( + 0, + v.Count, + index => v.Data[index] = randomDistribution.NextDouble()); + return v; + } + + /// + /// Tensor Product (Dyadic) of this and another vector. + /// + /// The vector to operate on. + /// + /// Matrix M[i,j] = this[i] * v[j]. + /// + /// + public Matrix TensorMultiply(DenseVector v) + { + return DyadicProduct(this, v); + } + #region Vector Norms /// diff --git a/src/Numerics/LinearAlgebra/Double/Matrix.Arithmetic.cs b/src/Numerics/LinearAlgebra/Double/Matrix.Arithmetic.cs index e3b7d47b..855ab364 100644 --- a/src/Numerics/LinearAlgebra/Double/Matrix.Arithmetic.cs +++ b/src/Numerics/LinearAlgebra/Double/Matrix.Arithmetic.cs @@ -652,26 +652,26 @@ namespace MathNet.Numerics.LinearAlgebra.Double throw new ArgumentException(Resources.ArgumentMatrixSameColumnDimension); } - CommonParallel.For( - 0, - this.RowCount, - i => - { - for (int j = 0; j < this.ColumnCount; j++) - { - result.At(i, j, At(i, j)); - } - }); - - CommonParallel.For( - 0, - right.RowCount, - i => - { - for (int j = 0; j < right.ColumnCount; j++) - { - result.At(i, j + ColumnCount, right.At(i, j)); - } + CommonParallel.Invoke( + () => + { + CommonParallel.For( + 0, + this.RowCount, + i => + { + CommonParallel.For(0, this.ColumnCount, j => result.At(i, j, At(i, j))); + }); + }, + () => + { + CommonParallel.For( + 0, + right.RowCount, + i => + { + CommonParallel.For(0, right.ColumnCount, j => result.At(i, j + ColumnCount, right.At(i, j))); + }); }); } @@ -727,27 +727,27 @@ namespace MathNet.Numerics.LinearAlgebra.Double { throw new ArgumentException("result", Resources.ArgumentMatrixDimensions); } - - CommonParallel.For( - 0, - this.RowCount, - i => + + CommonParallel.Invoke( + () => { - for (int j = 0; j < this.ColumnCount; j++) - { - result.At(i, j, At(i, j)); - } - }); - - CommonParallel.For( - 0, - lower.RowCount, - i => + CommonParallel.For( + 0, + this.RowCount, + i => + { + CommonParallel.For(0, this.ColumnCount, j => result.At(i, j, At(i, j))); + }); + }, + () => { - for (int j = 0; j < lower.ColumnCount; j++) - { - result.At(i + RowCount, j, lower.At(i, j)); - } + CommonParallel.For( + 0, + lower.RowCount, + i => + { + CommonParallel.For(0, lower.ColumnCount, j => result.At(i + RowCount, j, lower.At(i, j))); + }); }); } @@ -817,27 +817,36 @@ namespace MathNet.Numerics.LinearAlgebra.Double throw new ArgumentException("result", Resources.ArgumentMatrixDimensions); } - CommonParallel.For( - 0, - this.RowCount, - i => + CommonParallel.Invoke( + () => { - for (var j = 0; j < this.ColumnCount; j++) - { - result.At(i, j, At(i, j)); - } + CommonParallel.For( + 0, + this.RowCount, + i => + { + CommonParallel.For(0, this.ColumnCount, j => result.At(i, j, At(i, j))); + }); + }, + () => + { + CommonParallel.For( + 0, + lower.RowCount, + i => + { + CommonParallel.For(0, lower.ColumnCount, j => result.At(i + RowCount, j + ColumnCount, lower.At(i, j))); + }); }); + } - CommonParallel.For( - 0, - lower.RowCount, - i => - { - for (var j = 0; j < lower.ColumnCount; j++) - { - result.At(i + RowCount, j + ColumnCount, lower.At(i, j)); - } - }); + /// + /// Calculates the rank of the matrix + /// + /// effective numerical rank, obtained from SVD + public virtual int Rank() + { + throw new NotImplementedException(); } } } \ No newline at end of file diff --git a/src/Numerics/LinearAlgebra/Double/Matrix.cs b/src/Numerics/LinearAlgebra/Double/Matrix.cs index ca2f0a57..d36cd2fa 100644 --- a/src/Numerics/LinearAlgebra/Double/Matrix.cs +++ b/src/Numerics/LinearAlgebra/Double/Matrix.cs @@ -654,6 +654,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double ret.At(j, i, At(i, j)); } } + return ret; } } diff --git a/src/Numerics/LinearAlgebra/Double/Vector.cs b/src/Numerics/LinearAlgebra/Double/Vector.cs index 27b67cd0..360f1e63 100644 --- a/src/Numerics/LinearAlgebra/Double/Vector.cs +++ b/src/Numerics/LinearAlgebra/Double/Vector.cs @@ -609,6 +609,270 @@ namespace MathNet.Numerics.LinearAlgebra.Double index => result[index] = this[index] * other[index]); } + /// + /// Pointwise add this vector with another vector. + /// + /// The vector to pointwise add with this one. + /// If the other vector is . + /// If this vector and are not the same size. + /// A new vector that is the pointwise addition of this vector and . + public virtual Vector PointWiseAdd(Vector other) + { + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + Vector result = CreateVector(Count); + PointWiseAdd(other, result); + return result; + } + + /// + /// Pointwise add this vector with another vector and stores the result into the result vector. + /// + /// The vector to pointwise add with this one. + /// The vector to store the result of the pointwise addition. + /// If the other vector is . + /// If the result vector is . + /// If this vector and are not the same size. + /// If this vector and are not the same size. + public virtual void PointWiseAdd(Vector other, Vector result) + { + if (result == null) + { + throw new ArgumentNullException("result"); + } + + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + if (Count != result.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "result"); + } + + CommonParallel.For( + 0, + this.Count, + index => result[index] = this[index] + other[index]); + } + + /// + /// Pointwise subtarct this vector with another vector. + /// + /// The vector to pointwise subtract from this one. + /// If the other vector is . + /// If this vector and are not the same size. + /// A new vector that is the pointwise subtraction of this vector and . + public virtual Vector PointWiseSubtract(Vector other) + { + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + Vector result = CreateVector(Count); + PointWiseSubtract(other, result); + return result; + } + + /// + /// Pointwise subtract this vector with another vector and stores the result into the result vector. + /// + /// The vector to pointwise subtract from this one. + /// The vector to store the result of the pointwise subtraction. + /// If the other vector is . + /// If the result vector is . + /// If this vector and are not the same size. + /// If this vector and are not the same size. + public virtual void PointWiseSubtract(Vector other, Vector result) + { + if (result == null) + { + throw new ArgumentNullException("result"); + } + + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + if (Count != result.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "result"); + } + + CommonParallel.For( + 0, + this.Count, + index => result[index] = this[index] - other[index]); + } + + /// + /// Pointwise divide this vector with another vector. + /// + /// The vector to pointwise divide this one by. + /// If the other vector is . + /// If this vector and are not the same size. + /// A new vector that is the pointwise division of this vector and . + public virtual Vector PointWiseDivide(Vector other) + { + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + Vector result = CreateVector(Count); + PointWiseDivide(other, result); + return result; + } + + /// + /// Pointwise divide this vector with another vector and stores the result into the result vector. + /// + /// The vector to pointwise divide this one by. + /// The vector to store the result of the pointwise division. + /// If the other vector is . + /// If the result vector is . + /// If this vector and are not the same size. + /// If this vector and are not the same size. + public virtual void PointWiseDivide(Vector other, Vector result) + { + if (result == null) + { + throw new ArgumentNullException("result"); + } + + if (other == null) + { + throw new ArgumentNullException("other"); + } + + if (Count != other.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); + } + + if (Count != result.Count) + { + throw new ArgumentException(Resources.ArgumentVectorsSameLength, "result"); + } + + CommonParallel.For( + 0, + this.Count, + index => result[index] = this[index] / other[index]); + } + + /// + /// Dyadic product of two vectors + /// + /// First vector + /// Second vector + /// Matrix M[i,j] = u[i]*v[j] + /// If the u vector is . + /// If the v vector is . + public static DenseMatrix DyadicProduct(Vector u, Vector v) + { + if (u == null) + { + throw new ArgumentNullException("u"); + } + + if (v == null) + { + throw new ArgumentNullException("v"); + } + + DenseMatrix matrix = new DenseMatrix(u.Count, v.Count); + CommonParallel.For( + 0, + u.Count, + i => CommonParallel.For(0, v.Count, j => matrix.At(i, j, u[i] * v[j]))); + return matrix; + } + + /// + /// Generates vector with random elements + /// + /// Dimensionality of vector. + /// + /// An n-dimensional vector with uniformly distributed + /// random elements in [0, 1) interval. + /// + /// If the n vector is non poisitive. + public virtual Vector Random(int length) + { + // Just use any class which inherits the AbstractRandomNumberGenerator + return Random(length, new MathNet.Numerics.Random.SystemCryptoRandomNumberGenerator()); + } + + /// + /// Generates a vector with random elements + /// + /// Number of elements in the vector. + /// Continuous Random Distribution or Source + /// + /// A vector with n-random elements distributed according + /// to the specified random distribution. + /// + /// If the n vector is non poisitive. + public virtual Vector Random(int length, MathNet.Numerics.Random.AbstractRandomNumberGenerator randomDistribution) + { + if (length < 0) + { + throw new ArgumentException(Resources.ArgumentMustBePositive, "length"); + } + + Vector v = CreateVector(length); + CommonParallel.For( + 0, + v.Count, + index => v[index] = randomDistribution.NextDouble()); + return v; + } + + /// + /// Tensor Product (Dyadic) of this and another vector. + /// + /// The vector to operate on. + /// + /// Matrix M[i,j] = this[i] * v[j]. + /// + /// + public Matrix TensorMultiply(Vector v) + { + return DyadicProduct(this, v); + } + /// /// Returns the value of the absolute minimum element. /// @@ -635,10 +899,97 @@ namespace MathNet.Numerics.LinearAlgebra.Double min = test; } } + return index; + } + + /// + /// Returns the value of maximum element. + /// + /// The value of maximum element. + public virtual double Maximum() + { + return this[MaximumIndex()]; } + /// + /// Returns the index of the absolute maximum element. + /// + /// The index of absolute maximum element. + public virtual int MaximumIndex() + { + int index = 0; + double max = this[0]; + for (int i = 1; i < Count; i++) + { + if (max < this[i]) + { + index = i; + max = this[i]; + } + } + + return index; + } + + /// + /// Returns the value of the minimum element. + /// + /// The value of the minimum element. + public virtual double Minimum() + { + return this[MinimumIndex()]; + } + /// + /// Returns the index of the minimum element. + /// + /// The index of minimum element. + public virtual int MinimumIndex() + { + int index = 0; + double min = this[0]; + for (int i = 1; i < Count; i++) + { + if (min > this[i]) + { + index = i; + min = this[i]; + } + } + + return index; + } + + /// + /// Computes the sum of the vector's elements. + /// + /// The sum of the vector's elements. + public virtual double Sum() + { + double result = 0; + for (int i = 0; i < Count; i++) + { + result += this[i]; + } + + return result; + } + + /// + /// Computes the sum of the absolute value of the vector's elements. + /// + /// The sum of the absolute value of the vector's elements. + public virtual double SumMagnitudes() + { + double result = 0; + for (int i = 0; i < Count; i++) + { + result += Math.Abs(this[i]); + } + + return result; + } #endregion #region Arithmetic Operator Overloading @@ -1110,32 +1461,63 @@ namespace MathNet.Numerics.LinearAlgebra.Double /// /// Creates a vector containing specified elements. /// - /// The first element to begin copying from. + /// The first element to begin copying from. /// The number of elements to copy. /// A vector containing a copy of the specified elements. - /// If is not positive or + /// If is not positive or /// greater than or equal to the size of the vector. - /// If + is greater than or equal to the size of the vector. + /// If + is greater than or equal to the size of the vector. /// /// If is not positive. - public virtual Vector SubVector(int start, int length) + public virtual Vector SubVector(int index, int length) { - if (start < 0 || start >= Count) + if (index < 0 || index >= Count) { throw new ArgumentOutOfRangeException("start"); } - if (start + length > Count) + + if (length <= 0) + { + throw new ArgumentOutOfRangeException("length"); + } + + if (index + length > Count) { throw new ArgumentOutOfRangeException("start"); } Vector result = CreateVector(length); - - CommonParallel.For(start, - start + length, index => result[index-start] = this[index]); + + CommonParallel.For( + index, + index + length, + i => result[i - index] = this[i]); return result; } + /// + /// Set the values of this vector to the given values. + /// + /// The array containing the values to use. + /// If is . + /// If is not the same size as this vector. + public virtual void SetValues(double[] values) + { + if (values == null) + { + throw new ArgumentNullException("values"); + } + + if (values.Length != Count) + { + throw new ArgumentException("values", Resources.ArgumentVectorsSameLength); + } + + CommonParallel.For( + 0, + values.Length, + i => this[i] = values[i]); + } #endregion #region Implemented Interfaces diff --git a/src/Numerics/Settings.StyleCop b/src/Numerics/Settings.StyleCop new file mode 100644 index 00000000..a27e5f5c --- /dev/null +++ b/src/Numerics/Settings.StyleCop @@ -0,0 +1,6 @@ + + + ..\Settings.StyleCop + Linked + + \ No newline at end of file diff --git a/src/UnitTests/LinearAlgebraTests/Double/DenseVectorTests.cs b/src/UnitTests/LinearAlgebraTests/Double/DenseVectorTests.cs index 5095d79b..7b5cc195 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/DenseVectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/DenseVectorTests.cs @@ -33,6 +33,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double using System.Collections.Generic; using MbUnit.Framework; using LinearAlgebra.Double; + using System; public class DenseVectorTests : VectorTests { @@ -254,22 +255,400 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double } [Test] - [MultipleAsserts] - public void CanCopyToNonDenseVector() + public void CanFindAbsoluteMinimumIndexInDenseVector() { - var vector = new DenseVector(_data); - var other = new UserDefinedVector(_data.Length); - vector.CopyTo(other, 1,1,2); + DenseVector source = new DenseVector(_data); + int expected = 0; + int actual = source.AbsoluteMinimumIndex(); + Assert.AreEqual(expected, actual); + } - Assert.AreEqual(vector[1], other[1]); - Assert.AreEqual(vector[2], other[2]); - vector.CopyTo(other); + [Test] + public void CanFindAbsoluteMinimumInDenseVector() + { + DenseVector source = new DenseVector(_data); + double expected = 1; + double actual = source.AbsoluteMinimum(); + Assert.AreEqual(expected, actual); - for(var i = 0; i < vector.Count; i++) + } + + [Test] + [Row(0, 5)] + [Row(2, 2)] + [Row(1, 4)] + [Row(6, 10, ExpectedException = typeof(ArgumentOutOfRangeException))] + [Row(1, 10, ExpectedException = typeof(ArgumentOutOfRangeException))] + [Row(1, -10, ExpectedException = typeof(ArgumentOutOfRangeException))] + public void CanCalculateSubVector(int index, int length) + { + DenseVector vector = new DenseVector(_data); + Vector sub = vector.SubVector(index, length); + Assert.AreEqual(length, sub.Count); + for (int i = 0; i < length; i++) { - Assert.AreEqual(vector[i], other[i]); + Assert.AreEqual(vector[i + index], sub[i]); + } + } + + [Test] + public void CanFindMaximumIndexInDenseVector() + { + DenseVector vector = new DenseVector(_data); + + int expected = 4; + int actual = vector.MaximumIndex(); + + Assert.AreEqual(expected, actual); + } + + [Test] + public void CanFindMaximumInDenseVector() + { + DenseVector vector = new DenseVector(_data); + double expected = 5; + double actual = vector.Maximum(); + Assert.AreEqual(expected, actual); + } + + [Test] + public void CanFindMinimumIndexOfDenseVector() + { + DenseVector vector = new DenseVector(_data); + int expected = 0; + int actual = vector.MinimumIndex(); + Assert.AreEqual(expected, actual); + } + + [Test] + public void CanFindMinimumOfDenseVector() + { + DenseVector vector = new DenseVector(_data); + double expected = 1; + double actual = vector.Minimum(); + Assert.AreEqual(expected, actual); + } + + [Test] + public void SumOfDenseVector() + { + double[] testData = { -20, -10, 10, 20, 30, }; + DenseVector vector = new DenseVector(testData); + double actual = vector.Sum(); + double expected = 30; + Assert.AreEqual(expected, actual); + } + + [Test] + public void SumMagnitudesOfDenseVector() + { + double[] testData = { -20, -10, 10, 20, 30, }; + DenseVector vector = new DenseVector(testData); + double actual = vector.SumMagnitudes(); + double expected = 90; + Assert.AreEqual(expected, actual); + } + + [Test] + [ExpectedArgumentNullException] + public new void SetValuesWithNullParameterShouldThrowException() + { + DenseVector vector = new DenseVector(_data); + vector.SetValues(null); + } + + [Test] + [ExpectedArgumentException] + public new void SetValuesWithNonEqualDataLengthShouldThrowException() + { + DenseVector vector = new DenseVector(_data.Length + 2); + vector.SetValues(_data); + } + + [Test] + public new void PointWiseMultiply() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = new DenseVector(vector1.Count); + vector1.PointWiseMultiply(vector2, result); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] * _data[i], result[i]); + } + } + + [Test] + [ExpectedArgumentNullException] + public new void PointWiseMultiplyWithOtherNullShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = null; + DenseVector result = new DenseVector(vector1.Count); + vector1.PointWiseMultiply(vector2, result); + } + + [Test] + [ExpectedArgumentNullException] + public new void PointWiseMultiplyWithResultNullShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = null; + vector1.PointWiseMultiply(vector2, result); + } + + [Test] + [ExpectedArgumentException] + public new void PointWiseMultiplyWithInvalidResultLengthShouldThrowException() + { + Vector vector1 = new DenseVector(_data); + Vector vector2 = new DenseVector(_data); + Vector result = CreateVector(vector1.Count + 1); + vector1.PointWiseMultiply(vector2, result); + } + + [Test] + public new void PointWiseMultiplyWithResult() + { + Vector vector1 = new DenseVector(_data); + Vector vector2 = new DenseVector(_data); + Vector result = vector1.PointWiseMultiply(vector2); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] * _data[i], result[i]); + } + } + + [Test] + public new void PointWiseAdd() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = new DenseVector(vector1.Count); + vector1.PointWiseAdd(vector2, result); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] + _data[i], result[i]); + } + } + + [Test] + [ExpectedArgumentNullException] + public new void PointWiseAddWithOtherNullShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = null; + DenseVector result = new DenseVector(vector1.Count); + vector1.PointWiseAdd(vector2, result); + } + + [Test] + [ExpectedArgumentNullException] + public new void PointWiseAddWithResultNullShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = null; + vector1.PointWiseAdd(vector2, result); + } + + [Test] + [ExpectedArgumentException] + public new void PointWiseAddWithInvalidResultLengthShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = new DenseVector(vector1.Count + 1); + vector1.PointWiseAdd(vector2, result); + } + + [Test] + public new void PointWiseAddWithResult() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = vector1.PointWiseAdd(vector2); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] + _data[i], result[i]); + } + } + + [Test] + public new void PointWiseSubtract() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = new DenseVector(vector1.Count); + vector1.PointWiseSubtract(vector2, result); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] - _data[i], result[i]); + } + } + + [Test] + [ExpectedArgumentNullException] + public new void PointWiseSubtractWithOtherNullShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = null; + DenseVector result = new DenseVector(vector1.Count); + vector1.PointWiseSubtract(vector2, result); + } + + [Test] + [ExpectedArgumentNullException] + public new void PointWiseSubtractWithResultNullShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + Vector result = null; + vector1.PointWiseSubtract(vector2, result); + } + + [Test] + [ExpectedArgumentException] + public new void PointWiseSubtractWithInvalidResultLengthShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = new DenseVector(vector1.Count + 1); + vector1.PointWiseSubtract(vector2, result); + } + + [Test] + public new void PointWiseSubtractWithResult() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = vector1.PointWiseSubtract(vector2); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] - _data[i], result[i]); + } + } + + [Test] + public new void PointWiseDivide() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = new DenseVector(vector1.Count); + vector1.PointWiseDivide(vector2, result); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] / _data[i], result[i]); + } + } + + [Test] + [ExpectedArgumentNullException] + public new void PointWiseDivideWithOtherNullShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = null; + DenseVector result = new DenseVector(vector1.Count); + vector1.PointWiseDivide(vector2, result); + } + + [Test] + [ExpectedArgumentNullException] + public new void PointWiseDivideWithResultNullShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = null; + vector1.PointWiseDivide(vector2, result); + } + + [Test] + [ExpectedArgumentException] + public new void PointWiseDivideWithInvalidResultLengthShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = new DenseVector(vector1.Count + 1); + vector1.PointWiseDivide(vector2, result); + } + + [Test] + public new void PointWiseDivideWithResult() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + DenseVector result = vector1.PointWiseDivide(vector2); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] / _data[i], result[i]); + } + } + + [Test] + public new void CanCalculateDyadicProduct() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + Matrix m = DenseVector.DyadicProduct(vector1, vector2); + for (int i = 0; i < vector1.Count; i++) + { + for (int j = 0; j < vector2.Count; j++) + { + Assert.AreEqual(m[i, j], vector1[i] * vector2[j]); + } + } + } + + [Test] + [ExpectedArgumentNullException] + public new void DyadicProductWithFirstParameterNullShouldThrowException() + { + DenseVector vector1 = null; + DenseVector vector2 = new DenseVector(_data); + DenseVector.DyadicProduct(vector1, vector2); + } + + [Test] + [ExpectedArgumentNullException] + public new void DyadicProductWithSecondParameterNullShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = null; + Vector.DyadicProduct(vector1, vector2); + } + + [Test] + public new void CanCalculateTensorMultiply() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = new DenseVector(_data); + Matrix m = vector1.TensorMultiply(vector2); + for (int i = 0; i < vector1.Count; i++) + { + for (int j = 0; j < vector2.Count; j++) + { + Assert.AreEqual(m[i, j], vector1[i] * vector2[j]); + } } + } + + [Test] + [ExpectedArgumentNullException] + public new void TensorMultiplyWithNullParameterNullShouldThrowException() + { + DenseVector vector1 = new DenseVector(_data); + DenseVector vector2 = null; + vector1.TensorMultiply(vector2); + } + + [Test] + [ExpectedArgumentException] + public new void RandomWithNumberOfElementsLessThanZeroShouldThrowException() + { + DenseVector vector = new DenseVector(4); + vector = vector.Random(-3); } } } diff --git a/src/UnitTests/LinearAlgebraTests/Double/VectorTests.Arithmetic.cs b/src/UnitTests/LinearAlgebraTests/Double/VectorTests.Arithmetic.cs index a9b429f7..08efb8b1 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/VectorTests.Arithmetic.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/VectorTests.Arithmetic.cs @@ -782,6 +782,171 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double } } + [Test] + public void PointWiseAdd() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = CreateVector(vector1.Count); + vector1.PointWiseAdd(vector2, result); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] + _data[i], result[i]); + } + } + + [Test] + [ExpectedArgumentNullException] + public void PointWiseAddWithOtherNullShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = null; + Vector result = CreateVector(vector1.Count); + vector1.PointWiseAdd(vector2, result); + } + + [Test] + [ExpectedArgumentNullException] + public void PointWiseAddWithResultNullShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = null; + vector1.PointWiseAdd(vector2, result); + } + + [Test] + [ExpectedArgumentException] + public void PointWiseAddWithInvalidResultLengthShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = CreateVector(vector1.Count + 1); + vector1.PointWiseAdd(vector2, result); + } + + [Test] + public void PointWiseAddWithResult() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = vector1.PointWiseAdd(vector2); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] + _data[i], result[i]); + } + } + + [Test] + public void PointWiseSubtract() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = CreateVector(vector1.Count); + vector1.PointWiseSubtract(vector2, result); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] - _data[i], result[i]); + } + } + + [Test] + [ExpectedArgumentNullException] + public void PointWiseSubtractWithOtherNullShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = null; + Vector result = CreateVector(vector1.Count); + vector1.PointWiseSubtract(vector2, result); + } + + [Test] + [ExpectedArgumentNullException] + public void PointWiseSubtractWithResultNullShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = null; + vector1.PointWiseSubtract(vector2, result); + } + + [Test] + [ExpectedArgumentException] + public void PointWiseSubtractWithInvalidResultLengthShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = CreateVector(vector1.Count + 1); + vector1.PointWiseSubtract(vector2, result); + } + + [Test] + public void PointWiseSubtractWithResult() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = vector1.PointWiseSubtract(vector2); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] - _data[i], result[i]); + } + } + + [Test] + public void PointWiseDivide() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = CreateVector(vector1.Count); + vector1.PointWiseDivide(vector2, result); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] / _data[i], result[i]); + } + } + + [Test] + [ExpectedArgumentNullException] + public void PointWiseDivideWithOtherNullShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = null; + Vector result = CreateVector(vector1.Count); + vector1.PointWiseDivide(vector2, result); + } + + [Test] + [ExpectedArgumentNullException] + public void PointWiseDivideWithResultNullShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = null; + vector1.PointWiseDivide(vector2, result); + } + + [Test] + [ExpectedArgumentException] + public void PointWiseDivideWithInvalidResultLengthShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = CreateVector(vector1.Count + 1); + vector1.PointWiseDivide(vector2, result); + } + + [Test] + public void PointWiseDivideWithResult() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Clone(); + Vector result = vector1.PointWiseDivide(vector2); + for (int i = 0; i < vector1.Count; i++) + { + Assert.AreEqual(_data[i] / _data[i], result[i]); + } + } + [Test] public void CanFindAbsoluteMinimumIndex() { @@ -801,22 +966,153 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double } + [Test] + public void CanFindMaximumIndex() + { + Vector vector = CreateVector(_data); + + int expected = 4; + int actual = vector.MaximumIndex(); + + Assert.AreEqual(expected, actual); + } + + [Test] + public void CanFindMaximum() + { + Vector vector = CreateVector(_data); + + double expected = 5; + double actual = vector.Maximum(); + + Assert.AreEqual(expected, actual); + } + + [Test] + public void CanFindMinimumIndex() + { + Vector vector = CreateVector(_data); + + int expected = 0; + int actual = vector.MinimumIndex(); + + Assert.AreEqual(expected, actual); + } + + [Test] + public void CanFindMinimum() + { + Vector vector = CreateVector(_data); + + double expected = 1; + double actual = vector.Minimum(); + + Assert.AreEqual(expected, actual); + } + [Test] [Row(0, 5)] [Row(2, 2)] [Row(1, 4)] [Row(6, 10, ExpectedException = typeof(ArgumentOutOfRangeException))] [Row(1, 10, ExpectedException = typeof(ArgumentOutOfRangeException))] - public void SubVector(int start, int length) + [Row(1, -10, ExpectedException = typeof(ArgumentOutOfRangeException))] + public void SubVector(int index, int length) { Vector vector = CreateVector(_data); - Vector sub = vector.SubVector(start, length); + Vector sub = vector.SubVector(index, length); Assert.AreEqual(length, sub.Count); for (int i = 0; i < length; i++) { - Assert.AreEqual(vector[i + start], sub[i]); + Assert.AreEqual(vector[i + index], sub[i]); } } + [Test] + public void Sum() + { + double[] testData = { -20, -10, 10, 20, 30, }; + Vector vector = CreateVector(testData); + double actual = vector.Sum(); + double expected = 30; + Assert.AreEqual(expected, actual); + } + + [Test] + public void SumMagnitudes() + { + double[] testData = { -20, -10, 10, 20, 30, }; + Vector vector = CreateVector(testData); + double actual = vector.SumMagnitudes(); + double expected = 90; + Assert.AreEqual(expected, actual); + } + + [Test] + public void CanCalculateDyadicProduct() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = CreateVector(_data); + Matrix m = Vector.DyadicProduct(vector1,vector2); + for (int i = 0; i < vector1.Count; i++) + { + for (int j = 0; j < vector2.Count; j++) + { + Assert.AreEqual(m[i, j], vector1[i] * vector2[j]); + } + } + } + + [Test] + [ExpectedArgumentNullException] + public void DyadicProductWithFirstParameterNullShouldThrowException() + { + Vector vector1 = null; + Vector vector2 = CreateVector(_data); + Vector.DyadicProduct(vector1, vector2); + } + + [Test] + [ExpectedArgumentNullException] + public void DyadicProductWithSecondParameterNullShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = null; + Vector.DyadicProduct(vector1, vector2); + } + + [Test] + public void CanCalculateTensorMultiply() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = CreateVector(_data); + Matrix m = vector1.TensorMultiply(vector2); + for (int i = 0; i < vector1.Count; i++) + { + for (int j = 0; j < vector2.Count; j++) + { + Assert.AreEqual(m[i, j], vector1[i] * vector2[j]); + } + } + } + + [Test] + [ExpectedArgumentNullException] + public void TensorMultiplyWithNullParameterNullShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = null; + vector1.TensorMultiply(vector2); + } + + [Test] + [ExpectedArgumentException] + public void RandomWithNumberOfElementsLessThanZeroShouldThrowException() + { + Vector vector1 = CreateVector(_data); + Vector vector2 = vector1.Random(-5); + } + + } } \ No newline at end of file diff --git a/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs b/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs index 087f61ad..d7a626bd 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs @@ -252,9 +252,35 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double Assert.AreEqual(vector[i], matrix[0, i]); } } + + [Test] + public void CanSetValues() + { + Vector vector = CreateVector(_data); + vector.SetValues(_data); + for (int i = 0; i < _data.Length; i++) + { + Assert.AreEqual(vector[i], _data[i]); + } + } - protected abstract Vector CreateVector(int size); + [Test] + [ExpectedArgumentNullException] + public void SetValuesWithNullParameterShouldThrowException() + { + Vector vector = CreateVector(_data); + vector.SetValues(null); + } + + [Test] + [ExpectedArgumentException] + public void SetValuesWithNonEqualDataLengthShouldThrowException() + { + Vector vector = CreateVector(_data.Length + 2); + vector.SetValues(_data); + } + protected abstract Vector CreateVector(int size); protected abstract Vector CreateVector(IList data); } } \ No newline at end of file