Monte Carlo分析Python油气量
作者:互联网
我正在尝试自学python,我想从学习如何进行蒙特卡罗分析开始(我是一名使用MCA的贸易科学家).我正在尝试编写一个程序,它将执行7个变量的蒙特卡洛模拟,以计算给定公式的可能结果的范围.
我非常擅长python.我有VBA的经验,但我还在学习python.
我在网上找到的所有例子都与金融有关,不幸的是我很难将这些代码包含在内,因为它们与我想做的事情不太相关.
我觉得这应该是一个非常简单的事情,因为方程很简单.但是,我似乎无法取得任何进展.有人可以看看我现在的代码并指出我正确的方向吗?如果您有非金融分析的montecarlo分析示例,初学者很容易理解,请指出我的方式.我想学习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')
解决方法:
您的代码有几个问题,至少:
>您不能在函数之外放置返回
>您的对象是随机数生成器,而不是随机数;你不能成倍增加它们
据推测,你想要这样的东西:
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-3-x,pandas,scipy,montecarlo 来源: https://codeday.me/bug/20190527/1162180.html