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) enthält. Ich habe ein JSL-Skript erstellt, das für jede Zeile des Designs den Matlab-Code ausführt und die Ergebnisse der Simulation erhält (drei Vektoren: Zeit, y1 und y2; y1 und y2 sind tatsächlich Funktionen der Zeit). Nun möchte ich eine JMP-Datentabelle mit par1, par2, par3, time, y1 und y2 erstellen. Natürlich müssen für eine gegebene Simulation par1, par2 und par3 dieselben Werte haben, die während der Simulation wiederholt werden. 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, wenn ich mal 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 .. ..
DAMHIRSCHKUHSkriptingBetreff: Matlab-Simulationen ausführen und eine JMP-Datentabelle mit Simulationsergebnissen erstellenNormalerweise 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 die zu erhalten Tabellenskript (keine Daten) . Fügen Sie dieses Skript in einen Editor ein, dt = Einfügen ;
Entfernen Sie dann die addrows aus dem gerade eingefügten Skript, so dass nur die Spaltendefinitionen übrig bleiben. Entfernen Sie auch das ausgewählte Spaltenbit, wenn es angezeigt wird.
Die Schleife, die Sie schreiben, um die Tabelle zu füllen, verwendet addrows(1) für jede Zeile und setzt jede Variable in dieser Zeile. Die Standardzeile ist die gerade hinzugefügte Zeile, also
for( ... ,
dt<<ADDROWS></ADDROWS>Hier ist ein Beispiel, bei dem in jeder Schleife drei Zeilen hinzugefügt wurden https://community.jmp.com/t5/Discussions/Difference-of-lines/mp/417373/highlight/true#M66646 .
Betreff: Matlab-Simulationen ausführen und eine JMP-Datentabelle mit Simulationsergebnissen erstellenHallo,
danke für deinen Code, war hilfreich.
Ich brauche noch etwas Hilfe. Mein Problem ist, dass die Zeit kein Faktor des ursprünglichen Designs ist. Das ursprüngliche Design hat nur Par1, Par2 und Par3. Für jede Kombination von 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 der Ergebnisdatentabelle so hinzuzufügen, dass die Werte für par1, par2 und par3 n-mal wiederholt werden, wobei n die Dimension des t-Vektors ist?
Vielen Dank.
Betreff: Matlab-Simulationen ausführen und eine JMP-Datentabelle mit Simulationsergebnissen erstellenHier ist ein nicht getesteter Pseudocode, der zu dem passen könnte, was Sie beschreiben
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 machen. Ich stellte mir vor, dass diese Vektoren als JSL-Matrizen auftauchen. Faktoren und Designs und Matlab sind nicht meine Stärke, ich kann das Problem falsch verstehen.
Betreff: Matlab-Simulationen ausführen und eine JMP-Datentabelle mit Simulationsergebnissen erstellenVielen 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;
);
);