안녕하세요 여러분,
알 수 없는 이상한 문제가 있습니다. 두 변수(예: Y 및 X)를 연결하는 부드러운 함수의 파생물을 추출하려는 변수가 2개 있습니다. 두 변수가 테이블에 있으면 "수동으로" 수행할 수 있습니다. 저는 단순히 부드러운 스플라인을 맞추고, 예측된 공식을 저장하고, 공식 편집기로 가서 편집기 자체의 미분 옵션을 사용합니다. 이제는 동일한 작업을 수행하고 싶지만 자동화된 방식으로 수행하고 싶습니다. 그렇게 하려면 수십 개의 피팅이 JSL 사용으로 되돌아가기 때문입니다. 내가 알 수 있는 한, JSL에서 얻을 수 있는 유일한 방법은 먼저 스플라인 계수를 다음과 같이 추출하는 것입니다.
splcoef= 스플라인 계수 (엑스,와이, 1 );
이 행렬을 사용하는 특정 예에서는 다음과 같습니다.
[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]
다음과 같이 스플라인에서 예측 값을 찾을 수 있습니다.
predvalues=스플라인 평가 ( X,splcoef);
파생 상품을 얻기 위해 다음을 사용하려고했습니다.
dervalues=eval(derivative(스플라인 평가(X, splcoef),X));
그러나 이는 고유한 값인 0을 제공합니다.
그러나 스플라인 평가문의 실제 내용으로 행렬 참조 splcoef를 바꾸면 제대로 작동합니다!!
dervalues=eval(derivative(스플라인 평가(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]
),엑스));
내가 한 일은 행렬 이름을 내용으로 바꾸는 것뿐입니다. 이는 정상적인 동작이 아닌 것 같습니다.
어떻게 작동하게 할 수 있는지 아이디어가 있습니까 ??
많은 감사를 드립니다, Yves P.
시도해 보세요 평가( Evaexpr( ) ) 행렬의 사전 평가를 강제하는 구조입니다.
Names Default To Here(1);
X = 1 :: 100;
Y = Normal Distribution(X, 50, 25);
splcoef = Spline Coef(X, Y, 1);
predvalues = Spline Eval(X, Spline Coef(X, Y, 1));
dervalues = Eval(Eval Expr(Derivative(Spline Eval(X, Expr(splcoef)), X)));
// Plot to see if it works
dt = New Table("test", add rows(100));
dt << New Column("X", values(X)) << New Column("Y", values(predvalues)) <<
New Column("dY", values(dervalues));
dt << Graph Builder(
Variables(X(:X), Y(:Y), Y(:dY)),
Elements(Position(1, 1), Points(X, Y)),
Elements(Position(1, 2), Points(X, Y))
);