Ejecute simulaciones de Matlab y cree una tabla de datos JMP con resultados de simulacionesEstimados,
Estoy usando JMP para ejecutar simulaciones de #Matlab. Creé un diseño con JMP que tiene tres factores (par1, par2 y par3) y varias columnas vacías para las respuestas (y1, y2). Creé un script JSL que para cada fila del diseño ejecuta el código Matlab y obtiene los resultados de la simulación (tres vectores: tiempo, y1 e y2; y1 e y2 son de hecho funciones del tiempo). Ahora me gustaría crear una tabla de datos JMP con par1, par2, par3, time, y1 e y2. Por supuesto, para una simulación dada, par1, par2 y par3 deben tener los mismos valores repetidos a lo largo de la simulación. Aquí hay un ejemplo de la nueva tabla que me gustaría crear. ¿Alguien puede decirme cómo debería abordar el código JSL para eso una vez que haya importado time, y1 e y2 como columnas en JMP?
Muchas gracias.
par1 par2 par3 tiempo 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 .. ..
GAMAScriptingRe: ejecutar simulaciones de Matlab y crear una tabla de datos JMP con resultados de simulacionesPor lo general, creo el formato de la tabla de salida en la GUI creando una nueva tabla con una sola fila que se parece a lo que quiero. Luego usa el triángulo rojo para obtener el script de tabla (sin datos) . Pegue ese script en un editor, dt = pegar ;
Luego elimine los complementos del script que acaba de pegar, dejando solo las definiciones de columna. Elimine también el bit de la columna seleccionada, si aparece.
El ciclo que escriba para completar la tabla usará addrows (1) para cada fila y establecerá cada variable en esa fila. La fila predeterminada será la que se acaba de agregar, por lo que
for( ... ,
dt<<ADDROWS></ADDROWS>Aquí hay un ejemplo que agregó tres filas en cada bucle. https://community.jmp.com/t5/Discussions/Difference-of-lines/mp/417373/highlight/true#M66646 .
Re: ejecutar simulaciones de Matlab y crear una tabla de datos JMP con resultados de simulacionesHola,
gracias por tu código, fue útil.
Todavía necesito ayuda. Mi problema es que el tiempo no es un factor del diseño original. El diseño original tiene solo par1, par2 y par3. Para cada combinación de par1, par2 y par3, JMP ejecuta Matlab y obtiene tres vectores (t, y1 e y2). ¿Cómo puedo pedirle a JMP que agregue estos tres vectores a la tabla de datos de resultado de tal manera que tenga los valores para par1, par2 y par3 repetidos n veces, donde n es la dimensión del vector t?
Gracias.
Re: ejecutar simulaciones de Matlab y crear una tabla de datos JMP con resultados de simulacionesaquí hay un pseudocódigo no probado que podría ajustarse a lo que está describiendo
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 ...Nombré la variable de tabla p1 para par1 para simplificar los problemas de alcance cuando los nombres de las columnas son los mismos que los nombres de las variables. Imaginé que hacías llamadas separadas a matlab para cada combinación de par1,2,3. Imaginé que esos vectores se mostraban como matrices JSL. Los factores y diseños y matlab no son mi área fuerte, puede que esté malinterpretando el problema.
Re: ejecutar simulaciones de Matlab y crear una tabla de datos JMP con resultados de simulacionesMuchas gracias por su ayuda. Según sus sugerencias, pude escribir un código jsl que resolvió mi problema. Aquí está el código.
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;
);
);