2つの変数(PとT)を反復して解決する方法(SASコードからJSLへ)良い一日。
私はJMPとJSLが初めてです。私はSASを使ったことがあり、SASで行った作業の一部をJMPに統合しようとしています。
この場合、以下の方程式を繰り返し使用して、P(圧力)とT(温度)の2つの変数を解くSASコード(下記参照)があります。
このJMP(およびJSL)を行うための最も簡単な方法は何ですか?
事前に感謝します。
Rob Preston(感謝する初心者JMPユーザー)
################################################## ################################################## ########
** SASからのコード(v9.1)
* P、Tを繰り返し解く。LOGはLN(Kを除く)であることに注意。
P_est = 0.0;
TK = 0.0。
T = 400。
T_est = T + 273。
TDIFF = 10.0。
IT = 0。
UNTILを行います(TDIFF
.0)。
IT = IT + 1。
P_est =(( - - T_est / 126.9)* log(aCrCaTs))+(15.483 *(log(Crno / T_est)))+(T_est / 71.38)+107.8。
TK =(23166 + 39.28 * P_est)/(13.25 + 15.35 * Ti + 4.5 * Fe-1.55 *(Al + Cr-Na)+(LOG(aEn))** 2)。
*収束を確実にするため(3C内に設定)。
TDIFF = ABS(TK − T_EST)。
TDIFF> 0の場合、T_est = TK + 1である。
そうでなければTDIFF <0であればT_est = TK − 1である。
そうでなければT_est = TK。
終わり;
################################################## ################################################## ########
再:どのように反復的に2つの変数(PとT)を解決する(SASコードをJSLに)?マークありがとうございます。
両方の方法を試してみるつもりです。これは私にとって素晴らしい学習課題です。
再:どのように反復的に2つの変数(PとT)を解決する(SASコードをJSLに)?私はあなたの問題についてジムとは違う考えを持っていました。独立変数が同じ行にあることに気付かなかったので、すべての行についてPとTを決定します。もしそうなら、彼の解決策(あなたのSASコードの翻訳)が役に立つはずです。
私の考えでは、PとTの決定の前に独立変数(例えば、aCrCaTs)がコード内で決定されるということでした。それらの値を持っていないのでテストできませんが、Minimize()を試してみることにしました私が先に述べた機能。(実際には、それが変数のいずれかのセットに対して機能する場合は、For Each Row()関数を介して行方向にも適用できます。)PとTを見つけるための私の(推測的な)解法は次のとおりです。
// initialize variables
T = 400;
T_est = T + 273;
aCrCaTs = ?;
Cmo = ?;
Ti = ?;
Fe = ?;
Al = ?;
Cr = ?;
Na = ?;
aEn = ?;
// estimate P and T
Minimize(
P_est = ((-T_est/1269)*Log(aCrCaTs)) + (15.483*(Log(Cmo/T_est))) + (T_est/71.38)+107.8;
TK = (23166+39.28*P_est) / (13.25+15.35*Ti+4.5*Fe-1.55*(Al+Cr+Na)+Log(aEn)^2);
Abs( TK - T_est),
{ P_est, TK },
<< Max Iter( 100 ),
<< Tolerance( 3.0 )
);
最初の引数は最小化される式です。この場合、のり演算子は絶対差を返します。これは最小化したい量です。2番目の引数は、決定されるパラメータのリストです。オプションのメッセージを使用して、数値検索をさらに制御することができます。
だから今あなたはJMPであなたの仕事を達成する少なくとも2つの方法があります。
再:どのように反復的に2つの変数(PとT)を解決する(SASコードをJSLに)?こんにちはジム。
はい、あなたの仮定は正しいです。式で参照されている変数のすべての計算をスクリプト化しました。だからそれはすべてソートされています。
お手伝いいただきありがとうございます。大歓迎です!再:どのように反復的に2つの変数(PとT)を解決する(SASコードをJSLに)?これがSASコードをJMPに変換したものです。 私が想定しているのは、提供したのはその後ろにデータテーブルを持つデータステップであり、提供したコードはデータテーブルの各行に対して処理されるということです。 また、虫歯が言及したこと、aCrCaTs、Crno、Feなど。データテーブル内の列
Names Default To Here( 1 );
dt = Current Data Table();
For Each Row(
P_est = 0.0;
TK = 0.0;
T = 400;
T_est = T + 273;
TDIFF = 10.0;
IT = 0;
While( TDIFF >= 3.0,
IT = IT + 1;
P_est = ((-T_est / 126.9) * Log( :aCrCaTs )) + (15.483 * (Log( :Crno / T_est ))) + (T_est / 71.38) + 107.8;
TK = (23166 + 39.28 * P_est) / (13.25 + 15.35 * Ti + 4.5 * :Fe - 1.55 * (:Al + :Cr - :Na) + (Log( :aEn )) ^ 2);
//to ensure convergence (set at within 3C);
TDIFF = Abs( TK - T_EST );
If(
TDIFF > 0, T_est = TK + 1,
TDIFF < 0, T_est = TK - 1,
T_est = TK
);
);
);
再:どのように反復的に2つの変数(PとT)を解決する(SASコードをJSLに)?マークありがとう。
私はそれを試してみるつもりです。
再:どのように反復的に2つの変数(PとT)を解決する(SASコードをJSLに)?あなたはおそらく使用することができます最大化() または最小化() 関数。見る助けて > スクリプトインデックス > 関数と同様助けて > 本 > スクリプティングガイドこれら2つの機能については。
ただし、コードソリューションが必要かどうかはわかりません。代わりに、非線形プラットフォーム 我々は一般的にそれを非線形モデルに合わせる方法として捉えていますが、それは実際には一般的な最大化解法でもあります。見る助けて > 本 > 予測と特殊モデリング詳細は、第13章「非線形回帰」を参照してください。
もちろん、必要に応じてこのプラットフォームをスクリプト化することもできますが、これは素晴らしい解決策です。