Comment résoudre deux variables (P et T) de manière itérative (code SAS en JSL)?Bonne journée.
Je suis nouveau sur le JMP et JSL. J'ai utilisé SAS et j'essaie de consolider une partie du travail que j'ai effectué dans SAS dans JMP.
Dans ce cas, j'ai un code SAS (inclus ci-dessous) qui résout deux variables, P (pression) et T (température), de manière itérative en utilisant les équations ci-dessous.
Quelle est la façon la plus simple de faire cela JMP (et JSL).
Merci d'avance.
Rob Preston (utilisateur JMP novice reconnaissant)
################################################# ################################################# ########
** code de SAS (v9.1)
* résolvez P, Térativement, notez que LOG est 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) * 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);
* assurer la convergence (fixé à 3C);
TDIFF = ABS (TK-T_EST);
si TDIFF> 0 alors T_est = TK + 1;
sinon si TDIFF <0 alors T_est = TK-1;
sinon T_est = TK;
FIN;
################################################# ################################################# ########
Re: Comment résoudre deux variables (P et T) de manière itérative (code SAS en JSL)?Merci beaucoup Mark.
Je vais essayer les deux méthodes. C'est un excellent exercice d'apprentissage pour moi!
Re: Comment résoudre deux variables (P et T) de manière itérative (code SAS en JSL)?Votre problème était différent de celui de Jim. Je n'avais pas réalisé que les variables indépendantes se trouvaient dans la même ligne et vous souhaitez déterminer P et T pour chaque ligne. Si tel est le cas, sa solution (traduction de votre code SAS) devrait être utile.
Mon point de vue était que les variables indépendantes (par exemple, aCrCaTs) avaient été déterminées dans le code avant la détermination de P et T. Je n'ai pas ces valeurs, donc je ne peux pas le tester, mais mon objectif était d'essayer le paramètre Minimize (). fonction que j'ai mentionnée plus tôt. (En fait, si cela fonctionne pour n'importe quel jeu de variables, il peut également être appliqué ligne par ligne à travers la fonction For Each Row ().) Voici ma solution (spéculative) pour trouver P et 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 )
);
Le premier argument est l'expression à minimiser. Dans ce cas, l'opérateur de colle retournera la différence absolue, c'est-à-dire la quantité que vous souhaitez minimiser. Le deuxième argument est une liste des paramètres à déterminer. Les messages facultatifs peuvent être utilisés pour exercer un contrôle supplémentaire sur la recherche numérique.
Vous avez donc au moins deux façons d'accomplir votre tâche dans JMP.
Re: Comment résoudre deux variables (P et T) de manière itérative (code SAS en JSL)?Salut Jim.
Oui, vos hypothèses sont correctes. J'ai écrit tous les calculs pour les variables auxquelles il est fait référence dans les équations. Donc, tout est réglé.
Merci beaucoup pour votre aide. Très appréciée!Re: Comment résoudre deux variables (P et T) de manière itérative (code SAS en JSL)?Voici votre code SAS converti en JMP. Ce que je suppose, c'est que vous avez fourni une étape de données comportant une table de données et que le code que vous avez fourni est traité pour chaque ligne de la table de données. Aussi, que les cariables mentionnées, aCrCaTs, Crno, Fe etc. sont des colonnes dans la table de données
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: Comment résoudre deux variables (P et T) de manière itérative (code SAS en JSL)?Merci Mark.
Je vais essayer.
Re: Comment résoudre deux variables (P et T) de manière itérative (code SAS en JSL)?Vous pouvez probablement utiliser le Maximiser() ou Minimiser() les fonctions. Voir Aidez-moi > Index de script > Les fonctions aussi bien que Aidez-moi > Livre > Guide de script pour plus d'informations sur ces deux fonctions.
Je ne suis pas sûr que vous ayez besoin d'une solution de code, cependant. Au lieu de cela, envisagez d'utiliser le Non linéaire Plate-forme. Nous le percevons généralement comme un moyen d’adapter des modèles non linéaires, mais c’est aussi une solution de maximisation générale. Voir Aidez-moi > Livres > Modélisation prédictive et spécialisée , Chapitre 13, "Régression non linéaire", pour plus d'informations.
Bien sûr, vous pouvez également écrire un script sur cette plate-forme, si nécessaire, mais c'est un excellent solutionneur.