数学建模灵敏性分析(一阶、二阶灵敏度)python代码+懒人专用版

这篇具有很好参考价值的文章主要介绍了数学建模灵敏性分析(一阶、二阶灵敏度)python代码+懒人专用版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

其他的不用多说,能找到这篇博客说明读者已经基本了解了一、二阶灵敏度的定义是啥,但苦于其他博客的博大精深,很难用python代码写出自己模型的灵敏度测试。
这里直接给出代码,读者只需要修改模型的函数表达式即可。

from SALib.sample import saltelli
from SALib.analyze import sobol
from pylab import *
import matplotlib.pyplot as plt
import pandas as pd

mpl.rcParams['font.sans-serif'] = ['SimHei']  # 修复中文乱码
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
np.seterr(divide='ignore', invalid='ignore')  # 消除被除数为0的警告
# 上面不用管

problem = {
    'num_vars': 4,  # 模型变量的数量
    'names': ['T', 'PT', 'Pr', 'i'],  # 模型的变量
    'bounds': [[2000, 10000],
               [0, 0.2],
               [0.1, 0.5],
               [1, 30],
               ]  # 指定变量的范围,一一对应
}


def evaluate(xx):  # 进行灵敏度分析的模型

    return np.array([x[0] * np.power(1 - (1 - np.power(1 - x[1], 1.4263 * np.power(x[1], -0.426))) * x[2],
                                     x[3] - 1) * np.power(x[1], 0.426) / 1.4263 * 5 + x[0] * np.power(
        1 - (1 - np.power(1 - x[1], 1.4263 * np.power(x[1], -0.426))) * x[2], x[3] - 1) * (
                             1 - np.power(1 - x[1], 1.4263 * np.power(x[1], -0.426))) * 16 for x in xx])


'''
    注意返回的是np.array([function for x in X]) function是函数表达式
    比如function(T,PT,Pr,i)=T+PT+Pr+i 那么function就写成x[0]+x[1]+x[2]+x[3]
    很显然,一一对应定义模型中的变量,注意列表下标从0开始
'''

# 下面不用管
samples = 128
param_values = saltelli.sample(problem, samples)
print('模型运行次数', len(param_values))
Y = evaluate(param_values)
Si = sobol.analyze(problem, Y)
print()
print('ST:', Si['ST'])  # 总灵敏度
print('S1:', Si['S1'])  # 一阶灵敏度
print("S2 Parameter:", Si['S2'][0, 1])  # 二阶灵敏度


# 一阶灵敏度与总灵敏度图片
df_sensitivity = pd.DataFrame({
    "Parameter": problem["names"],
    "一阶灵敏度": Si["S1"],
    "总灵敏度": Si["ST"]}
).set_index("Parameter")
fig, axes = plt.subplots(figsize=(10, 6))
df_sensitivity.plot(kind="bar", ax=axes, rot=45, fontsize=16)

# 二阶灵敏度图片
second_order = np.array(Si['S2'])
pd.DataFrame(second_order, index=problem["names"], columns=problem["names"])
figs, axes = plt.subplots(figsize=(8, 10))
ax_image = axes.matshow(second_order, vmin=-1.0, vmax=1.0, cmap="RdYlBu")
cbar = figs.colorbar(ax_image)
ax_image.axes.set_xticks(range(len(problem["names"])))
ax_image.axes.set_xticklabels(problem["names"], rotation=45, fontsize=24)
r = ax_image.axes.set_yticklabels([""] + problem["names"], fontsize=24)

plt.show()

读者只需要修改

problem = {
    'num_vars': 4,  # 模型变量的数量
    'names': ['T', 'PT', 'Pr', 'i'],  # 模型的变量
    'bounds': [[2000, 10000],
               [0, 0.2],
               [0.1, 0.5],
               [1, 30],
               ]  # 指定变量的范围,一一对应
}


def evaluate(xx):  # 进行灵敏度分析的模型

    return np.array([x[0] * np.power(1 - (1 - np.power(1 - x[1], 1.4263 * np.power(x[1], -0.426))) * x[2],
                                     x[3] - 1) * np.power(x[1], 0.426) / 1.4263 * 5 + x[0] * np.power(
        1 - (1 - np.power(1 - x[1], 1.4263 * np.power(x[1], -0.426))) * x[2], x[3] - 1) * (
                             1 - np.power(1 - x[1], 1.4263 * np.power(x[1], -0.426))) * 16 for x in xx])

具体的含义注释已经给出了,需要注意的是,这个代码仅适用于有明确函数表达式的(单个)、多参数的模型,类似于规划问题之类的约束模型不太适用(我太菜了不会写

不要忘记修改模型变量的数量文章来源地址https://www.toymoban.com/news/detail-516607.html

到了这里,关于数学建模灵敏性分析(一阶、二阶灵敏度)python代码+懒人专用版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数学建模】《实战数学建模:例题与讲解》第十二讲-因子分析、判别分析(含Matlab代码)

    本系列侧重于例题实战与讲解,希望能够在例题中理解相应技巧。文章开头相关基础知识只是进行简单回顾,读者可以搭配课本或其他博客了解相应章节,然后进入本文正文例题实战,效果更佳。 如果这篇文章对你有帮助,欢迎点赞与收藏~ 判别分析是一种统计方法,它根据

    2024年02月04日
    浏览(73)
  • 数学建模-典型相关分析

    上节回顾 论文:常州大学一等奖淡水养殖… 要进行 pearson 相关系数 画散点图、折线图看是否相关 检验正态分布 满足上述,利用pearson相关系数 刚开始推导不会没关系,会应用就行,推导过程略,之后学习了后续知识,回过头来看就懂了 标度:数值 有序:优良差等 名义:男

    2024年02月16日
    浏览(56)
  • 聚类分析数学建模

    什么是聚类分析 聚类是一个将数据集分为若干组(class)或类(cluster)的过程,并使得同一个组内的数据对象具有较高的相似度;而不同组中的数据对象是不相似的。 相似或不相似是基于数据描述属性的取值来确定的,通常利用各数据对象间的距离来进行表示。 聚类分析尤

    2024年02月07日
    浏览(37)
  • 【数学建模】--主成分分析

    本讲将介绍主成分分析(Principal Component Analysis,PCA),主成分分析是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息,一般来说,当研究的问题涉及到多变量且变量之间存在

    2024年02月13日
    浏览(46)
  • 数学建模:TOPSIS分析

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 假设有m个评价对象,n个评价指标,首先需要进行指标的 正向化 : 极大型 极小型 单点型 区间型 然后对正向化后的矩阵进行 标准化 ,得到 Z Z Z 矩阵:假设 X X X 为正向化后的矩阵,则 Z Z Z 是标准化后的矩阵: X = [ x 11 x 11

    2024年02月11日
    浏览(41)
  • 数学建模 因子分析

    目录 简介 数学模型 利用SPSS进行因子分析 步骤 对分析结果解读  KMO和巴特利检验 公因子方差  总方差解释 成分矩阵及旋转后的成分矩阵 旋转后的因子载荷散点图 成分得分系数矩阵 因子分析和主成分分析法是一种对数据进行降维处理的方法,但主成分分析法的弊端在于其

    2024年02月07日
    浏览(72)
  • 数学建模之因子分析

    因子分析(Factor Analysis)是一种统计方法,用于分析多个观测变量之间的关系,并试图将这些变量归因于少数几个潜在因子。它的主要目的是减少数据的维度,同时保留数据中的重要信息。因子分析常用于数据降维、特征提取、数据可视化和探索性数据分析。 以下是因子分析

    2024年02月10日
    浏览(51)
  • 【数学建模】--因子分析模型

    因子分析有斯皮尔曼在1904年首次提出,其在某种程度上可以被看成时主成分分析的推广和扩展。 因子分析法通过研究变量间的相关稀疏矩阵,把这些变量间错综复杂的关系归结成少数几个综合因子,由于归结出的因子个数少于原始变量的个数,但是它们又包含原始变量的信

    2024年02月13日
    浏览(75)
  • 【数学建模】因子分析

            因子分析由斯皮尔曼在1904年首次提出,其在某种程度上可以被看成是主成分分析的推广和扩展。         因子分析法通过研究变量间的相关系数矩阵,把这些变量间错综复杂的关系归结成少数几个综合因子,由于归结出的因子个数少于原 始变量的个数,但是

    2024年02月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包