[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); beta gamma出现错误,错误原因:错误使用 lsqcurvefit (line 271) Function value and YDATA sizes are not equal.请修改代码
时间: 2024-02-28 09:56:24 浏览: 115
这个错误通常是由于 `lsqcurvefit` 函数的输入参数设置有误导致的。在您的代码中,您的 SIR 模型微分方程有语法错误,导致 `lsqcurvefit` 函数无法正确计算输出向量。
以下是修正后的代码:
```
[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)]);
```
请注意,您的 SIR 模型微分方程中的符号有错误,应该将 `beta*y(1)*y(2)` 和 `gamma*y(2)` 中间的乘号改为 `*`,而不是 `y`。在修正了这个错误后,您应该能够成功运行代码并输出 `beta` 和 `gamma` 的值。
阅读全文