Empirical othogonal functions and pure functions
- To: mathgroup at smc.vnet.net
- Subject: [mg84818] Empirical othogonal functions and pure functions
- From: mante <claude.mante at univmed.fr>
- Date: Tue, 15 Jan 2008 03:22:33 -0500 (EST)
Hello!
I need to othogonalize polynomials relatively to a fixed sampling
mesh {x1, ............., xp}, ie. to the *discrete* scalar product :
<P,Q>=Sum[P(xi) Q(xi),{i,p}].
This scalar product corresponds to the function :
EmpirScal[f_, g_, X_] := Dot[Table[f[X[[i]]], {i, Length@X}],
Table[g[X[[i]]], {i, Length@X}]];
Let's try with
rr = Table[x^i, {i, 0, 2}]
using first the "canonical" orthogonalization procedure :
Orthogonalize[rr, Integrate[#1*#2, {x, -1, 1}] & ]
->{1/Sqrt[2], Sqrt[3/2]*x, (3/2)*Sqrt[5/2]*(-(1/3) + x^2)}
Fine!
Now, putting for instance X = Range[3] we can note that :
Orthogonalize[rr, EmpirScal[#1, #2, X] & ]
does not work, because EmpirScal doesn't works itself :
In[94]:= EmpirScal[rr[[2]], rr[[3]]]
Out[94]= x[1]*(x^2)[1] + x[2]*(x^2)[2] + x[3]*(x^2)[3] + x[4]*(x^2)[4]
+ x[5]*(x^2)[5]
It seems that in this case x^k is not interpreted as a function, but as
the name of some function ; I don't understand why.
So, I tried to work with pure functions, superseding rr by tt :
In[53]:= tt = Table[Function[x, x^i], {i, 0, 2}]
Out[53]= {Function[x, x^i], Function[x, x^i], Function[x, x^i]}
This is not what I expected...
Then, I used an old module of mine, converting a polynomiak to a pure
function :
PolyToPure[pp_] := Module[{x, cc, pol, degre},
pol = Expand[pp];
x = First@Variables[N@pol];
degre = Check[Exponent[pol, x], 0];
cc = If[degre > 0, CoefficientList[pol, x], {pol}];
Function[x,
Apply[Plus,
Prepend[Table[cc[[i]] x^(i - 1), {i, 2, Length[cc]}], cc[[1]]]]]
];
In[122]:= PolyToPure[(1 - x)^3][z]
Out[122]= 1 - 3 z + 3 z^2 - z^3
Now, we can compute scalar products :
In[7]:= rr = Table[x^i, {i, 0, 2}]
ss = Map[PolyToPure, rr];
EmpirScal[ss[[2]], ss[[3]], X]
Out[7]= {1, x, x^2}
Out[9]= 36
But the final result is again unusable :
In[48]:= res = Orthogonalize[ss, EmpirScal[#1, #2, X] & ];
res[[1]]
Out[49]= (1/Sqrt[3])Function[x$, Plus @@ Prepend[ Table[cc$894[[i]]
x$^(i - 1), {i, 2, Length[cc$894]}],
cc$894[[1]]]]
Could you enlighten me?
Thanks,
Claude Manté