Matlab 시뮬레이션을 실행하고 시뮬레이션 결과가 포함된 JMP 데이터 테이블 생성여러분 모두에게,
#Matlab 시뮬레이션을 실행하기 위해 JMP를 사용하고 있습니다. 저는 세 가지 요인(par1, par2 및 par3)과 반응에 대한 여러 개의 빈 열(y1, y2)이 있는 JMP를 사용하여 설계를 만들었습니다. 나는 디자인의 각 행에 대해 Matlab 코드를 실행하고 시뮬레이션 결과를 얻는 JSL 스크립트를 만들었습니다(세 개의 벡터: 시간, y1 및 y2; y1 및 y2는 실제로 시간 함수입니다). 이제 par1, par2, par3, time, y1 및 y2가 포함된 JMP 데이터 테이블을 생성하고 싶습니다. 물론 주어진 시뮬레이션의 경우 par1, par2 및 par3은 시뮬레이션을 따라 반복되는 동일한 값을 가져야 합니다. 다음은 제가 만들고 싶은 새 테이블의 예입니다. 시간, y1 및 y2를 JMP에 열로 가져온 후 JSL 코드에 어떻게 접근해야 하는지 알려줄 수 있는 사람이 있나요?
많은 감사를 드립니다.
par1 par2 par3 시간 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 .. ..
자동화 및 스크립팅Re: Matlab 시뮬레이션을 실행하고 시뮬레이션 결과로 JMP 데이터 테이블을 생성합니다.당신의 도움을 주셔서 대단히 감사합니다. 귀하의 제안에 따라 제 문제를 해결하는 jsl 코드를 작성할 수 있었습니다. 코드는 다음과 같습니다.
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: Matlab 시뮬레이션을 실행하고 시뮬레이션 결과로 JMP 데이터 테이블을 생성합니다.다음은 귀하가 설명하는 내용에 맞을 수 있는 테스트되지 않은 의사 코드입니다.
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 ...열 이름이 변수 이름과 동일한 경우 범위 지정 문제를 단순화하기 위해 par1에 대해 테이블 변수 p1의 이름을 지정했습니다. par1,2,3의 각 조합에 대해 matlab을 별도로 호출한다고 상상했습니다. 나는 그 벡터가 JSL 행렬로 나타나는 것을 상상했습니다. 요인 및 디자인과 matlab은 내 강점이 아니므로 문제를 오해하고 있을 수 있습니다.
Re: Matlab 시뮬레이션을 실행하고 시뮬레이션 결과로 JMP 데이터 테이블을 생성합니다.안녕하세요,
코드 덕분에 유용했습니다.
아직 도움이 필요합니다. 내 문제는 시간이 원래 디자인의 요소가 아니라는 것입니다. 원래 디자인은 par1, par2, par3만 있습니다. par1, par2 및 par3의 각 조합에 대해 JMP는 Matlab을 실행하고 3개를 얻습니다. 벡터 (t, y1 및 y2). par1, par2 및 par3의 값이 n번 반복되도록 결과 데이터 테이블에 이 세 벡터를 추가하도록 JMP에 요청하려면 어떻게 해야 합니까? 여기서 n은 t 벡터의 차원입니다.
감사해요.
Re: Matlab 시뮬레이션을 실행하고 시뮬레이션 결과로 JMP 데이터 테이블을 생성합니다.나는 보통 내가 원하는 것처럼 보이는 단일 행이 있는 새 테이블을 만들어 GUI에서 출력 테이블의 형식을 만듭니다. 그런 다음 빨간색 삼각형을 사용하여 테이블 스크립트(데이터 없음) . 해당 스크립트를 편집기에 붙여넣습니다. dt = 반죽 ;
그런 다음 방금 붙여넣은 스크립트에서 추가 행을 제거하고 열 정의만 남깁니다. 표시되면 선택한 열 비트도 제거하십시오.
테이블을 채우기 위해 작성하는 루프는 각 행에 대해 addrows(1)를 사용하고 해당 행에 각 변수를 설정합니다. 기본 행은 방금 추가한 행이므로
for( ... ,
dt<<ADDROWS></ADDROWS>
다음은 각 루프에 세 개의 행을 추가한 예입니다. 선의 차이 .