Esegui simulazioni Matlab e crea una tabella dati JMP con i risultati delle simulazioniCarissimi,
Sto usando JMP per eseguire simulazioni #Matlab. Ho creato un progetto con JMP che ha tre fattori (par1, par2 e par3) e diverse colonne vuote per le risposte (y1, y2). Ho creato uno script JSL che per ogni riga del disegno esegue il codice Matlab e ottiene i risultati della simulazione (tre vettori: tempo, y1 e y2; y1 e y2 sono infatti funzioni del tempo). Ora vorrei creare una tabella dati JMP con par1, par2, par3, time, y1 e y2. Ovviamente per una data simulazione par1, par2 e par3 devono avere gli stessi valori ripetuti lungo la simulazione. Ecco un esempio della nuova tabella che vorrei creare. Qualcuno può dirmi come dovrei avvicinarmi al codice JSL per quello una volta che ho importato il tempo, y1 e y2 come colonne in JMP?
Grazie molto.
par1 par2 par3 tempo 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 .. ..
dainaScriptingRe: Eseguire simulazioni Matlab e creare una tabella dati JMP con i risultati delle simulazioniDi solito creo il formato della tabella di output nella GUI creando una nuova tabella con una singola riga che assomiglia a quello che voglio. Quindi usa il triangolo rosso per ottenere il script di tabella (nessun dato) . Incolla lo script in un editor, dt = impasto ;
Quindi rimuovi gli addrow dallo script che hai appena incollato, lasciando solo le definizioni delle colonne. Rimuovi anche il bit di colonna selezionato, se viene visualizzato.
Il ciclo che scrivi per popolare la tabella utilizzerà addrows(1) per ogni riga e imposterà ogni variabile su quella riga. La riga predefinita sarà la riga appena aggiunta, quindi
for( ... ,
dt<<ADDROWS></ADDROWS>Ecco un esempio che ha aggiunto tre righe in ogni ciclo https://community.jmp.com/t5/Discussions/Difference-of-lines/mp/417373/highlight/true#M66646 .
Re: Eseguire simulazioni Matlab e creare una tabella dati JMP con i risultati delle simulazioniCiao,
grazie per il codice, è stato utile.
Ho ancora bisogno di aiuto. Il mio problema è che il tempo non è un fattore del progetto originale. Il design originale ha solo par1, par2 e par3. Per ogni combinazione di par1, par2 e par3 JMP esegue Matlab e ne ottiene tre vettori (t, y1 e y2). Come posso chiedere a JMP di aggiungere questi tre vettori alla tabella dei dati dei risultati in modo tale da avere i valori per par1, par2 e par3 ripetuti n volte, dove n è la dimensione del vettore t?
Grazie.
Re: Eseguire simulazioni Matlab e creare una tabella dati JMP con i risultati delle simulazioniecco uno pseudo codice non testato che potrebbe adattarsi a ciò che stai descrivendo
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 ...Ho chiamato la variabile di tabella p1 per par1 per semplificare i problemi di ambito quando i nomi delle colonne sono gli stessi dei nomi delle variabili. Ho immaginato che tu facessi chiamate separate a matlab per ogni combinazione di par1,2,3. Ho immaginato che quei vettori si presentassero come matrici JSL. Fattori e design e matlab non sono il mio forte, potrei aver frainteso il problema.
Re: Eseguire simulazioni Matlab e creare una tabella dati JMP con i risultati delle simulazioniGrazie mille per il tuo aiuto. Sulla base dei tuoi suggerimenti sono stato in grado di scrivere un codice jsl che ha risolto il mio problema. Ecco il codice.
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;
);
);