C语言迭代求解

时间:2021-10-30 21:35:50

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 语言  采用 二分法  求解

C语言迭代求解

程序中精度控制在 0.001 。就是允许有0.001 的误差。

常量   e=2.7182818

 # include "stdio.h"
# include "math.h" #define E 2.7182818
#define Vps 5
#define Vt 0.026
#define Is 1e-13
#define R 2e3
#define precision 0.001 int main ()
{
float Vd ;
float y ;
float temp= ;
float updata=Vps ;
float downdata = ; Vd= Vps /2.0;
while (temp > precision)
// if (temp > precision)
{
y = Vd / Vt;
temp = Is * R * ( pow (E , y)-) + Vd ;
temp = Vps - temp ; if (temp < )
{
updata = Vd;
Vd = Vd - (updata -downdata)/;
}
else
{
downdata = Vd;
Vd = Vd + (updata - downdata)/;
} temp = fabs (temp); } printf ("Vd = %.16lf\n",Vd);
system ("pause");
}

if   else 中决定了 下一次 进入运算的Vd. 最后打印出的数据要求小数点后16位

C语言迭代求解