다음 코드는 2 개의 고조파 발진기를 설명합니다. 그것들은 처음에는 연결되지 않고 독립되어 있으며 기계식 오실레이터 인 그 중 하나만보고 있습니다. 다른 오실레이터의 변수가 선언되어 강제로 0이됩니다. 먼저 300,000 회 반복을 수행하고 wdm (기계식 드라이브 w)의 80 가지 다른 주파수에 대해이 작업을 수행합니다. 내가 함께 파일을 40 개 주파수 각각의 2 개 부분에서 코드를 실행하고 추가 할 경우 왜 다음 코드에 메모리가 부족합니까?
However, my code runs till 58 frequencies and gives this error:
//find frequency response int index_A; double wdm_1; wdm_1=wm-2*3.142*2e5; double wdm_2; wdm_2=wm+2*3.142*2e5; double wdm_prec=2*3.142*5e3; index_A=(wdm_2-wdm_1)/wdm_prec; printf("%d \n", index_A);
는 이상하게도, 그것을 잘 작동합니다. 내가 3 V0의 크기를 줄일 때 또한
Resonance peak in frequency domain는 코드가 제대로 작동합니다. 그러나 나중에 다른 변수가 필요할 것입니다. 시간 반복의 끝에서
int j=0;
for (j=0; j<= index_A ; j++){
wdm=wdm_1+j*wdm_prec;
printf("%d \n",j);
v0[0] = 0;
v0[1] = 0;
v0[2] = 0;
v0[3] = 0;
v0[4] = 0;
v0[5] = 0;
v0[6]= wdm;
for (i=0; i< n ; i++){
if (cabs(xa)>=1){
printf("Breaking Loop \n");
break;
}
v1 = rk4vec_ameya_complex_1 (tau, 7, v0, dtau, rk4vec_f_ameya_complex_1);
memcpy(v0, v1, 4 * sizeof (double complex));
tau=tau+dtau;
}
fprintf(f1, "%g, %g \n", wdm/(2*3.142), cabs(v1[2]));
}
printf("Completed");
fclose(f1);
는, I는 파일의 주파수 WDM 값 변위 X = V1 [2]의 마지막 값을 저장하고 다른 주파수와 시간의 반복을 수행하는 이동. 따라서 내 파일에는 주파수 응답이 포함되어 있습니다.
fprintf(f1, "%g, %g \n", wdm/(2*3.142), cabs(v1[2]));
I가 people.sc.fsu.edu/~jburkardt/c_src/rk4/rk4.html에서 룽의 쿠타 (rk4.c)를 사용한
및
#include <complex.h>
을 사용하여 복잡한 데이터 유형을 위해 변형 malloc에 내 사용()는 메모리 부족에 대한 책임이있는 경우
/******************************************************************************/
double complex *rk4vec_f_ameya_complex_1 (double t, int n, double complex u[])
/******************************************************************************/
{
double complex drive_m;
double complex drive_c;
double x;
double xrf0_1;
double complex *uprime;
uprime = (double *) malloc (7 * sizeof (double complex));
//Check if memory unavailable
if(uprime==NULL){
printf("No memory available \n");
return 0;
}
///////////////////Second Order////////////////////////
xrf0_1=xrf0*(1-exp(-0.2*t));
drive_m=(xrf0*cexp(I*((u[6]-wm)/gammac)*t)/(2*wm*gammac));
uprime[2]=u[3];
uprime[3]=(wm/gammac)*(drive_m-u[3]*(2*I+2*gammam/wm)-u[2]*(2*I*gammam/gammac));
return uprime;
free(uprime);
}
이 친절하게 모든 솔루션을 제안 : 함수입니다 다음 룽 - 쿠타-4는 해결해야한다.
예제를 관련 코드로 잘라내어 함수로 표시해야합니다. 익명 블록이 아닌 관련 함수를 표시해야합니다. 주석 처리 한 모든 것을 제거하고 코드가 문제를 일으키는 부분에만 집중하십시오. http://stackoverflow.com/help/mcve –
코드를 줄였습니다 – Ameya