zoukankan      html  css  js  c++  java
  • 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位

  • 相关阅读:
    第一次作业
    C语言I博客作业02
    C语言|博客作业11
    C语言I博客作业10
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    JDK-14 & Eclipse & Hello World!
  • 原文地址:https://www.cnblogs.com/sepeng/p/3252762.html
Copyright © 2011-2022 走看看