• ベストアンサー

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 ); } この問題を解決できる人がいたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

計算はされてると思いますよ ただCR*tが-20000位の数になってるのでexp(CR*t)は0なります

blackdog10
質問者

お礼

確かにそうですね。。。 そんな単純なことに気が付きませんでした。 指摘していただき、ありがとうございました。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

実行結果の"test4.txt"の内容を見る限り、 どうなっているからexp()を計算してくれないと 判断されているかがよくわかりません。 判断された理由を教えていただけますか?

blackdog10
質問者

補足

text4.txtを使って、sma4というソフトでグラフ化したときに予想では減衰する波形になるとおもっていたのに、正弦波形になったので、exp()が計算されていないものだと勘違いしていました。

関連するQ&A

専門家に質問してみよう