主要内容

求解刚性晶体管微分代数方程

这个例子展示了如何使用ode23t求解描述电路[1]的刚性微分代数方程(DAE)。在示例文件中编码的单晶体管放大器问题amp1dae.m可以用半显式形式重写,但是这个例子用原始形式解决了它 u ϕ u 。这个问题包括一个恒定的奇异质量矩阵

晶体管放大电路包含六个电阻,三个电容和一个晶体管。

  • 初始电压信号为 U e t 0 4 2 0 0 π t

  • 工作电压为 U b 6

  • 节点上的电压由 U t 1 2 3. 4 5

  • 电阻的值 R 1 2 3. 4 5 6 是恒定的,并且通过每个电阻的电流满足 U / R

  • 电容器的值 C 1 2 3. 是恒定的,并且通过每个电容器的电流满足 C / dt

目标是求出节点5的输出电压, U 5 t

要在MATLAB®中求解该方程,您需要对方程进行编码,对质量矩阵进行编码,并在调用求解器之前设置初始条件和积分间隔ode23t。您可以将所需的函数作为本地函数包含在文件末尾(如此处所示),或者将它们保存为单独的命名文件,保存在MATLAB路径上的目录中。

代码质量矩阵

利用基尔霍夫定律均衡通过每个节点(1到5)的电流,你可以得到一个由五个方程组成的系统来描述电路:

节点 1 U e t R 0 - U 1 R 0 + C 1 U 2 - U 1 0 节点 2 U b R 2 - U 2 1 R 1 + 1 R 2 + C 1 U 1 - U 2 - 0 01 f U 2 - U 3. 0 节点 3. f U 2 - U 3. - U 3. R 3. - C 2 U 3. 0 节点 4 U b R 4 - U 4 R 4 + C 3. U 5 - U 4 - 0 99 f U 2 - U 3. 0 节点 5 - U 5 R 5 + C 3. U 4 - U 5 0

这个系统的质量矩阵,通过收集方程左边的导数项得到,有这样的形式

- c 1 c 1 0 0 0 c 1 - c 1 0 0 0 0 0 - c 2 0 0 0 0 0 - c 3. c 3. 0 0 0 c 3. - c 3.

在哪里 c k k × 1 0 - 6 k 1 2 3.

用适当的常量创建一个质量矩阵 c k ,然后使用odeset函数来指定质量矩阵。即使很明显质量矩阵是奇异的,留下“MassSingular”选项的默认值为“也许”测试求解器对DAE问题的自动检测。

C = 1e-6 * (1:3);M = 0 (5,5);M(1,1) = -c(1);M(1,2) = c(1);M(2,1) = c(1);M(2,2) = -c(1);M(3,3) = -c(2);M(4,4) = -c(3);M(4,5) = c(3);M(5,4) = c(3); M(5,5) = -c(3); opts = odeset(“质量”, M);

代码方程

这个函数transampdae包含本例的方程组。该函数定义了所有电压和常数参数的值。聚集在方程左侧的导数在质量矩阵中编码,并且transampdae对等式右边进行编码。

函数dut = transampdae(t,u)定义电压和参数Ue = @(t) 0.4*sin(200* *t);Ub = 6;R0 = 1000;R15 = 9000;Alpha = 0.99;Beta = 1e-6;Uf = 0.026;定义方程组f23 = *(exp((u(2) - u(3))/Uf) - 1);dudt =[(问题(t) - u (1)) / R0 -(乌兰巴托/ R15 - u (2) * 2 / R15 f23(1α)*)- (f23 - u (3) / R15) -((乌兰巴托- u (4)) / R15 -αf23 *) (u (5) / R15)];结束

注意:这个函数作为一个局部函数包含在示例的末尾。

初始条件

设置初始条件。本例对通过[1]计算的每个节点的电流使用一致的初始条件。

Ub = 6;0(1) = 0;u0(2) = Ub/2;u0(3) = Ub/2;u0(4) = Ub;U0 (5) = 0;

解方程组

在时间间隔内求解DAE系统0.05 [0]使用ode23t

Tspan = [0 0.05];[t,u] = ode23t(@transampdae,tspan, 0,opts);

阴谋的结果

绘制初始电压 U e t 输出电压 U 5 t

Ue = @(t) 0.4*sin(200* *t);情节(t)问题(t)“o”t u (:, 5),“。”)轴([0 0.05 -3 2]);传奇(输入电压U_e(t)输出电压U_5(t)“位置”“西北”);标题(ODE23T解决单晶体管放大器DAE问题);包含(“t”);

图包含一个轴对象。题目为“用ODE23T求解单晶体管放大器DAE问题”的轴对象包含2个类型为直线的对象。这些对象表示输入电压U_e(t),输出电压U_5(t)。

参考文献

海尔,E.和格哈德·万纳。常微分方程的求解II:刚性和微分代数问题。[10]柏林,海德堡,1991,第377页。

本地函数

这里列出的是ODE求解器使用的本地帮助函数ode23t调用来计算解。或者,您可以将此函数作为其自己的文件保存在MATLAB路径上的目录中。

函数dut = transampdae(t,u)定义电压和参数Ue = @(t) 0.4*sin(200* *t);Ub = 6;R0 = 1000;R15 = 9000;Alpha = 0.99;Beta = 1e-6;Uf = 0.026;定义方程组f23 = *(exp((u(2) - u(3))/Uf) - 1);dudt =[(问题(t) - u (1)) / R0 -(乌兰巴托/ R15 - u (2) * 2 / R15 f23(1α)*)- (f23 - u (3) / R15) -((乌兰巴托- u (4)) / R15 -αf23 *) (u (5) / R15)];结束

另请参阅

|

相关的话题

Baidu
map