微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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教程会更有成效.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐