看我修改的是否符合你的要求:
function Untitled
clear all;clc;
f=@(t)(2*sin(t)*(t<(4*pi)) + 0);
g=@(t)(0+cos(t).*(t>=((7*pi)/2)));
% figure(1)
% fplot(f,[0,20],'r');
% hold on
% fplot(g,[0,20],'b');
function dy = rigid(t,y)
dy = zeros(2,1);
dy(1) = y(2)-f(t);
dy(2) = y(1)*g(t)-y(2);
end
options = odeset('RelTol',1e-4,'AbsTol',[1e-5 1e-5]);
%[T, y] = ode45(@rigid, [0 20], [1 2],options)
sol = ode45(@rigid, [0 20], [1 2],options);
x=linspace(0,20,20001);
y=deval(sol,x);
% figure(2)
% plot(x,y(1,:),'r',x,y(2,:),'b',x,0)
res=y(1,:)+y(2,:);
figure(3)
plot(x,res,'b',x,0)
idx=find(abs(res-0)<1e-3)
xx=x(idx)
F=@(t)(f(t)+g(t));
r=[];
for i=1:size(xx,2)
r = [r F(xx(i))];
end
r
end
idx中的精度控制太高,导致找不到你要的idx。另外,x不必太精细,否则运行太慢。