JSL 파생어를 사용하는 올바른 방법나는 얼마 동안 JSL을 사용하여 응답 표면 모델의 파생물을 만들려고 시도했습니다. 파생 상품의 수동 생성을 가리키는 문서 및 포럼 게시물의 부족은 내 문제를 해결하지 못했습니다. 이미 Fit이 있고 Prediction Formula가 데이터 테이블의 열에 저장되어 있습니다. 내가하고 싶은 것은 JSL을 사용하여 공식의 기호 파생물을 만들고 다른 열에 적용하는 것입니다. 지금까지 다음 코드는 이 문제를 해결하려고 시도했지만 아무 소용이 없었습니다.
// Get Formula
//formula = col << Get Formula;
formula = Expr((-211374703.282551) + 30.8532207444449 * :X1);
Show( formula );
// Make derivative
derivative = Derivative(formula, X1);
Show(derivative);
derivative = Derivative(formula, :X1);
Show(derivative);
derivative = Derivative(formula, "X1");
Show(derivative);
derivative = Derivative(formula, ":X1");
Show(derivative);
derivative = Derivative(formula, Column(:X1));
Show(derivative);
derivative = Derivative(Eval(formula), X1);
Show(derivative);
derivative = Derivative(formula, Eval(X1));
Show(derivative);
derivative = Derivative(Eval(formula), Eval(X1));
Show(derivative);
derivative = Derivative(Expr(formula), X1);
Show(derivative);
derivative = Derivative(formula, Expr(X1));
Show(derivative);
derivative = Derivative(Expr(formula), Expr(X1));
Show(derivative);
그리고 내가 얻는 출력은
formula = (-211374703.282551) + 30.8532207444449 * :X;
derivative = 0;
derivative = 0;
derivative = .;
derivative = .;
derivative = .;
derivative = 0;
derivative = .;
derivative = .;
derivative = 0;
derivative = .;
derivative = .;
일반적으로 공식은 저장된 예측 공식이 포함된 열에서 추출되며 이 경우 인쇄물에 공식이 성공적으로 표시됩니다.
내가 여기서 무엇을 놓치고 있습니까? 나는 이것이 곧은 과정일 것이라고 생각했다.
도움을 주시면 감사하겠습니다!
해석학Re: JSL 파생어를 사용하는 올바른 방법수식에 Expr을 추가해 보세요.
formula = Expr(Expr((-211374703.282551) + 30.8532207444449 * :X1));
Re: JSL 파생어를 사용하는 올바른 방법formula = Expr((-211374703.282551) + 30.8532207444449 * :X1);
Show( formula );
// Make derivative
derivative = Derivative(name expr(formula), X1);
show(derivative);
핵심은 파생 상품으로 전달될 때 공식이 평가되지 않도록 하는 것입니다. Expr의 두 번째 레이어를 래핑하면 원하는 동작이 생성되지만 실제로 호출에 전달될 때 Expr의 첫 번째 레이어가 벗겨집니다.
Re: JSL 파생어를 사용하는 올바른 방법답변 감사합니다!
우리는 이것을 한 단계 더 발전시킬 수 있습니까?
다변수 함수가 있고 도함수를 만들기 위해 미리 알고 있는 입력 목록을 반복하고 싶다고 가정해 보겠습니다.
대신 설정은
formula = Expr((-211374703.282551) + 30.8532207444449 * :MyVar1 - 0.42 * :AnotherVar2);<BR />factors = List(MyVar1, AnotherVar2);
// Clone formula n times into columns
dt << Clone Formula Column(
"Pred Formula",
N Items(factors),
);
For(i = 1, i < N Items(factors), i++,
col = Column( dt, "Pred Formula " || char(eval(i+1)) );
col << Set Name( "doptval d" || factors[i]);
// Get Formula
formula = col << Get Formula;
// Make derivative
derivative = Derivative(name expr(formula), factors[i]);
// Apply derivative to new column
col << Set Formula( derivative );
);
이제 이 루프에서 변수를 참조하려고 하면 파생 함수가 실패합니다. 이견있는 사람?