首页 > 其他分享 >数模原理精解【3】

数模原理精解【3】

时间:2024-07-29 11:53:07浏览次数:10  
标签:10 概率 Julia 数模 计算 阶乘 原理 精解 排列

文章目录

随机事件与概率

基础

  • 某本地电话号码本中有n个电话,每个电话带区号一起12个数字,问从这n个电话中取出后3位不相同的号码的概率是多少?
    1. 后 3 位电话号码均为 0 - 9 中的一个数字,共有以下种可重复排列(有放回的)。 P 10 3 = 1 0 3 2. 因为后 3 位不相同,所以是一种无放回排列 , 以下种排列。 P 10 3 3. P 10 3 1 0 3 = 0.72 1.后3位电话号码均为0-9中的一个数字,共有以下种可重复排列(有放回的)。 \\P_{10}^3=10^3 \\2.因为后3位不相同,所以是一种无放回排列,以下种排列。 \\P_{10}^3 \\3.\frac {P_{10}^3} {10^3}=0.72 1.后3位电话号码均为0-9中的一个数字,共有以下种可重复排列(有放回的)。P103​=1032.因为后3位不相同,所以是一种无放回排列,以下种排列。P103​3.103P103​​=0.72
julia> (factorial(10)/ factorial(7))/(10^3)

0.72

理论

下面内容来自文心一言的自动生成。

Julia中计算概率

在Julia中计算概率通常依赖于你想要解决的具体问题。概率的计算可以涉及简单的数学运算、使用统计分布,或者需要复杂的模拟。以下是一些基本的示例,展示如何在Julia中处理不同类型的概率计算。

1. 简单的概率计算

如果你只是需要计算基于给定概率的简单事件的概率,那么可以直接使用基本的数学运算。

# 假设有两个事件A和B,它们独立发生,P(A) = 0.4, P(B) = 0.5
P_A = 0.4
P_B = 0.5

# 计算A和B同时发生的概率 P(A ∩ B) = P(A) * P(B)
P_A_and_B = P_A * P_B
println("P(A and B) = ", P_A_and_B)

# 计算A或B发生的概率 P(A ∪ B) = P(A) + P(B) - P(A ∩ B)
P_A_or_B = P_A + P_B - P_A_and_B
println("P(A or B) = ", P_A_or_B)
2. 使用统计分布

Julia的Statistics包(或更专门的Distributions包)提供了多种统计分布的实现,你可以使用这些分布来计算概率。

首先,你需要安装Distributions包(如果你还没有安装的话):

julia> using Pkg
julia> Pkg.add("Distributions")

然后,你可以使用这些分布来计算概率:

using Distributions

# 定义一个正态分布
normal_dist = Normal(0, 1)  # 均值为0,标准差为1

# 计算x=1时的概率密度
pdf_value = pdf(normal_dist, 1)
println("PDF at x=1: ", pdf_value)

# 计算x在-1到1之间的累积分布函数(CDF)值
cdf_value = cdf(normal_dist, 1) - cdf(normal_dist, -1)
println("CDF from -1 to 1: ", cdf_value)
3. 蒙特卡洛模拟

对于更复杂的概率问题,特别是那些难以直接通过解析方法求解的问题,蒙特卡洛模拟是一个很好的选择。

# 假设我们要估计π的值,使用蒙特卡洛方法
n_samples = 10000
inside_circle = 0

for i = 1:n_samples
    x = 2 * rand() - 1  # 生成-1到1之间的随机数
    y = 2 * rand() - 1
    if x^2 + y^2 <= 1
        inside_circle += 1
    end
end

# π的估计值
pi_estimate = 4 * inside_circle / n_samples
println("Estimated π: ", pi_estimate)

以上只是概率计算在Julia中的几个示例。根据你的具体需求,你可能需要调整这些示例或探索更多的工具和库。

全排列

在Julia中,可以使用permutations函数来求解一个集合的所有排列。这个函数定义在Combinatorics.jl包中,因此你需要首先添加这个包。

首先,在REPL中运行下面的命令来添加Combinatorics.jl包:

using Pkg
Pkg.add("Combinatorics")

之后,你可以使用permutations函数来获取一个集合的所有排列:

using Combinatorics

# 假设我们要获取1到3的所有排列
perms = permutations([1, 2, 3])
 
## 打印排列结果
for p in perms
    println(p)
end

这段代码将会打印出1到3的所有排列。如果你需要排列的集合较大,请注意这可能会创建一个非常大的数组,因此请确保你的机器有足够的内存来处理这个结果。

Julia计算阶乘

在Julia中,你可以使用内置的factorial函数来计算阶乘。以下是一个计算阶乘的例子:

# 计算阶乘的函数
function factorial_digit(n)
    if n < 0
        error("输入必须为非负数")
    elseif n == 0
        return 1
    else
        return factorial(n)
    end
end
 
# 示例
n = 5
result = factorial_digit(n)
println("阶乘结果: ", result)

在这个例子中,我们定义了一个名为factorial_digit的函数,它接受一个整数n作为参数,并返回n的阶乘。如果n是0或负数,则会抛出错误。如果n是正数,则使用内置的factorial函数来计算它的阶乘。然后,我们计算5的阶乘并打印结果。

参考文献

  1. 文心一言
    2.《数学》中国财政经济出版社 2010版

标签:10,概率,Julia,数模,计算,阶乘,原理,精解,排列
From: https://blog.csdn.net/sakura_sea/article/details/140766711

相关文章

  • Java跨平台原理
    目录1.Java虚拟机(JVM)核心作用:工作原理:2.字节码(Bytecode)定义:特点:3.编译与执行过程编译过程:执行过程:4.丰富的标准库和API内容:作用:5.垃圾回收机制定义:与跨平台的关系:1.Java虚拟机(JVM)核心作用:JVM是Java跨平台能力的核心技术。它是一个虚拟的计算机,通过在实际的计算机上仿真......
  • Java跨平台原理
    Java跨平台原理Java虚拟机(JVM):核心:Java程序在编译后生成的是字节码(.class文件),而不是特定平台的机器码。这些字节码是平台无关的。执行:Java字节码需要在JVM上运行。JVM为不同的操作系统提供了不同的实现,使得Java字节码可以在任何安装了JVM的平台上运行。一次编写......
  • Java跨平台原理
    Java跨平台原理一、编译过程源代码编译:Java源代码(.java文件)首先被编译成字节码(.class文件)。这一过程是通过Java编译器(javac)完成的。平台无关性:由于字节码不依赖于任何特定的硬件或操作系统,因此它是Java实现跨平台的基础。这意味着,无论在何种操作系统上编译Java源代码,生成的......
  • LLM大模型:deepspeed实战和原理解析
     多年前搞大数据,因为单节点无力存储和计算PB级别的数据,所以hadoop这种分布式存储和计算框架是标配!如今搞大模型,仍然需要对大量样本数据做计算,因为涉及矩阵运算,单机单卡运算效率太低,也涉及到分布式计算了,大模型时代的分布式pre-train和Inference框架就有现成的—deepspeed!......
  • 静态路由的原理与配置(eNSP实验)
    文章目录一、路由器的工作原理路由概述路由器二、路由表的形成路由表路由表的形成三、静态路由和默认路由静态路由动态路由默认路由四、路由器转发数据包的封装过程五、静态路由和默认路由的配置静态路由的配置默认路由的配置六、配置实例配置实例一配置实例二七、......
  • mysql系列:sql执行原理
    sql执行流程当谈到数据库管理系统(DBMS)的核心功能时,SQL执行引擎无疑是其中最关键的部分之一。SQL执行引擎负责将我们编写的结构化查询语言(SQL)转化为实际可以操作数据库的物理操作序列。它不仅仅是一个简单的语法解析器,更是一种复杂的软件模块,涉及到查询优化、执行计划生成、......
  • 决策树分类算法(if-else原理)
    决策树算法在“决策”领域有着广泛的应用,比如个人决策、公司管理决策等。其实更准确的来讲,决策树算法算是一类算法,这类算法逻辑模型以“树形结构”呈现,因此它比较容易理解,并不是很复杂,我们可以清楚的掌握分类过程中的每一个细节。if-else原理想要认识“决策树算法”我们不妨......
  • Vite本地构建:手写核心原理
    前言接上篇文章,我们了解到vite的本地构建原理主要是:启动一个connect服务器拦截由浏览器请求ESM的请求。通过请求的路径找到目录下对应的文件做一下编译最终以ESM的格式返回给浏览器。基于这个核心思想,我们可以尝试来动手实现一下。搭建静态服务器基于koa搭建一个项目:项......
  • 深入剖析循环依赖产生与解决的原理前戏
    深入剖析循环依赖产生与解决的原理前戏方式一:通过构造函数方式进行注入创建两个类:packagecom.coding.spring.practies;publicclassTestCircularBeanA{ privateTestCircularBeanBtestCircularBeanB; publicTestCircularBeanA(TestCircularBeanBtestCircularBeanB)......
  • 【C++进阶学习】第九弹——哈希的原理与实现——开放寻址法的讲解
    前言:在前面,我们已经学习了很多存储机构,包括线性存储、树性存储等,并学习了多种拓展结构,效率也越来越高,但是是否有一种存储结构可以在大部分问题中都一次找到目标值呢?哈希可能能实现目录一、哈希的概念二、哈希冲突三、哈希冲突解决3.1开放寻址法节点结构插入操作查......