HI everyone,
I am having a curious problem I cannot figure out. I have 2 variables (say Y and X) for which I want to extract the derivative of a smooth function linking the two. I can do it "manually" if my two variable are in a table. I simply fit a smooth spline, save the predicted formula, go in the formula editor and use the derivative option in the editor itself. Now I want to do the same but in an automated fashion because I will have dozens of such fitting to do so have reverted to using JSL. As far as I can tell, the only to get there in JSL is first to extract the spline coefficients as
splcoef=Spline Coef(X, Y, 1);
In the particular example that I am using this matrix would be:
[0.5 0.997009092716414 0.00052834644305232 0 0.0000661345992050551,
1 0.997281532762841 0.000577947392456002 0.0000992018988076818 0.0000439565382573196,
1.5 0.997600801501053 0.000710116694956763 0.000165136706193727
-0.0000523992394403174,
2 0.99799059412015 0.000835953971570102 0.0000865378470331725 -0.0000897493429406088,
2.5 0.998418986899826 0.00085517981139797 -0.0000480861673778753
-0.0000494911432825247,
3 0.99882836887077 0.000769975286558009 -0.000122322882301737 -0.0000204292892022263,
3.5 0.999180222132323 0.000632330437354731 -0.000152966816105107
-0.0000100612562586075,
4 0.999456887989942 0.000471817679055371 -0.000168058700493033 0.0000251846412034386,
4.5 0.999653930234497 0.000322647459465303 -0.000130281738687837
0.0000199230550287456,
5 0.999785173911436 0.000207308012048703 -0.000100397156144689 0.0000256287090160626,
5.5 0.999866932217051 0.000126132387666307 -0.0000619540926205567
0.0000114058197541642,
6 0.999915935615199 0.00007273265986134 -0.0000448453629892932 0.0000100640302564247,
7 0.999953886942327 0.0000132340246520343 -0.0000146532722199889
0.0000064471411305935,
7.5 0.999957646529239 0.0000034161082800262 -0.000004982560524089
0.0000026947675920361,
8 0.999958445789198 0.0000004546234498223 -0.0000009404091360308
0.0000012459427765851,
8.5 0.999958593741486 0.000000448671396435 0.0000009285050288488
-0.0000002521994682104,
9 0.999959018678507 0.0000011880268241599 0.0000005502058265328
-0.0000001515710315195,
9.5 0.999959731296997 0.0000016245543768191 0.0000003228492792533
-0.0000002152328528353,
10 0.999960597382399 0 0 0]
I can find the predicted values from the spline as:
predvalues=Spline Eval(X,splcoef);
to obtain the derivative, I tried to use:
dervalues=eval(derivative(spline eval(X, splcoef),X));
but this gives a unique value of zero (0).
However, if I replace the matrix reference splcoef by its actual contents in the spline eval statement then it works fine!!
dervalues=eval(derivative(spline eval(X,
[0.5 0.997009092716414 0.00052834644305232 0 0.0000661345992050551,
1 0.997281532762841 0.000577947392456002 0.0000992018988076818 0.0000439565382573196,
1.5 0.997600801501053 0.000710116694956763 0.000165136706193727
-0.0000523992394403174,
2 0.99799059412015 0.000835953971570102 0.0000865378470331725 -0.0000897493429406088,
2.5 0.998418986899826 0.00085517981139797 -0.0000480861673778753
-0.0000494911432825247,
3 0.99882836887077 0.000769975286558009 -0.000122322882301737 -0.0000204292892022263,
3.5 0.999180222132323 0.000632330437354731 -0.000152966816105107
-0.0000100612562586075,
4 0.999456887989942 0.000471817679055371 -0.000168058700493033 0.0000251846412034386,
4.5 0.999653930234497 0.000322647459465303 -0.000130281738687837
0.0000199230550287456,
5 0.999785173911436 0.000207308012048703 -0.000100397156144689 0.0000256287090160626,
5.5 0.999866932217051 0.000126132387666307 -0.0000619540926205567
0.0000114058197541642,
6 0.999915935615199 0.00007273265986134 -0.0000448453629892932 0.0000100640302564247,
7 0.999953886942327 0.0000132340246520343 -0.0000146532722199889
0.0000064471411305935,
7.5 0.999957646529239 0.0000034161082800262 -0.000004982560524089
0.0000026947675920361,
8 0.999958445789198 0.0000004546234498223 -0.0000009404091360308
0.0000012459427765851,
8.5 0.999958593741486 0.000000448671396435 0.0000009285050288488
-0.0000002521994682104,
9 0.999959018678507 0.0000011880268241599 0.0000005502058265328
-0.0000001515710315195,
9.5 0.999959731296997 0.0000016245543768191 0.0000003228492792533
-0.0000002152328528353,
10 0.999960597382399 0 0 0]
),X));
All I have done is replace the matrix name by its contents. This does not seem like normal behavior.
Any ideas how I get it to work??
Many thanks, Yves P.