- ベストアンサー
exp()が計算されなくて困ってます。
#include <stdio.h> #include <math.h> #define C_B 13.5e-12 #define C_D 5.5e-12 #define R 100 #define Vb 3e3 /* Breakdown voltage [V]*/ #define Vpp 8e3 #define f 50e3 void main(void){ double C,t=0.0; double dt,tmax,i=0,v=0,bv=0,vc1=0,vc2=0,q1=0,q2=0,w=0,CR; FILE *fp; fp=fopen("test4.txt","w"); C=(C_B*C_D)/(C_B+C_D); tmax=(1/f)*2; dt=tmax/1000; w=2*3.14*f; CR=-1/(R*C_B); while(1){ if(fabs(v-vc2)>=Vb/2){ while(1){ v=(Vpp/2)*sin(w*t); if(fabs(v-vc2)>=0.1*(Vb/2)){ i=(Vpp/2)*(C_B*w/(pow(R,2)*pow(C_B,2)*pow(w,2)-1))*(R*C_B*w*sin(w*t)-exp(CR*t)+cos(w*t)); この式で使われているexpです。↑ q1=q1+i*dt; q2=q2+i*dt; vc1=i/R; vc2=q2/C_B; } else{break;} fprintf(fp,"%1.10f %1.10f %1.10f %1.10f % 1.10f\n",t,v,i,vc2,q2); t=t+dt; if(t>=tmax)break; } } else{ while(1){ v=(Vpp/2)*sin(w*t); i=C*(v-bv)/dt; q2=q2+i*dt; q1=q1+i*dt; vc1=q1/C_D; vc2=q2/C_B; fprintf(fp,"%1.10f %1.10f %1.10f %1.10f\n",t,v,i,vc2,q2); bv=v; t=t+dt; if(fabs(v-vc2)>=Vb/2)break; if(t>=tmax)break; } } if(t>=tmax)break; } fclose( fp ); } この問題を解決できる人がいたら教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
計算はされてると思いますよ ただCR*tが-20000位の数になってるのでexp(CR*t)は0なります
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6289)
実行結果の"test4.txt"の内容を見る限り、 どうなっているからexp()を計算してくれないと 判断されているかがよくわかりません。 判断された理由を教えていただけますか?
補足
text4.txtを使って、sma4というソフトでグラフ化したときに予想では減衰する波形になるとおもっていたのに、正弦波形になったので、exp()が計算されていないものだと勘違いしていました。
お礼
確かにそうですね。。。 そんな単純なことに気が付きませんでした。 指摘していただき、ありがとうございました。