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 );
}
この問題を解決できる人がいたら教えてください。
お礼
失礼しました。ケット|q, t>とは時刻tのとき位置qにある状態を意味します。 ブラ<q, t|も同じ意味です。
補足
自力で解決したのでもう質問する必要がなくなりました。