Scilab中用zdot函数求解RLC电路ODE及绘图问题咨询
s²对应问题 Hey there! Let's clear up the confusion about where that s² from your Laplace equation translates to in your Scilab ODE code, and fix the system definition step by step.
1. 拉普拉斯域与时域的核心对应关系
First, let's anchor the key Laplace transform rules that connect your frequency-domain equation to the time-domain ODE:
s * F(s)对应时域的d/dt f(t)(一阶导数)s² * F(s)对应时域的d²/dt² f(t)(二阶导数)
你的原始拉普拉斯方程是:
Vin = VR/(s²*L*C) + VR/(s*R*C) + VR
要转化为时域方程,先两边乘s²*L*C消去分母:Vin * s²*L*C = VR + VR*s*(L/R) + VR*s²*L*C
对每一项做拉普拉斯逆变换,就得到时域的二阶微分方程:L*C * d²Vin/dt² = VR + (L/R)*dVR/dt + L*C*d²VR/dt²
2. 整理状态变量的微分表达式
你定义的状态变量是:
z1 = y(1) = VR(电阻两端电压)z2 = y(2) = dVR/dt(VR的一阶导数)
我们需要解出d²VR/dt²(也就是zdot(2)),把上面的微分方程重新整理:L*C*d²VR/dt² = L*C*d²Vin/dt² - (L/R)*dVR/dt - VR
两边除以L*C后得到:d²VR/dt² = d²Vin/dt² - (1/(R*C))*dVR/dt - VR/(L*C)
因为你的输入Vin = A*sin(2*%pi*f*t),它的二阶导数可以直接推导:d²Vin/dt² = - (2*%pi*f)² * Vin(正弦函数的二阶导数是-ω² sin(ωt),其中ω=2πf)
3. 修正后的Scilab代码
现在把这些推导结果代入你的RLCsystem函数,以下是修正版,每一步都加了注释:
function zdot=RLCsystem(t, y) // 定义电路参数 R = 11; L = 1.5; C = 0.012; f = 1e4; A = 1; // 输入正弦波振幅 // 状态变量 z1 = y(1); // VR:电阻两端电压 z2 = y(2); // dVR/dt:VR的一阶导数 // 计算输入电压及其二阶导数(对应拉普拉斯域的s²项) Vin = A*sin(2*%pi*f*t); d2Vin_dt2 = - (2*%pi*f)^2 * Vin; // 定义ODE系统 zdot(1) = z2; // z1的一阶导数是z2(dVR/dt) zdot(2) = d2Vin_dt2 - z2/(R*C) - z1/(L*C); // VR的二阶导数 endfunction
4. 为什么之前的代码漏掉了s²对应项?
你原来的代码没有考虑Vin的二阶导数——这正是拉普拉斯方程中s²项对应的时域物理量。省略这一项后,你的ODE系统和最初的拉普拉斯推导就不匹配了,这也是问题的核心。
5. 运行验证示例
要求解并绘制结果,可以用Scilab的ode函数,示例代码如下:
// 初始条件:t=0时VR=0,dVR/dt=0 y0 = [0; 0]; // 时间向量:求解0到1e-4秒(对应10kHz信号的1个周期) t = linspace(0, 1e-4, 1000); // 求解ODE y = ode(y0, 0, t, RLCsystem); // 绘制VR随时间的变化曲线 plot(t, y(:,1)); xlabel("Time (s)"); ylabel("VR (V)"); title("RLC Circuit Resistor Voltage Response");
内容的提问来源于stack exchange,提问作者HAFIZ NOUFAL

