C++知识点—02 <绘制一组数据的正态分布曲线>

devtools/2025/2/22 8:59:59/

一、步骤

  • 计算数据的均值和标准差:计算数据的均值(μ)和标准差(σ)。

  • 定义正态分布函数:使用正态分布的概率密度函数(PDF)来计算每个点的值。

  • 绘制曲线:使用Qt的绘图功能(如QPainter)来绘制曲线。

二、例子

1. 代码

  • 数据准备:data 是绘制正态分布曲线的数据集。

  • 计算均值和标准差:calculateMeanAndStdDev 函数计算数据的均值和标准差。

  • 正态分布函数:normalPDF 函数计算给定点的正态分布概率密度值。

  • 绘制曲线:在 paintEvent 中使用 QPainter 绘制曲线。

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QVector>
#include <cmath>
#include <algorithm>class NormalDistributionWidget : public QWidget {
public:NormalDistributionWidget(QWidget *parent = nullptr) : QWidget(parent) {// 示例数据data = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9};calculateMeanAndStdDev();}protected:void paintEvent(QPaintEvent *event) override {Q_UNUSED(event);QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing); //防走样("锯齿"现象)函数// 设置绘制区域int width = this->width();int height = this->height();painter.setPen(Qt::blue);// 绘制正态分布曲线for (int x = 0; x < width; ++x) {double xval = xmin + (xmax - xmin) * x / width;double yval = normalPDF(xval, mean, stddev);int y = height - (yval * height / ymax);painter.drawPoint(x, y);}}private:QVector<double> data;double mean, stddev;double xmin = 0, xmax = 10; // X轴范围double ymax = 0.5; // Y轴最大值void calculateMeanAndStdDev() {double sum = std::accumulate(data.begin(), data.end(), 0.0);mean = sum / data.size();double sq_sum = std::inner_product(data.begin(), data.end(), data.begin(), 0.0);stddev = std::sqrt(sq_sum / data.size() - mean * mean);}double normalPDF(double x, double mu, double sigma) {static const double inv_sqrt_2pi = 0.3989422804014327;  //注解1double a = (x - mu) / sigma;return inv_sqrt_2pi / sigma * std::exp(-0.5 * a * a);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);NormalDistributionWidget widget;widget.resize(800, 600);widget.show();return app.exec();
}
a. 注解

1. 示例:static const double inv_sqrt_2pi = 0.3989422804014327;

  • 作用:预计算正态分布概率密度函数(PDF)中的一个常数部分,以提高计算效率。
  • 正态分布的概率密度函数(PDF)公式如下:

 

  • 代码化:
#include <cmath> // 用于 std::exp 和 std::sqrtdouble normalPDF(double x, double mu, double sigma) {// 计算常数部分:1 / (sigma * sqrt(2 * pi))static const double inv_sqrt_2pi = 0.3989422804014327; // 1 / sqrt(2 * pi)double normalization = inv_sqrt_2pi / sigma;// 计算指数部分:exp(-0.5 * ((x - mu) / sigma)^2)double exponent = -0.5 * std::pow((x - mu) / sigma, 2);// 返回概率密度值return normalization * std::exp(exponent);
}//调用#include <iostream>int main() {double x = 1.0; // 输入值double mu = 0.0; // 均值double sigma = 1.0; // 标准差double pdf_value = normalPDF(x, mu, sigma);std::cout << "正态分布概率密度值: " << pdf_value << std::endl;return 0;
}

 

2. 运行结果


http://www.ppmy.cn/devtools/160909.html

相关文章

Windows 10操作系统上安装PHP

1. 下载PHP安装包 首先&#xff0c;我们需要从PHP官方网站下载PHP安装包。请按照以下步骤操作&#xff1a; 打开浏览器&#xff0c;访问PHP官方网站&#xff1a;https://www.php.net/downloads.php。在下载页面上&#xff0c;你会看到多个版本的PHP可供选择。建议选择稳定版&…

fastadmin实现海报批量生成、邮件批量发送

记录一个海报批量生成、邮件批量发送功能开发&#xff0c;业务场景如下&#xff1a; 国外客户做观展预登记&#xff0c;工作人员通过后台&#xff0c;批量给这些观众生成入场证件并发送到观众登记的邮箱&#xff0c;以方便观众入场时快速进场。证件信息包含入场二维码、姓名&a…

亲测Windows部署Ollama+WebUI可视化

一. Ollama下载 登录Ollama官网(Ollama)点击Download进行下载 如果下载很慢可用以下地址下载&#xff1a; https://github.com/ollama/ollama/releases/download/v0.5.7/OllamaSetup.exe 在DeepSeek官网上&#xff0c;你可以直接点击【model】 到达这个界面之后&#xff0c;…

Deepseek整合SpringAI

在现代应用开发中&#xff0c;问答系统是一个常见的需求&#xff0c;尤其是在客服、教育和技术支持领域。本文将介绍如何使用 Spring Boot、Deepseek 和 Spring AI 构建一个简单的问答系统&#xff0c;并通过 Postman 调用 API 接口实现问答功能。通过本文&#xff0c;你将学习…

STL —— 洛谷字符串(string库)入门题(蓝桥杯题目训练)(二)

目录 一、B2121 最长最短单词 - 洛谷 算法代码&#xff1a; 代码分析 变量定义 输入处理 单词长度计算 更新最长和最短单词的长度 输出最长单词 输出最短单词 评测记录&#xff1a;​编辑 二、B2122 单词翻转 - 洛谷 算法代码&#xff1a; 代码分析 引入头文件和定…

今日行情明日机会——20250221

明日投资机会分析 根据2月21日市场数据&#xff0c;市场情绪活跃&#xff08;涨停117家&#xff0c;跌停4家&#xff09;&#xff0c;资金聚焦机器人、AI、算力、芯片等科技主线&#xff0c;结合板块梯队与连板强度&#xff0c;建议重点关注以下方向&#xff1a; 1. 机器人概念…

基于Spring Boot的农产品智慧物流系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

AI客服-接入deepseek大模型到微信(本地部署deepseek集成微信自动收发消息)

1.本地部署 1.1 ollama Ollama软件通过其高度优化的推理引擎和先进的内存管理机制&#xff0c;显著提升了大型语言模型在本地设备上的运行效率。其核心采用了量化技术&#xff08;Quantization&#xff09;以降低模型的计算复杂度和存储需求&#xff0c;同时结合张量并行计算&…