MATLAB - 在 ODE15s 函数中生成方波信号?

MATLAB - Generate square signal in ODE15s function?

我正在尝试通过 ODE15s 求解器从函数内部生成方波信号,运行。问题是,输出不是方形的,而是线性的。

function dX = test(t ,X )

y = X (1)  ;


a = 24;
dc = 50;
k = 2;

f=k*2*pi;
y=a*square(f*t,dc);


% derivative vector 

dX = [ y ]';

运行脚本:

[t , X ]= ode15s ( @test ,[0 10] , [0]) ;

figure (1);
plot(t ,X)

有什么办法可以在ode函数里面实现平方函数吗?我需要函数内部的值,因此不能从 运行 脚本中调用它,因为它是时间的函数,t.

如有任何帮助,我们将不胜感激。谢谢你。

部分答案:如果你把行

fprintf('%g\t%g\n', t, y)

进入您的函数 test,您将看到求解器仅在值为 t 时调用该函数,其中 y 为 24:

0   24
0   24
0   24
1.57072e-14 24
1   24
2   24
3   24
4   24
5   24
6   24
7   24
8   24
9   24
10  24

我不知道为什么 ode15s 会那样做。使用 ode45 可以改善一些情况,但结果仍然不完美。