编程语言
首页 > 编程语言> > Monte Carlo分析Python油气量

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