Wie löse ich zwei Variablen (P und T) iterativ (SAS-Code in JSL)?Schönen Tag.
Ich bin neu in JMP und JSL. Ich habe SAS verwendet und versuche, einige meiner Arbeiten in SAS in JMP zu konsolidieren.
In diesem Fall habe ich SAS-Code (unten enthalten), der zwei Variablen, P (Druck) und T (Temperatur), unter Verwendung der nachstehenden Gleichungen iterativ löst.
Was ist der einfachste Weg, um diese JMP (und JSL) zu tun.
Vielen Dank im Voraus.
Rob Preston (dankbarer Anfänger von JMP)
################################################ ################################################ ########
** Code von SAS (v9.1)
* Löse P, T iterativ, beachte, dass LOG LN (ex K) ist;
P_est = 0,0;
TK = 0,0;
T = 400;
T_est = T + 273;
TDIFF = 10,0;
IT = 0;
TUN BIS (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 · Pest) / (13,25 + 15,35 · Ti + 4,5 · Fe-1,55 * (Al + Cr-Na) + (LOG (aEn)) ** 2);
* um Konvergenz sicherzustellen (auf 3 ° C eingestellt);
TDIFF = ABS (TK-T_EST);
wenn TDIFF> 0, dann ist T_est = TK + 1;
sonst, wenn TDIFF <0 ist, dann ist T_est = TK-1;
else T_est = TK;
ENDE;
################################################ ################################################ ########
Re: Wie löse ich zwei Variablen (P und T) iterativ (SAS-Code in JSL)?Vielen Dank, Mark.
Ich werde beide Methoden ausprobieren. Dies ist eine großartige Lernübung für mich!
Re: Wie löse ich zwei Variablen (P und T) iterativ (SAS-Code in JSL)?Ich hatte eine andere Sichtweise auf dein Problem als Jim. Ich wusste nicht, dass die unabhängigen Variablen in derselben Zeile waren und Sie möchten P und T für jede Zeile bestimmen. In diesem Fall sollte seine Lösung (Übersetzung Ihres SAS-Codes) hilfreich sein.
Ich nahm an, dass die unabhängigen Variablen (z. B. aCrCaTs) vor der Bestimmung von P und T im Code bestimmt wurden. Ich habe diese Werte nicht, also kann ich sie nicht testen, aber ich wollte das Minimize () versuchen. Funktion, die ich bereits erwähnt habe. (Wenn es für einen beliebigen Satz von Variablen funktioniert, kann es auch über die Funktion For Each Row () zeilenweise angewendet werden.) Hier ist meine (spekulative) Lösung, um P und T zu finden:
// 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 )
);
Das erste Argument ist der zu minimierende Ausdruck. In diesem Fall gibt der Klebstoffoperator die absolute Differenz zurück, dh die Menge, die Sie minimieren möchten. Das zweite Argument ist eine Liste der zu bestimmenden Parameter. Die optionalen Meldungen können verwendet werden, um die numerische Suche weiter zu kontrollieren.
Sie haben also mindestens zwei Möglichkeiten, Ihre Aufgabe in JMP zu erledigen.
Re: Wie löse ich zwei Variablen (P und T) iterativ (SAS-Code in JSL)?Hallo Jim.
Ja, Ihre Annahmen sind richtig. Ich habe alle Berechnungen für die Variablen erstellt, auf die in den Gleichungen verwiesen wird. Das ist also alles sortiert.
Danke für deine Unterstützung. Sehr geschätzt!Re: Wie löse ich zwei Variablen (P und T) iterativ (SAS-Code in JSL)?Hier wird Ihr SAS-Code in JMP konvertiert. Ich gehe davon aus, dass Sie einen Datenschritt angegeben haben, hinter dem sich eine Datentabelle befindet, und dass der von Ihnen bereitgestellte Code für jede Zeile in der Datentabelle verarbeitet wird. Auch, dass die genannten Karossen, CrCaTs, Crno, Fe etc. sind Spalten in der Datentabelle
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: Wie löse ich zwei Variablen (P und T) iterativ (SAS-Code in JSL)?Danke, Mark.
Ich werde es versuchen.
Re: Wie löse ich zwei Variablen (P und T) iterativ (SAS-Code in JSL)?Sie können wahrscheinlich die verwenden Maximieren() oder Minimieren() Funktionen. Sehen Hilfe > Skriptindex > Funktionen ebenso gut wie Hilfe > Buch > Skript-Anleitung Informationen zu diesen beiden Funktionen.
Ich bin mir jedoch nicht sicher, ob Sie eine Codelösung benötigen. Verwenden Sie stattdessen die Option Nichtlinear Plattform. Wir betrachten es im Allgemeinen als eine Möglichkeit, nichtlineare Modelle anzupassen, aber es ist auch eine allgemeine Maximierungslösung. Sehen Hilfe > Bücher > Prädiktive und spezialisierte Modellierung Weitere Informationen finden Sie in Kapitel 13, "Nichtlineare Regression".
Natürlich können Sie diese Plattform bei Bedarf auch Skripts erstellen, aber es ist ein großartiger Löser.