- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试自学 Python,我想从学习如何进行蒙特卡洛分析开始(我是一名经常使用 MCA 的科学家)。我正在尝试编写一个程序,该程序将执行 7 个变量的蒙特卡洛模拟,以计算给定公式的可能结果范围。
我是 Python 的新手。我有 VBA 经验,但仍在学习 Python。
我在网上找到的所有示例都与金融有关,不幸的是,我很难理解这些代码,因为它们与我正在尝试做的事情不太相关。
我觉得这应该是一件很简单的事情,因为方程很简单。但是,我似乎无法取得任何进展。有人可以看看我现在拥有的代码并指出正确的方向吗?如果您有一个初学者易于理解的非金融蒙特卡洛分析示例,请指点我。我想学习 python,但我发现最好的学习方法是看别人的例子。
我想要完成的是拥有一个包含 7 个变量的列表,每个变量都具有正态分布。我希望 python 对下面代码中的公式执行 10,000 次迭代,每次计算时拉出一组不同的 7 个不同变量。我最终想打印计算的 P90、P50 和 P10 值。此时我真的不关心看任何图表(稍后会出现)。
下面是我到目前为止编写的代码。同样,我正在寻找如何实现这一目标的方向。我知道我的语法可能搞砸了,但我真的很挣扎。任何帮助将不胜感激。
from scipy.stats import *
import numpy as np
n = 10000
for i in range(n):
Area = norm(200,50)
Thickness = norm(100,25)
NTG = norm(.85,.2)
POR = norm(.32,.02)
GS = norm(.80,.2)
BG= norm(.0024,.0001)
Feather = 1
return ((((Area*Thickness*NTG*POR*GS)/BG)*43560)*Feather)/1000000000
Result = ((((Area*Thickness*NTG*POR*GS)/BG)*43560)*Feather)/1000000000
print ('Result is ', Result, 'ft')
最佳答案
你的代码至少有几个问题:
您不能将 return
放在函数之外
您的对象是随机数生成器,而不是随机数;你不能将它们相乘
大概,你想要这样的东西:
n = 10000
Area = norm(200,50).rvs(n)
Thickness = norm(100,25).rvs(n)
NTG = norm(.85,.2).rvs(n)
POR = norm(.32,.02).rvs(n)
GS = norm(.80,.2).rvs(n)
BG= norm(.0024,.0001).rvs(n)
Feather = 1
Results = Area*Thickness*NTG*POR*GS/BG*43560*Feather/1000000000
print(Results)
输出:
array([ 43.88063752, 88.94160248, 46.89368561, ..., 87.32369654,
210.16899452, 32.21191486])
Results
数组随后可用于执行统计分析,例如 P10、P50 和 P90 计算。
注意没有循环,在数值 python 中你应该尽量避免循环。这已经创建了 n
个结果。
我必须说,我认为您先阅读 Python 教程会更有效率。
关于python - 蒙特卡洛分析 Python 石油和天然气体积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50294715/
我是一名优秀的程序员,十分优秀!