无法使用 zdot 函数求解 ODE

unable to solve ODE with zdot function

我在 Scilab

中使用 zdot 函数绘制 RLC 电路时遇到问题

.

我算出了解析计算:

Vin = ( VR/(s^2*L*C)+ VR/(s*R*C) + VR )   

    // R = 11 Ohm, R = 0.012 F, L = 1.5 H. f - 1e4

我试图在绘图之前解决上面的 ODE,这让我想到了

Vin = (s^2*VR + s*VR*(1/R*C) + VR/(L*C)) /s^2 

我尝试按照 scilab 中的手册使用 zdot 函数求解 ode :

function zdot=RLCsystem(t, y)
z1 = y(1); z2 = y(2);
// Compute input
Vin = A*sin(2*%pi*f*t);    // A = 1, f = 1e4 Hz
zdot(1) = z2; zdot(2) = (Vin - z1/(L*C) - z2/(R*C)) ;
endfunction

--我不知道 s^2 在这个代码/等式中的位置

任何建议都会有所帮助。

这恰恰是一个关于数学形式主义的问题。你所说的解和方程是在拉普拉斯 space 中制定的。粗略地说,s代表微分算子,1/s代表积分算子。在适当的计算中,还涉及初始值。

因此用导数表示法写的 ODE 是

VR'' + VR'/(R*C) + VR/(L*C) = Vin''

如果状态向量y包含递增顺序的函数值和导数,那么s的动作就是那个向量的移位,或者选择与幂对应的分量s 个。这显然是在代码中完成的。

请注意,代码不考虑 Vin 的二阶导数。正确的应该是

function zdot=RLCsystem(t, y)
z1 = y(1); z2 = y(2);
  // Compute input
  w = 2*%pi*f
  Vin = A*sin(w*t);    // A = 1, f = 1e4 Hz
  D2Vin = -A*w^2*sin(w*t)
  zdot(1) = z2; zdot(2) = (D2Vin - z1/(L*C) - z2/(R*C)) ;
endfunction

以下确认计算中的其他消除可能导致一阶系统不包含输入电压的导数。

element laws:
  C*VC'=IC, VR = R*IR = VL = L*IL',
cell laws:
  IC = IL+IR, Vin = VC + VR
eliminate flows
  L*IC' = VR + L*IR'
  L*C*(Vin-VR)'' = VR + L/R*VR'