C语言迭代求解
date : 2013/8/12 desinger :pengxiaoen
今天看 国外电子信息科学经典教材系列 《电子电路分析与设计》 电子工业出版社的 的19页。看到里面的 求二极管的电流电压公式
Vps = Vd + Id * R
= IsR【e ^(Vd/(n *Vt)) - 1】 + Vd
其中反向饱和电流 Is 为常量数值在10^-15 ~ 10^-13之间 ,取 10 ^-13A
Vt 为热力学电压 ,室温下 V = 0.026V
n为理想因素 ,1<= n <=2 .取值 1
在Vps = 5v 情况下 R = 2kΩ 如图 求出Vd 。因为是超越方程。所以可以用C 语言 采用 二分法 求解
程序中精度控制在 0.001 。就是允许有0.001 的误差。
常量 e=2.7182818
1 # include "stdio.h" 2 # include "math.h" 3 4 #define E 2.7182818 5 #define Vps 5 6 #define Vt 0.026 7 #define Is 1e-13 8 #define R 2e3 9 #define precision 0.001 10 11 int main () 12 { 13 float Vd ; 14 float y ; 15 float temp=1 ; 16 float updata=Vps ; 17 float downdata = 0; 18 19 Vd= Vps /2.0; 20 while (temp > precision) 21 // if (temp > precision) 22 { 23 y = Vd / Vt; 24 temp = Is * R * ( pow (E , y)-1) + Vd ; 25 temp = Vps - temp ; 26 27 if (temp < 0) 28 { 29 updata = Vd; 30 Vd = Vd - (updata -downdata)/2; 31 } 32 else 33 { 34 downdata = Vd; 35 Vd = Vd + (updata - downdata)/2; 36 } 37 38 temp = fabs (temp); 39 40 } 41 42 printf ("Vd = %.16lf\n",Vd); 43 system ("pause"); 44 }
if else 中决定了 下一次 进入运算的Vd. 最后打印出的数据要求小数点后16位