[num]=xlsread("shiyan7shuju.xlsx"); data.i=num(2:1000,6)'; data.r=num(2:1000,4)'; data.s=21893000-data.i-data.r; data.t = 1:length(data.s); % 定义SIR模型微分方程 sir = @(t,y,beta,gamma) [-betay(1)y(2); betay(1)y(2)-gammay(2); gammay(2)]; % 初始化参数估计 beta0 = 0.5; gamma0 = 0.1; params0 = [beta0,gamma0]; y0 = [data.s(1), data.i(1), data.r(1)]; % 使用最小二乘法来拟合SIR模型 params = lsqcurvefit(@(params, t) sir(t, y0, params(1), params(2)), params0, data.t, [data.s; data.i; data.r]); beta = params(1); gamma = params(2); disp(['beta = ', num2str(beta)]); disp(['gamma = ', num2str(gamma)]);错误使用 lsqcurvefit (line 271) Function value and YDATA sizes are not equal.请修改代码使其无错误
时间: 2024-02-28 10:56:32 浏览: 88
好的,你需要将 sir 函数的输出 y 改为一个列向量,且长度为 length(y),即 3。另外,你需要将 betay 和 gammay 改为 beta 和 gamma。修改后的代码如下:
```
[num]=xlsread("shiyan7shuju.xlsx");
data.i=num(2:1000,6)';
data.r=num(2:1000,4)';
data.s=21893000-data.i-data.r;
data.t = 1:length(data.s);
% 定义SIR模型微分方程
sir = @(t,y,beta,gamma) [-beta*y(1)*y(2); beta*y(1)*y(2)-gamma*y(2); gamma*y(2)];
% 初始化参数估计
beta0 = 0.5;
gamma0 = 0.1;
params0 = [beta0,gamma0];
y0 = [data.s(1), data.i(1), data.r(1)];
% 使用最小二乘法来拟合SIR模型
params = lsqcurvefit(@(params, t) sir(t, y0, params(1), params(2)), params0, data.t, [data.s; data.i; data.r]);
beta = params(1);
gamma = params(2);
disp(['beta = ', num2str(beta)]);
disp(['gamma = ', num2str(gamma)]);
```
你可以保存修改后的代码,并尝试运行看看是否还出现错误提示。
阅读全文