Führen Sie Matlab-Simulationen aus und erstellen Sie eine JMP-Datentabelle mit SimulationsergebnissenVerehrte Gäste,
Ich verwende JMP, um #Matlab-Simulationen auszuführen. Ich habe mit JMP ein Design erstellt, das drei Faktoren (par1, par2 und par3) und mehrere leere Spalten für die Antworten (y1, y2) hat. Ich habe ein JSL-Skript erstellt, das für jede Zeile des Designs den Matlab-Code ausführt und die Ergebnisse der Simulation abruft (drei Vektoren: Zeit, y1 und y2; y1 und y2 sind tatsächlich Funktionen der Zeit). Jetzt möchte ich eine JMP-Datentabelle mit par1, par2, par3, Zeit, y1 und y2 erstellen. Natürlich müssen für eine gegebene Simulation par1, par2 und par3 während der Simulation dieselben Werte wiederholt aufweisen. Hier ist ein Beispiel für die neue Tabelle, die ich erstellen möchte. Kann mir jemand sagen, wie ich den JSL-Code dafür angehen soll, nachdem ich Zeit, y1 und y2 als Spalten in JMP importiert habe?
Vielen Dank.
par1 par2 par3 Zeit 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 .. ..
Automatisierung und SkriptingBetreff: Führen Sie Matlab-Simulationen aus und erstellen Sie eine JMP-Datentabelle mit SimulationsergebnissenVielen Dank für Ihre Hilfe. Basierend auf Ihren Vorschlägen konnte ich einen JSL-Code schreiben, der mein Problem löste. Hier ist der 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;
);
);
Betreff: Führen Sie Matlab-Simulationen aus und erstellen Sie eine JMP-Datentabelle mit SimulationsergebnissenHier ist ein ungetesteter Pseudocode, der möglicherweise zu Ihrer Beschreibung passt
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 ...Ich habe die Tabellenvariable p1 für par1 benannt, um die Scoping-Probleme zu vereinfachen, wenn Spaltennamen mit Variablennamen identisch sind. Ich habe mir vorgestellt, dass Sie für jede Kombination von par1,2,3 separate Aufrufe an matlab tätigen. Ich habe mir vorgestellt, dass diese Vektoren als JSL-Matrizen angezeigt werden. Faktoren und Designs sowie Matlab sind nicht meine Stärken, ich verstehe das Problem möglicherweise falsch.
Betreff: Führen Sie Matlab-Simulationen aus und erstellen Sie eine JMP-Datentabelle mit SimulationsergebnissenHallo,
Danke für deinen Code, er war nützlich.
Ich brauche noch etwas Hilfe. Mein Problem ist, dass Zeit kein Faktor des ursprünglichen Designs ist. Das ursprüngliche Design hat nur Par1, Par2 und Par3. Für jede Kombination aus Par1, Par2 und Par3 führt JMP Matlab aus und erhält drei Vektoren (t, y1 und y2). Wie kann ich JMP bitten, diese drei Vektoren so zur Ergebnisdatentabelle hinzuzufügen, dass die Werte für par1, par2 und par3 n-mal wiederholt werden, wobei n die Dimension des t-Vektors ist?
Danke.
Betreff: Führen Sie Matlab-Simulationen aus und erstellen Sie eine JMP-Datentabelle mit SimulationsergebnissenNormalerweise erstelle ich das Format der Ausgabetabelle in der GUI, indem ich eine neue Tabelle mit einer einzelnen Zeile erstelle, die so aussieht, wie ich es möchte. Verwenden Sie dann das rote Dreieck, um das zu erhalten Tabellenskript (keine Daten) . Fügen Sie das Skript in einen Editor ein, dt = Paste ;
Entfernen Sie dann die Addrows aus dem gerade eingefügten Skript und lassen Sie nur die Spaltendefinitionen übrig. Entfernen Sie auch das ausgewählte Spaltenbit, falls es angezeigt wird.
Die Schleife, die Sie schreiben, um die Tabelle zu füllen, verwendet addrows(1) für jede Zeile und legt jede Variable in dieser Zeile fest. Die Standardzeile ist also die gerade hinzugefügte Zeile
for( ... ,
dt<<ADDROWS></ADDROWS>
Hier ist ein Beispiel, bei dem in jeder Schleife drei Zeilen hinzugefügt wurden Unterschied der Linien .