您好,欢迎访问三七文档
电路实验节点电压法Orcad/Pspice组员:孙文健毛文俊沈繁呈尚岸任鸣C语言节点电压法课本上提供的程序虽然能进行一些简单电路的求解,但仍有很多不足之处,我们组重新编写了程序。我们的新程序拥有更广泛的适用性,更人性化的人机交互。该程序以十五章的矩阵法为基础,并在此基础上进行了创新与改进了,解决了矩阵法难以处理无伴随独立源的问题。程序使用流程程序功能上的优势更广泛的适用性错误自检功能重输入功能人机交互导纳阵地生成输入完成,求的各节点电压无伴随独立源的处理•课本15章介绍的矩阵法无法直接处理无伴随对立源支路,必需通过电路理论将无伴随独立源合并到其它支路中才能求解。而本程序用了一种简单而又有效的方法解决了这一问题。•拿无伴随电压源为例,一个无伴随电压源相当于一个电压源和一个电阻阻值为0的电阻串联,所以使用者在使用程序求解时,只要输入该支路的电阻为0即可表示该支路为无伴随电压源支路。•但如果直接把这个0带入矩阵方程中,是无解的。所以这里用近似法对其进行处理。程序会自动的用一个数值非常小,约等于0却不等于0的数来代替这个0,从而即可保证方程有解,又可使计算结果十分接近真实数值。•为了保证处理不同电路时有相同的计算精度,程序中没有预设一个固定的数值来代替0电阻。而是找到所有非0电阻中,绝对值最小的一个,将该最小值除以一个常数N(程序中N=10000),用得到的结果代替0电阻。•实践证明,在保留两位小数的情况下,程序的计算结果与真实数值完全相等。如果要得到更高精度的结果,可以通过提高常数N的数值来实现。较为规范的设计风格模块化的编程预处理命令的使用更广泛的适用性•在程序的开始,由使用者自己输入电路的节点数与支路数,使得该程序可适用于各种无耦合的电路。错误自检功能•该程序在很多地方都可以对错误的输入做出反应,最典型的是对A矩阵的错误检测。由于电路的拓扑图的限制,很多输入组合是不可能出现的。比如图中的一行全为0”的情况和一列中有两个1”的情况。当程序检测到A矩阵输入错误时,会提示Dataerror.”,并在用户按下任意键后要求用户重新输入。重输入功能•每输入完一个矩阵,程序都会提示是重新输入还是继续输入,这样就不会因为一个数据输入错误,使得一切都要从头来过。人机交互在输入各支路的相关信息时,程序会显示正在输入的是哪个支路,从而方便使用者的操作导纳阵地生成•对于一些含有受控源的电路,导纳阵的计算往往比较麻烦,所以该程序提供了Y矩阵自动生成功能。用户只需输入各支路的电阻(电导)、各支路的受控源类型、各受控源的控制量所在位置以及各受控源的控制系数。图为用户选择是否需要程序生成Y矩阵。模块化的编程/*输入模块*/voidinput_data(void);/*数据输入*/voidinput_n_b(intpos);/*输入节点数与支路数*/voidinput_A(intpos);/*输入关联矩阵*/voidinput_us_is(intpos);/*输入各支路独立电压(电流)源*/voidinput_y_z_b(intpos);/*输入各支路阻抗(导纳)*/voidinput_y_z(intpos);/*输入阻抗(导纳)矩阵*/voidinput_con(intpos);/*输入有关受控源的信息*/voidinput_branch(float*a,floatmin,floatmax,intpos);/*支路信息标准输入函数*/intreinput(intpos);/*重输入调控函数(返回1表重输)*//*数据处理模块*/voidcreate_Y(void);/*生成导纳阵*/voidcreate_Z(void);/*生成阻抗阵*/voidcreate_Yn(void);/*生成节点导纳阵*/voidcreate_Jn(void);/*生成注入结点电流列向量*/intsolve_equation(void);/*求解方程组*//*矩阵处理模块*/intinput_matrix(matrix*x,intm,intn,intpos);/*矩阵输入*/intoutput_matrix(matrixx,intpos);/*矩阵显示*/matrixtrans_matrix(matrixx);/*矩阵转置*/matrixadd_matrix(matrixx1,matrixx2);/*矩阵相加*/matrixmul_matrix_c(matrixx,floats);/*矩阵乘常数*/matrixmul_matrix_matrix(matrixx1,matrixx2);/*矩阵乘矩阵*/floatsolve_deter(matrixt);/*求解行列式*/matrixsolve_matrix_A_(matrixa);/*求伴随矩阵(A*)*/matrixinverse_matrix(matrixa);/*求逆矩阵*//*其它功能*/inttest_0(floats/*判断浮点数是否等于0(等于0返回1)*/floatsolve_min(float*a,intm);/*找最小值*/voiddisplay_version(void);/*显示版本信息*/预处理命令的使用•合理的使用预处理命令,特别是使用宏定义(#define)命令,是规范化的程序设计风格的必要条件。宏定义可方便程序的调试,提高程序的可维护性,可移植性以及可读性。在我们设计的程序中,绝大部分的常量都是以宏定义的形式给出的,例如,对于受控源的处理,有如下的宏定义:/*有关受控源的宏定义*/#defineNULL0/*无受控源*/#defineCCCS1#defineCCVS2#defineVCCS3#defineVCVS4经过定义后,就可在相应的程序段里写CCCS来表示数字1。对于计算机,写CCCS与1是没有区别的,但对于程序的阅读者则不同。直接写数字1的话,阅读者就很难理其意义;而写CCCS,对于有一定电路基础知识的人,就可方便的理解程序的功能。Orcad/Pspice直流稳态电路一阶电路二阶电路直流稳态电路•电路图直流稳态电路Time0s10ms20ms30ms40ms50ms60ms70ms80ms90ms100msI(R1)0A0.5A1.0A1.5AIR1UR3Time0s10ms20ms30ms40ms50ms60ms70ms80ms90ms100msV(R3:2)0V100V200V300V一阶电路•电路图一阶电路Time0s50ms100ms150ms200ms250ms300ms350ms400ms450ms500ms550ms600msV(C1:+)-2.0V0V2.0VVC1IC1Time0s100ms200ms300ms400ms500ms600msI(C1)-400mA-200mA0A200mA二阶电路1•电路图二阶电路1•R=25,IL1,VC1Time0s50ms100ms150ms200ms250ms300ms350ms400ms450ms500msI(L1)V(C1:+)-10-505R=5,IL1,VC1Time0s50ms100ms150ms200ms250ms300ms350ms400ms450ms500msI(L1)V(C1:+)-20-10010R=0,IL1,VC1R=-3,IL1,VC1Time0s50ms100ms150ms200ms250ms300ms350ms400ms450ms500msI(L1)V(C1:+)-40040Time0s50ms100ms150ms200ms250ms300ms350ms400ms450ms500msI(L1)V(C1:+)-1000100200二阶电路2•电路图二阶电路2•UCTime0s10ms20ms30ms40ms50ms60ms70ms80ms90ms100msV2(C1)-100V0V100V200V二阶电路3•电路图二阶电路3•UC,L1,L2Time0s0.1s0.2s0.3s0.4s0.5s0.6s0.7s0.8s0.9s1.0sI(L1)I(L2)V(C1:2)02.04.06.0
本文标题:大学电路实验
链接地址:https://www.777doc.com/doc-4012709 .html