IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C++】13 多元正态分布抽样 -> 正文阅读

[C++知识库]【C++】13 多元正态分布抽样

目的

2022/4/28

用C++实现多元正态分布抽样

本地目录:E:\Master\study\Cpp\MultivariateNormalDistributionSamples

参考资料

[1]https://ros-developer.com/2017/11/15/generating-multivariate-normal-distribution-samples-using-c11-eigen-library/

[2]https://github.com/beniz/eigenmvn

[3]http://arma.sourceforge.net/

[4]http://arma.sourceforge.net/docs.html#mvnrnd

思路

在R语言中可以轻松调用rmvnorm()函数实现从多元正态分布中抽样,我希望在C++中实现这种功能。经过一番搜索,找到两种方法。

  • 使用Armadillo库的mvnrnd()函数[3-4]
  • 使用Eigen库自行编写[1-2]

使用Armadillo

使用vcpkg安装Armadillo

E:\software\vcpkg目录下,右键,在终端中打开,输入命令

./vcpkg install Armadillo

等待漫长的下载安装过程,即可安装完成32位Armadillo

再输入命令

./vcpkg install Armadillo:x64-windows

等待漫长的下载安装过程,即可安装完成64位Armadillo

使用Eigen库自行编写

该方法较为复杂,经过试验,放弃使用

源码

在VS2019中,输入以下代码,编译链接

// MultivariateNormalDistributionSamples.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// 参考资料:http://arma.sourceforge.net/
// https://stackoverflow.com/questions/6142576/sample-from-multivariate-normal-gaussian-distribution-in-c


#include <iostream>
#include <armadillo>//包含armadillo头文件

using namespace std;
using namespace arma;//armadillo命名空间

int main()
{
	cout << "Armadillo version: " << arma_version::as_string() << endl;

	mat A = randu<mat>(4, 5);//4行5列矩阵
	mat B = randu<mat>(4, 5);

	cout << "A*B.t():\n" << A * B.t() << endl;//.t()向量或矩阵转置

	(A * B.t()).print("A*B.t():");

	vec M(5, fill::randu);

	mat D(5, 5, fill::randu);
	mat C = D.t() * D;

	mat X = mvnrnd(M, C, 5);

	cout << "X:\n" << X << endl;

	system("pause");

	return 0;
}

运行结果

Armadillo version: 10.6.2 (Keep Calm)
A*B.t():
   1.0269   1.0702   1.3516   1.9736
   1.0553   1.6784   1.7857   1.7695
   0.5042   0.4844   0.5324   1.0123
   0.6624   1.3403   1.2322   1.2464

A*B.t():
   1.0269   1.0702   1.3516   1.9736
   1.0553   1.6784   1.7857   1.7695
   0.5042   0.4844   0.5324   1.0123
   0.6624   1.3403   1.2322   1.2464
X:
   2.1518  -1.9524  -1.3810   0.4499  -0.5635
   2.5495  -2.1896  -2.4168  -0.1311  -0.6948
   3.1666  -0.0019   0.4300  -0.1362   0.8860
   4.2867  -1.7698  -0.2368   0.3843   0.3144
   1.8961  -0.4027   0.5270   1.2690   0.4838

请按任意键继续. . .
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 10:59:30  更:2022-05-05 11:01:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:43:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码