之前二月初的时候利用Qt的charts模块、Qt读取excel表格数据,做了两个关于病毒感染人数的统计图。最近几天美国确诊人数不断新创第一,所以想看下能否有比较贴合的函数来拟合下,然后在结合官方数据看数学模型的效果。
之前的文章链接:
数据来源:
https://coronavirus.1point3acres.com/
确诊人数图表:
又是我手填的excel表格:
我做的函数模型以及官方公布数据对比。
确诊人数受到多方面因素影响,如若不自由、吾宁死... 确诊人数自然是比较好预测的。
当然如果像国内这样,宁可经济短时间停摆也要减少伤亡,这种就不是函数的自然发展了。
从图中我们可以看到后期函数拟合效果还不错,所以预测明天确诊人数是215917......
贴上程序凑凑字数:
ui->setupUi(this);
m_girdLayoutChart = new QGridLayout(this);
m_confirmSeries = new QLineSeries();
m_confirmSeries->setName(tr("确诊"));
m_confirmSeries->setPen(QPen(Qt::red, 3));
m_mathFunction = new QLineSeries;
m_mathFunction->setName(tr("函数模型"));
m_mathFunction->setPen(QPen(Qt::green, 3));
m_increaseConfirmSeries = new QLineSeries();
m_increaseConfirmSeries->setName(tr("新增确诊"));
m_increaseConfirmSeries->setPen(QPen(Qt::blue, 3));
Document xlsxR("E:\\MyQtProject\\drawFunctionImage\\USA2019-nCov\\2019USA-nCov.xlsx");
if ( xlsxR.load() ) // load excel file
{
for(int i=0; i<27;i++)
{
m_mathFunction->append(i+1, pow((i+1),3.7)+ 700*i );
//我自己瞎写的函数模型,指数函数后期太快,幂函数操作一下效果还好
int confirmRow = i + 3; int confirmCol = 3; //确诊人数
int increaseConfirmRow = i + 3; int increaseConfirmCol = 4; //新增确诊
Cell* confirmCell = xlsxR.cellAt(confirmRow, confirmCol); // get cell pointer.
Cell* increaseConfirmCell = xlsxR.cellAt(increaseConfirmRow, increaseConfirmCol);
if ( confirmCell != nullptr )
{
QVariant confirmVar = confirmCell->readValue(); // read cell value (number(double), QDateTime, QString ...)
QVariant increaseConfirmVar = increaseConfirmCell->readValue();
m_confirmSeries->append(i+1, confirmVar.toInt());
m_increaseConfirmSeries->append(i+1, increaseConfirmVar.toInt());
}
else
{
qDebug() << "[debug] cell is not set.";
}
}
}
else
{
qDebug() << "[debug][error] failed to load xlsx file.";
}
QChart *chart = new QChart();
// chart->legend()->hide();
chart->addSeries(m_confirmSeries);
chart->addSeries(m_increaseConfirmSeries);
chart->addSeries(m_mathFunction);
chart->createDefaultAxes();
chart->setTitle("2019USA-nCov");
QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
m_girdLayoutChart->addWidget(chartView);
小结:
别忘记今天还是一个特殊的日子—— 81192 !!!
我记录我来过我存在