运用Matlab求解联立方程组 |
您所在的位置:网站首页 › matlab如何求矩阵方程组 › 运用Matlab求解联立方程组 |
本文针对当电路的结构复杂时,运用KCL与KVL求解电路的电压增益,输入输出电阻等参数所遇到的联立方程组数目多,运用手算的方法计算速度慢,准确率低的问题,该方法可作为手算求解的检查方法以验证运算结果的准确性。 函数介绍 syms()syms()函数用于定义符号变量,我们在方程式中所使用的Vin,Vout等都是符号变量。 solve()solve()函数用于求解联立方程组,函数的具体使用方法将在下方的程序中进行介绍,函数的返回值为一个包含着方程组中所有未知数的解的表达式。 simplify()simplify()函数用于化简,主要的功能就是合并同类项。 collect()collect()函数用于将表达式按照指定的变量进行降解排列。 程序举例假设由电路的结构图,列出的方程组如下: V X − V i n R S + V X C G S s + ( V X − V o u t ) C G D s = 0 ( V o u t − V X ) C G D s + g m V X + V o u t ( 1 R D + C D B s ) = 0 \frac{V_X-V_{in}}{R_S}+V_XC_{GS}s+\left( V_X-V_{out} \right) C_{GD}s=0 \\ \left( V_{out}-V_X \right) C_{GD}s+g_mV_X+V_{out}\left( \frac{1}{R_D}+C_{DB}s \right) =0 RSVX−Vin+VXCGSs+(VX−Vout)CGDs=0(Vout−VX)CGDs+gmVX+Vout(RD1+CDBs)=0 为求出电路增益而编写的函数如下: clear; clc; syms Vx Vin Rs Cgs s Cgd Vout gm RD Cdb; %定义符号,就是公式里的符号都在这定义 VS = solve([(Vx-Vin)/Rs + Vx*Cgs*s + (Vx-Vout)*Cgd*s == 0, (Vout-Vx)*Cgd*s + gm*Vx + Vout*(1/RD + Cdb*s) == 0], [Vx Vout]); %solve后列出要联立的方程组,后一个方括号中填的是未知数,例如VX,Vout这种就是未知数,Cgd这种就是已知 %数,未知数总是要由已知数表示,这里之所以认为VX也是未知数是因为我们不想在最后结果的表达式中看到VX, %也就是说只要我们不想在最终的结果中看到的未知数都认为是已知数 %solve所返回的VS中包含Vx,Vout这些未知数由已知量所表示的解的表达式 %其他的符号要用于表示未知数,注意方程的个数和未知数的个数要匹配,几个未知数就要有几个方程 %这里之所以没有将Vin认为是未知数,因为在最终结果是Vout/Vin,Vout中要包含有Vin,若认为Vin是未知数, %一是最终Vout/Vin无法计算,二是solve的方程数和变量的数目不匹配 a = simplify(VS.Vout); b = collect(a, s) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |