Exécutez des simulations Matlab et créez une table de données JMP avec les résultats des simulationsChers tous,
J'utilise JMP pour exécuter des simulations #Matlab. J'ai créé un design avec JMP qui a trois facteurs (par1, par2 et par3) et plusieurs colonnes vides pour les réponses (y1, y2). J'ai créé un script JSL qui, pour chaque ligne de la conception, exécute le code Matlab et obtient les résultats de la simulation (trois vecteurs : temps, y1 et y2 ; y1 et y2 sont en fait des fonctions du temps). Maintenant, je voudrais créer une table de données JMP avec par1, par2, par3, time, y1 et y2. Bien entendu, pour une simulation donnée, par1, par2 et par3 doivent avoir les mêmes valeurs répétées tout au long de la simulation. Voici un exemple de la nouvelle table que je voudrais créer. Quelqu'un peut-il me dire comment je dois aborder le code JSL pour cela une fois que j'ai importé le temps, y1 et y2 en tant que colonnes dans JMP ?
Merci beaucoup.
par1 par2 par3 temps y1 y2
3 1 1 1 .. ..
3 1 1 2 .. ..
3 1 1 3 .. ..
4 1 1 1 .. ..
4 1 1 2 .. ..
4 1 1 3 .. ..
BICHEScriptRe : Exécuter des simulations Matlab et créer une table de données JMP avec les résultats des simulationsJe crée généralement le format de la table de sortie dans l'interface graphique en créant une nouvelle table avec une seule ligne qui ressemble à ce que je veux. Utilisez ensuite le triangle rouge pour obtenir le script de table (pas de données) . Collez ce script dans un éditeur, dt = pâte ;
Supprimez ensuite les addrows du script que vous venez de coller, en ne laissant que les définitions de colonnes. Supprimez également le bit de colonne sélectionné, s'il apparaît.
La boucle que vous écrivez pour remplir la table utilisera addrows(1) pour chaque ligne et définira chaque variable sur cette ligne. La ligne par défaut sera la ligne qui vient d'être ajoutée, donc
for( ... ,
dt<<ADDROWS></ADDROWS>Voici un exemple qui a ajouté trois lignes dans chaque boucle https://community.jmp.com/t5/Discussions/Difference-of-lines/mp/417373/highlight/true#M66646 .
Re : Exécuter des simulations Matlab et créer une table de données JMP avec les résultats des simulationsBonjour,
merci pour ton code, c'est utile.
J'ai encore besoin d'aide. Mon problème est que le temps n'est pas un facteur de la conception originale. La conception originale n'a que par1, par2 et par3. Pour chaque combinaison de par1, par2 et par3 JMP exécute Matlab et obtient trois vecteurs (t, y1 et y2). Comment puis-je demander à JMP d'ajouter ces trois vecteurs à la table de données de résultat de manière à ce que les valeurs de par1, par2 et par3 soient répétées n fois, où n est la dimension du vecteur t ?
Merci.
Re : Exécuter des simulations Matlab et créer une table de données JMP avec les résultats des simulationsvoici un pseudo code non testé qui pourrait correspondre à ce que vous décrivez
for( par1 = 1, par1 <= 3, par1+=1, // 3...how ever many combinations there are
for(par2 = 1, par2 <= 5, par2 +=1, // 5
for(par3 = 1, par2 <= 2, par3+= 1, // 2
/* get the vectors from matlab using par1,par2,par3 */
/* somehow mat_t, mat_y1, and mat_y2 are now JSL matrices, n rows by 1 col */
for( i = 1, i<= n, i+=1, // n is the vector length, write a row for each element
dt<<ADDROWS></ADDROWS>... close all the parens ...J'ai nommé la variable de table p1 pour par1 pour simplifier les problèmes de portée lorsque les noms de colonnes sont identiques aux noms de variables. J'ai imaginé que vous fassiez des appels séparés à matlab pour chaque combinaison de par1,2,3. J'ai imaginé que ces vecteurs s'affichent sous forme de matrices JSL. Factors and Designs et matlab ne sont pas mon domaine de prédilection, je comprends peut-être mal le problème.
Re : Exécuter des simulations Matlab et créer une table de données JMP avec les résultats des simulationsMerci beaucoup pour votre aide. Sur la base de vos suggestions, j'ai pu écrire un code jsl qui a résolu mon problème. Voici le code.
MATLAB Submit( "iii=0;" ); // Initialize the counter in Matlab
For Each Row(
dt1,
row_n_dt1 = row_n_dt1 + 1;
v0 = :Pattern[row_n_dt1];
v1 = :F1[row_n_dt1];
v2 = :F2[row_n_dt1];
v3 = :F3[row_n_dt1];
MATLAB Submit( "iii=iii+1;" );
MATLAB Send( v1 );
MATLAB Send( v2 );
MATLAB Send( v3 );
MATLAB Submit( "FF1=v1" );
MATLAB Submit( "FF2=v2" );
MATLAB Submit( "FF3=v3" );
MATLAB Submit( "main_II" ); // execute the code contained in the matlab file 'main_II'
MATLAB Submit( "xlswrite(filename, [t y],iii);" ); // write an excel file with all the simulation results; each sheet contains a simulation
MATLAB Submit( "y1=y(:,1);" ); // create the vector y1 in Matlab
MATLAB Submit( "y2=y(:,2);" ); // create the vector y2 in Matlab
MATLAB Submit( "whos" );
mat_y1 = MATLAB Get( y1 ); // JMP imports vectors y1, y2 and t as matrices
mat_y2 = MATLAB Get( y2 );
mat_t = MATLAB Get( t );
n_timevector = Dim( mat_t ); // dimensions of matrix mat_t
n = n_timevector[1]; // lenght of vector t
//i=1;
dt2 << addrows( n ); // for each simulation add n rows to the simulation table
For( i = 1, i <= n, i += 1, // n is the vector length, write a row for each element of the time vector in table dt2
row_n_dt2 = row_n_dt2 + 1;
dt2:Pattern[row_n_dt2] = v0;
dt2:x1[row_n_dt2] = mat_y1[i]; // different values for n rows
dt2:M[row_n_dt2] = mat_y2[i];
dt2:t[row_n_dt2] = mat_t[i];
dt2:F1[row_n_dt2] = v1; // repeats same value for n rows
dt2:F2[row_n_dt2] = v2;
dt2:F3[row_n_dt2] = v3;
);
);