主要内容

解决硬晶体管微分代数方程

这个例子展示了如何使用ode23t解决一个僵硬的微分代数方程(DAE)描述了一种电路[1]。有关晶体管放大器的问题示例文件的编码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 = 1 e-6 * (1:3);M = 0 (5,5);米(1,1)= - c (1);(1、2)= c (1);米(2,1)= c (1);米(2,2)= - c (1);(3)= - c (2);米(4,4)= - c (3);(4、5)= c (3);5米(4)= c (3); M(5,5) = -c(3); opts = odeset(“质量”,M);

代码方程

这个函数transampdae对于这个例子包含方程组。函数定义了所有的电压和恒定参数的值。衍生品聚集在左边的方程是质量矩阵编码,和transampdae代码的右边方程。

函数dudt = transampdae (t, u)%定义电压和参数问题= @ (t) 0.4 * sin(200 *π* t);乌兰巴托= 6;R0 = 1000;R15 = 9000;α= 0.99;β= 1 e-6;佛罗里达大学= 0.026;%定义方程组f23 =β* (exp ((u (2) - (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]。

乌兰巴托= 6;情况(1)= 0;情况(2)=乌兰巴托/ 2;情况(3)=乌兰巴托/ 2;情况(4)=乌兰巴托;情况(5)= 0;

解方程组

解决DAE系统时间间隔0.05 [0]使用ode23t

tspan = 0.05 [0];[t u] = ode23t (@transampdae, tspan情况,选择);

阴谋的结果

情节的初始电压 U e ( t ) 和输出电压 U 5 ( t )

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

图包含一个坐标轴对象。坐标轴对象与标题一个晶体管放大器DAE问题解决ODE23T包含2线类型的对象。这些对象代表输入电压U_e (t)输出电压U_5 (t)。

引用

[1]头发,E。,and Gerhard Wanner.解常微分方程2:僵硬和微分代数问题。激飞柏林海德堡,1991,第377页。

本地函数

这里列出的是当地的辅助函数,ODE求解器进行求解ode23t调用计算解决方案。或者,您可以保存这个函数作为其自己的文件在MATLAB上的一个目录路径。

函数dudt = transampdae (t, u)%定义电压和参数问题= @ (t) 0.4 * sin(200 *π* t);乌兰巴托= 6;R0 = 1000;R15 = 9000;α= 0.99;β= 1 e-6;佛罗里达大学= 0.026;%定义方程组f23 =β* (exp ((u (2) - (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)];结束

另请参阅

|

相关的话题