一、原理阐释
节点电压法是电路的系统分析方法之一,所谓节节点电压法
点电压是指电路中任一节点与参考节点之间的电压,该电路分析方法的本质是先利用KVL 定理将各支路电流用节点电压表示,然后只列n-1 个节点的KCL 方程(n 为所分析电路的节点数)。
支路电流法既列KVL 方程又列KCL 方程,回路电流法只列KVL 方程,与这两种电路分析方法相比,当电路的节点数较少,支路数较多时,采用节点电压法简单,因为列的方程数较少。特别是当有理想电压源直接并接在两节点之间时,只要灵活应用节点电压法,便可以进一步减少所列的方程数。
以电路中节点电压为未知量,根据KCL写出独立的节点电流方程,然后联立求解出节点电压的方法。
对多支路两节点电路的计算尤为简便。
节点电压是指电路中任一点到参考点之间的电压,参考点人为选择.常以接地点为参考点。
二、求解方法
第一步:把电压源与阻抗的串联形式化为电流源与导纳的并联形式
第二步:标出节点,并把其中一个节点选为参考节点(一般为0电位点)
第三步:列出节点电压方程。
三、编程思路
通过矩阵来存储数据,数据间的关系通过设定相应的关系矩阵。然后矩阵的运算方程求解出所有的节点电压。考虑到matlab对于矩阵的运算来说最为方便且对基本操作较为熟悉,故此次仅采用matlab来实现,日后期待学习更好的软件来实现界面优化和功能拓展。
四、实现代码
clc
n=input('输入结点数:');%输入节点数
b=input('输入电压定义支路数: ');
Y=zeros(n,n);%存储电导信息
B=zeros(n,b);%存储流入结点的电流源
C=zeros(b,n);%存储受控源电路的电压电流关系
D=zeros(b,b);%存储已知电流关系的电阻
e=zeros(n,1);%计算结点电压值
iv=zeros(b,1);%存储电压定义支路电流
J=zeros(n,1);%存储流出电流代数和
E=zeros(b,1);%用结点电压和支路电流表示电压定义支路的支路特性
flag=1;
while flag==1
type=menu('选择输入类型','电导','电阻','电压源','电流源','VCVS','CCVS','VCCS','CCCS','结束');
switch type
case 1 %电导
i=input('输入第一个结点编号: ');
j=input('输入第二个结点编号: ');
g=input('输入电导值/s:');
Y(i,i)=Y(i,i)+g;
Y(j,j)=Y(j,j)+g;
Y(i,j)=Y(i,j)-g;
Y(j,i)=Y(j,i)-g;
case 2 %电阻
i=input('输入第一个结点编号: ');
j=input('输入第二个结点编号: ');
k=input('输入电压定义支路号: ');%第k条电压定义支路
R=input('输入电阻值/欧: ');
B(i,k)=B(i,k)+1;
B(j,k)=B(j,k)-1;
C(k,i)=1;
C(k,j)=-1;
D(k,k)=-R;
case 3 %独立电压源
i=input('输入第一个结点编号: ');
j=input('输入第二个结点编号:');
k=input('输入电压定义支路号: ');
Es=input('输入电压值/V: ');
B(i,k)=B(i,k)+1;
B(j,k)=B(j,k)-1;
C(k,i)=1;
C(k,j)=-1;
E(k,1)=Es;
case 4 %独立电流源
i=input('输入第一个结点: ');
j=input('输入第二个结点: ');
Is=input('输入电流值/A: ');
J(i,1)=J(i,1)-Is;
J(j,1)=J(j,1)+Is;
case 5 %电压控制电压源VCVS
i=input('输入第一个结点: ');
j=input('输入第二个结点: ');
l=input('输入控制支路第一个结点: ');
m=input('输入控制电路第二个结点: ');
k=input('输入VCVS所在的电压定义支路号: ');
a=input('输入VCVS控制系数: ');
B(i,k)=B(i,k)+1;
B(j,k)=B(j,k)-1;
C(k,i)=+1;
C(k,j)=-1;
C(k,l)=-a;
C(k,m)=a;
case 6 %电流控制电压源CCVS
i=input('输入第一个结点: ');
j=input('输入第二个结点: ');
k=input('输入CCVS所在的电压定义支路号: ');
l=input('输入控制支路电压定义支路数: ');
rm=input('输入CCVS的控制系数: ');
B(i,k)=B(i,k)+1;
B(j,k)=B(j,k)-1;
C(k,i)=1;
C(k,j)=-1;
D(k,l)=-rm;
case 7 %电压控制电流源VCCS
k=input('输入电流源的第一个结点: ');
l=input('输入电流源的第二个结点: ');
i=input('输入控制支路的第一个结点: ');
j=input('输入控制支路的第二个结点: ');
gm=input('输入VCCS的控制系数: ');
Y(k,i)=Y(k,i)+gm;
Y(k,j)=Y(k,j)-gm;
Y(l,i)=Y(l,i)-gm;
Y(l,j)=Y(l,j)+gm;
case 8 %电流控制电流源CCCS
i=input('输入受控电流源支路的第一个结点: ');
j=input('输入受控电流源支路的第二个结点: ');
k=input('输入控制源所在的电压定义支路数: ');
h=input('输入控制系数: ');
B(i,k)=B(i,k)+h;
B(j,k)=B(j,k)-h;
case 9
flag=0;
end
end
O=cat(2,Y,B);%横向拼接矩阵
disp(O);
P=cat(2,C,D);%横向拼接矩阵
disp(P);
matrix1=cat(1,O,P);%Y,B,C,D矩阵的拼接
disp(matrix1);
matrix1(1,:)=[];
matrix1(:,1)=[];
matrix2=cat(1,e,iv);
disp(matrix2);
matrix3=cat(1,J,E);
disp(matrix3);
matrix3(1,:)=[];
answer=(matrix1)\(matrix3);
disp(answer);
for a=1:n-1
screen=strcat('结点 ',num2str(a+1),'处电压');
disp(screen);
disp(answer(a,1));
end
五、样例展示
1、无受控源
2、含受控源电路