如何迭代地解決兩個變量(P和T)(SAS代碼到JSL)?美好的一天。
我是JMP和JSL的新手。我使用過SAS,我正在努力將我在SAS中所做的一些工作合併到JMP中。
在這種情況下,我有一些SAS代碼(包含在下面)解決了兩個變量P(壓力)和T(溫度),迭代使用下面的等式。
什麼是最簡單的方法來執行此JMP(和JSL)。
提前謝謝了。
Rob Preston(感謝新手JMP用戶)
################################################## ################################################## ########
** SAS代碼(v9.1)
*迭代求解P,T,注意LOG是LN(excl K);
P_est = 0.0;
TK = 0.0;
T = 400;
T_est = T + 273;
TDIFF = 10.0;
IT = 0;
DO UNTIL(TDIFF
.0);
IT = IT + 1;
P_est =(( - T_est / 126.9)*日誌(aCrCaTs))+(15.483 *(日誌(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 *(+鋁的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;
結束;
################################################## ################################################## ########
Re:如何迭代地解決兩個變量(P和T)(SAS代碼到JSL)?非常感謝馬克。
我將嘗試兩種方法。這對我來說是一次很棒的學習練習!
Re:如何迭代地解決兩個變量(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 )
);
第一個參數是要最小化的表達式。在這種情況下,膠水操作員將返回絕對差值,即您要最小化的數量。第二個參數是要確定的參數列表。可選消息可用於對數字搜索進行進一步控制。
所以現在你至少有兩種方法可以在JMP中完成你的任務。
Re:如何迭代地解決兩個變量(P和T)(SAS代碼到JSL)?嗨,吉姆。
是的,你的假設是正確的。我編寫了方程中引用的變量的所有計算。所以這一切都已整理好了。
非常感謝你的協助。非常感激!Re:如何迭代地解決兩個變量(P和T)(SAS代碼到JSL)?這是您轉換為JMP的SAS代碼。 我假設的是你提供的是一個數據步驟,後面有一個數據表,並且為數據表中的每一行處理你提供的代碼。 另外,提到的載體,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
);
);
);
Re:如何迭代地解決兩個變量(P和T)(SAS代碼到JSL)?謝謝馬克。
我會試試看。
Re:如何迭代地解決兩個變量(P和T)(SAS代碼到JSL)?你可以使用最大化() 要么最小化() 功能。看到救命 > 腳本索引 > 功能以及救命 > 書 > 腳本指南有關這兩個功能的信息。
不過,我不確定您是否需要代碼解決方案。相反,考慮使用非線性平台。我們通常將其視為適合非線性模型的一種方式,但它實際上也是一種通用的最大化解決方案。看到救命 > 圖書 > 預測和專業建模 ,第13章,“非線性回歸”,了解更多信息。
當然,如果需要,您也可以編寫此平台的腳本,但它是一個很好的解決方案。