最简单的拟合:
直接上代码
MainWindow.c中:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QtCharts/QChart"
#include "QLineSeries"
#include "QValueAxis"
#include "QTimer"
#include "QTime"
#include "QList"
#include "qmath.h"
#include "QPointF"
#include "QDebug"
//#include <QtCharts/QChartGlobal>
#include "QChartView"
QT_CHARTS_USE_NAMESPACE
QChart *m_chart;
QLineSeries *m_series;
#define LEN_MAX 4
//[0]=x,[1]=y
float buff[LEN_MAX][2] = {{6.3,12.36},{3.3,22.84},{5.3,15.48},{4.3,18.72}};
void calculate(float *slop,float *Intercept)
{
float fXY = 0, fXX = 0, fXA = 0, fYA = 0, fYY = 0;
//得到平均值
for(int i = 0;i < LEN_MAX;i++)
{
fXA += buff[i][0]/LEN_MAX;
fYA += buff[i][1]/LEN_MAX;
}
//得到拟合所必需的数据
for(int i = 0;i < LEN_MAX;i++)
{
fXY += (buff[i][0] - fXA)*(buff[i][1] - fYA);
fXX += (buff[i][0] - fXA)*(buff[i][0] - fXA);
fYY += (buff[i][1] - fYA)*(buff[i][1] - fYA);
}
*slop = fXY / fXX;
*Intercept = fYA - ((*slop) * fXA);
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
float slop,Intercept;
calculate(&slop,&Intercept);
qDebug() << slop << Intercept;
//y=1.47x-0.76
m_chart = new QChart;
QChartView *chartView = new QChartView(m_chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->setRubberBand(QChartView::RectangleRubberBand);
m_series = new QLineSeries;
m_chart->addSeries(m_series);
QValueAxis *axisX = new QValueAxis;
axisX->setRange(0,20);
axisX->setLabelFormat("%g");
axisX->setTitleText("axisX");
QValueAxis *axisY = new QValueAxis;
axisY->setRange(0,50);
axisY->setTitleText("axisY");
m_chart->setAxisX(axisX,m_series);
m_chart->setAxisY(axisY,m_series);
m_chart->legend()->hide();
m_chart->setTitle("demo");
QVBoxLayout *layout = ui->verticalLayout;
layout->addWidget(chartView);
QVector<QPointF> points;
points.append(QPoint(0,Intercept));
points.append(QPoint(-(Intercept/slop),0));
qDebug() << points;
if(Intercept > 0)
ui->label->setText(QString("y = %1x + %2").arg(slop).arg(Intercept));
else
ui->label->setText(QString("y = %1x - %2").arg(slop).arg(Intercept));
m_series->replace(points);
}
.pro文件添加:QT += charts
其他没有任何东西
现象:
excel表格生成的:
Qt生成:
基本无差异