[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); beta gamma出现错误,错误原因:错误使用 lsqcurvefit (line 271) Function value and YDATA sizes are not equal.
时间: 2024-02-28 08:56:16 浏览: 57
matlab导入excel数据教程 [number,txt,raw]=xlsread('noise xlsx')
5星 · 资源好评率100%
根据错误信息,估计是在调用 `lsqcurvefit` 函数时,传递给它的数据向量和函数的输出向量长度不相等。请检查 `sir` 函数的输出向量长度是否与数据向量的长度相同。
在这种情况下,您可以尝试将 `sir` 函数中的输出向量长度设置为与数据向量长度相同,如下所示:
```
sir = @(t,y,beta,gamma) [-beta*y(1)*y(2); beta*y(1)*y(2)-gamma*y(2); gamma*y(2)];
```
如果这仍然无法解决问题,则需要检查其他部分的代码是否存在问题。
阅读全文