qt生成n个点绘制二次函数曲线并计算出函数曲线 a b c 的值并计算出拟合值R2

时间: 2023-12-23 14:03:26 浏览: 41
以下是一个简单的用Qt绘制二次函数曲线的示例代码,并计算出函数曲线a、b、c的值和拟合值R2: ```cpp #include <QtWidgets> class QuadraticFunctionWidget : public QWidget { public: QuadraticFunctionWidget(QWidget *parent = nullptr) : QWidget(parent) { setWindowTitle("Quadratic Function"); // 设置绘图区域大小 setFixedSize(500, 500); // 生成n个点 const int n = 20; for (int i = 0; i < n; ++i) { double x = i * 1.0 / (n - 1); double y = a * x * x + b * x + c; m_points.append(QPointF(x, y)); } // 计算函数曲线的a、b、c值 double x_sum = 0, x2_sum = 0, x3_sum = 0, x4_sum = 0; double y_sum = 0, xy_sum = 0, x2y_sum = 0; for (int i = 0; i < n; ++i) { double x = m_points[i].x(); double y = m_points[i].y(); x_sum += x; x2_sum += x * x; x3_sum += x * x * x; x4_sum += x * x * x * x; y_sum += y; xy_sum += x * y; x2y_sum += x * x * y; } double denominator = n * x2_sum * x4_sum - x3_sum * x3_sum - x2_sum * x2_sum * n + 2 * x2_sum * x3_sum + x_sum * x_sum * x4_sum - n * x_sum * x2_sum * x2_sum; a = (n * x2y_sum - x2_sum * y_sum - x_sum * xy_sum + n * x_sum * x2_sum * b) / denominator; b = (xy_sum - x_sum * y_sum - a * (x2_sum - n * x_sum * x_sum)) / x2_sum; c = (y_sum - a * x2_sum - b * x_sum) / n; // 计算R2值 double y_mean = y_sum / n; double ss_tot = 0, ss_res = 0; for (int i = 0; i < n; ++i) { double y = m_points[i].y(); ss_tot += (y - y_mean) * (y - y_mean); ss_res += (y - (a * m_points[i].x() * m_points[i].x() + b * m_points[i].x() + c)) * (y - (a * m_points[i].x() * m_points[i].x() + b * m_points[i].x() + c)); } R2 = 1 - ss_res / ss_tot; } protected: void paintEvent(QPaintEvent *event) override { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 绘制坐标系 painter.translate(width() / 2, height() / 2); painter.drawLine(QPointF(-width() / 2, 0), QPointF(width() / 2, 0)); painter.drawLine(QPointF(0, -height() / 2), QPointF(0, height() / 2)); // 绘制函数曲线 painter.setPen(QPen(Qt::red, 2)); QPainterPath path; for (int i = 0; i < m_points.size(); ++i) { QPointF p = m_points[i] * QPointF(width() / 2, -height() / 2); if (i == 0) { path.moveTo(p); } else { path.lineTo(p); } } painter.drawPath(path); } private: QVector<QPointF> m_points; double a = 1, b = 2, c = 1; // 二次函数曲线的a、b、c值 double R2 = 0; // 拟合值R2 }; int main(int argc, char *argv[]) { QApplication app(argc, argv); QuadraticFunctionWidget widget; widget.show(); return app.exec(); } ``` 在上面的代码中,我们生成了n个均匀分布的点,并使用这些点拟合出一个二次函数曲线。然后,我们计算出函数曲线的a、b、c值和拟合值R2,并在窗口中绘制出这个二次函数曲线。

相关推荐

最新推荐

recommend-type

Qt 鼠标/触屏绘制平滑曲线(支持矢量/非矢量方式)

主要介绍了Qt 鼠标/触屏绘制平滑曲线(支持矢量/非矢量方式),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

Qt图形图像开发之曲线图模块QCustomplot库生成静态、动态曲线详细教程图解

主要介绍了Qt图形图像开发之曲线图模块QCustomplot库画静态、动态曲线详细教程图解,需要的朋友可以参考下
recommend-type

Qt图形图像开发之曲线图表模块QChart库一个chart中显示两条曲线详细方法与实例

主要介绍了Qt图形图像开发之曲线图表模块QChart库一个chart中显示两条曲线详细方法与实例,需要的朋友可以参考下
recommend-type

Qt图形图像开发曲线图表模块QChart库缩放/平移详细方法与实例

主要介绍了Qt图形图像开发曲线图表模块QChart库缩放/平移详细方法与实例,需要的朋友可以参考下
recommend-type

Qt图形图像开发之Qt曲线图美化QChart QScatterSeries 空心点阵图,鼠标移动到上面显示数值,鼠标移开数值消失效果实例

主要介绍了Qt图形图像开发之Qt曲线图美化QChart QScatterSeries 空心点阵图,鼠标移动到上面显示数值,鼠标移开数值消失效果实例,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。