如何迭代地解决两个变量(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章,“非线性回归”,了解更多信息。
当然,如果需要,您也可以编写此平台的脚本,但它是一个很好的解决方案。