In[]:=
deploy
Thu 28 Jul 2022 11:35:37
Comparing versions
Comparing versions
In[]:=
d=300;numSamples=d;sigma=DiagonalMatrix[Table[1.,{i,1,d}]];dist=MultinormalDistribution[sigma];data=RandomVariate[dist,numSamples];data=Normalize/@data;(*Versionfromhttps://mathematica.stackexchange.com/a/37357/217*)GramSchmidt[w_?MatrixQ]:=Module[{v=ConstantArray[0,Length[w]]},Table[v[[n]]=w[[n]]-Sum[(v[[i]].w[[n]]/v[[i]].v[[i]])*v[[i]],{i,1,n-1}],{n,1,Length[w]}];v];(*modifiedversionfromhttps://mathematica.stackexchange.com/a/101463/217*)proj[u_,v_]:=v.u/u.uu;gsOrthogonal[vectorSet_?MatrixQ]:=Map[With[{norm=Norm[#]},If[norm>0,#,#]]&,Fold[Function[{spanVec,v},Join[spanVec,{v-Total@Map[proj[#,v]&,spanVec]}]][#1,#2]&,{vectorSet[[1]]},Drop[vectorSet,1]]];GramSchmidt2[M_]:=With[{qr=QRDecomposition[Transpose[M]]},Diagonal[Last[qr]]*First[qr]];Print["Built-in timing: ",First@Timing@Orthogonalize[data]]Print["version1 timing: ",First@Timing@GramSchmidt@data]Print["version2 timing: ",First@Timing@gsOrthogonal@data]Print["version3 timing: ",First@Timing@GramSchmidt2@data]Print["Correctness check: ",Max[Flatten@Abs[GramSchmidt2[data]-GramSchmidt[data]]]<]
-10
10
Built-in timing: 0.076631
version1 timing: 4.26753
version2 timing: 0.177025
version3 timing: 0.018694
Correctness check: True
Orthogonalize with custom dot product
Orthogonalize with custom dot product
In[]:=
data={{2,3,5},{7,11,13},{17,19,23}};f=&;result=Orthogonalize[data,f,Method->"GramSchmidt"]//N;Outer[f,result,result,1]//MatrixForm
Dot[#1,#2]
Norm[#1]Norm[#2]
Out[]//MatrixForm=
1. | 0.970876 | 0.939529 |
0.970876 | 1. | 0.966066 |
0.939529 | 0.966066 | 1. |
In[]:=
data={{2,3,5},{7,11,13},{17,19,23}};f=&;result=Orthogonalize[data,f,Method->"GramSchmidt"]//N;Outer[f,result,result,1]//MatrixForm
Dot[#1,#2]
Norm[#1]Norm[#2]
Out[]//MatrixForm=
1. | 0.970876 | 0.939529 |
0.970876 | 1. | 0.966066 |
0.939529 | 0.966066 | 1. |
In[]:=
data={{2,3,5},{7,11,13},{17,19,23}};f=Dot;result=Orthogonalize[data,f,Method->"GramSchmidt"]//N;Outer[f,result,result,1]//Chop//MatrixForm
Out[]//MatrixForm=
1. | 0 | 0 |
0 | 1. | 0 |
0 | 0 | 1. |
In[]:=
data={{2,3,5},{7,11,13},{17,19,23}};GramSchmidt[w_?MatrixQ]:=Module[{v=ConstantArray[0,Length[w]]},Table[v[[n]]=w[[n]]-Sum[(v[[i]].w[[n]]/v[[i]].v[[i]])*v[[i]],{i,1,n-1}],{n,1,Length[w]}];v];f=&;result=GramSchmidt[data];Outer[f,result,result,1]//MatrixForm
Dot[#1,#2]
Norm[#1]Norm[#2]
Out[]//MatrixForm=
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 1 |
Test with Gram-Schmidt
Test with Gram-Schmidt
In[]:=
data={{2,3,5},{7,11,13},{17,19,23}};GramSchmidt[w_?MatrixQ]:=Module[{v=ConstantArray[0,Length[w]]},Table[v[[n]]=w[[n]]-Sum[(v[[i]].w[[n]]/v[[i]].v[[i]])*v[[i]],{i,1,n-1}],{n,1,Length[w]}];v];f=&;result=GramSchmidt[data];Outer[f,result,result,1]//MatrixFormresult//MatrixForm
Dot[#1,#2]
Norm[#1]Norm[#2]
Out[]//MatrixForm=
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 1 |
Out[]//MatrixForm=
2 | 3 | 5 |
21 19 | 41 19 | - 33 19 |
48 13 | - 27 13 | - 3 13 |
Testing with gsOrthonormal
Testing with gsOrthonormal
In[]:=
data={{2,3,5},{7,11,13},{17,19,23}};proj[u_,v_]:=v.u/u.uu;gsOrthogonal[vectorSet_?MatrixQ]:=Map[With[{norm=Norm[#]},If[norm>0,#,#]]&,Fold[Function[{spanVec,v},Join[spanVec,{v-Total@Map[proj[#,v]&,spanVec]}]][#1,#2]&,{vectorSet[[1]]},Drop[vectorSet,1]]];result=gsOrthonormal[data];result//MatrixForm
Out[]//MatrixForm=
2 | 3 | 5 |
21 19 | 41 19 | - 33 19 |
48 13 | - 27 13 | - 3 13 |