matlab求解微分方程结果不对

2025-05-14 06:55:23
推荐回答(1个)
回答1:

看我修改的是否符合你的要求:

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不必太精细,否则运行太慢。