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 comporte 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 du nouveau tableau que j'aimerais créer. Quelqu'un peut-il me dire comment aborder le code JSL une fois que j'ai importé l'heure, y1 et y2 sous forme de 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 .. ..
Automatisation et scriptsRe : 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;
);
);
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 afin de simplifier les problèmes de portée lorsque les noms de colonnes sont les mêmes que les noms de variables. J'imaginais que vous faisiez des appels séparés à matlab pour chaque combinaison de par1,2,3. J'ai imaginé que ces vecteurs apparaissent 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 simulationsBonjour,
merci pour votre code, c'était 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 au tableau 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 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 colonne. 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 que vous venez d'ajouter, donc
for( ... ,
dt<<ADDROWS></ADDROWS>
Voici un exemple qui a ajouté trois lignes dans chaque boucle Différence de lignes .