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
",Vd);
43   system ("pause");
44 } 


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

原文地址:https://www.cnblogs.com/sepeng/p/3252762.html