Ciao a tutti,
Ho un problema curioso che non riesco a capire. Ho 2 variabili (diciamo Y e X) per le quali voglio estrarre la derivata di una funzione liscia che collega i due. Posso farlo "manualmente" se le mie due variabili sono in una tabella. Ho semplicemente adattato una spline liscia, salvato la formula prevista, vado nell'editor delle formule e utilizzo l'opzione derivata nell'editor stesso. Ora voglio fare lo stesso, ma in modo automatizzato perché avrò dozzine di tali adattamenti per farlo, sono tornato a usare JSL. Per quanto ne so, l'unico per arrivarci in JSL è prima estrarre i coefficienti spline come
spplcoef= Spline Cof (X, Y, 1 );
Nell'esempio particolare che sto usando questa matrice sarebbe:
[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]
Posso trovare i valori previsti dalla spline come:
predvalues=Valutazione Spline ( X,splcoef);
per ottenere la derivata, ho provato ad usare:
dervalues=eval(derivative(spline eval(X, splcoef),X));
ma questo dà un valore univoco pari a zero (0).
Tuttavia, se sostituisco il riferimento alla matrice splcoef con il suo contenuto effettivo nell'istruzione spline eval, allora funziona correttamente!!
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));
Tutto quello che ho fatto è sostituire il nome della matrice con il suo contenuto. Questo non sembra un comportamento normale.
Qualche idea su come farlo funzionare??
Molte grazie, Yves P.