使用scilab求解和绘制微分方程

时间:2015-04-06 18:29:37

标签: differential-equations scilab

如何使用scilab ode()函数求解二阶微分方程。 (例如:y'' + 3y' + 2y = f(x),y​​(0)= 0,y'(0)= 0) 然后绘制函数y(x)的结果。

我想用它来模拟具有阶跃函数输入的RLC电路信号

这是我试过的代码

function y=u(t)
    y=(sign(t)+1)/2
endfunction

L=0.001
R=10
C=0.000001

function zdot=f(t,y)
    zdot(1)= y(2);
    zdot(2)=(u(t)-y(1)-L*y(2)/R)/(L*C);
endfunction

y0=[0,0];
t0=0;
t=0:0.00001:0.001;
out=ode(y0,t0,t,f);
clf();
plot(out);

非常感谢

1 个答案:

答案 0 :(得分:1)

你几乎就在那里,你只对矢量的形状有问题,以及它如何影响轨迹的集合作为矢量数组。

function y=u(t)
    y=(sign(t)+1)/2
endfunction

L=0.001
R=10
C=0.000001

function zdot=f(t,y)
    zdot = [ y(2); (u(t)-y(1)-L*y(2)/R)/(L*C)];
endfunction

y0=[0;0];
t0=0;
t=0:0.00001:0.001;
out=ode(y0,t0,t,f);
clf();
subplot(211)
plot(t,out(1,:),"r.--");
subplot(212)
plot(t,out(2,:),"b-..");

请注意,所有向量都被强制为列向量。并且绘图是组件明智的,使用提供的时间刻度作为x轴。

另请注意,功能和衍生物这两个组成部分的大小差别很大。