【MATLAB第106期】#源码分享 | 基于MATLAB的有限差分算法的全局敏感性分析模型

【MATLAB第106期】#源码分享 | 基于MATLAB的有限差分法的全局敏感性分析模型

一、原理

有限差分法是一种数值方法,用于估计函数对输入参数的敏感性。在全局敏感性分析中,这种方法特别有用,因为它可以评估模型输出对所有输入参数变化的整体响应。以下是根据提供的MATLAB代码分析有限差分法实现全局敏感性分析的原理:

1、初始化和参数设置:清除所有变量(clear all),确保没有旧数据干扰。
初始化随机数生成器(rng(‘shuffle’)),确保随机抽样的可重复性。

2、定义样本数量和步长:
N:定义每个参数的样本数量,即要评估的模型运行次数。
h:定义有限差分的步长,即在每个参数上进行微小变化的量。

3、预分配内存:
y:存储模型输出(如增长率)的数组。
y_plus:存储扰动后模型输出的数组。
grad_y:存储模型输出梯度的数组。
Xs:存储归一化参数的数组。

4、设置参数的初始值和变化范围:
setvals:定义参数的初始值。
var:定义参数变化的百分比。
xl和xu:分别计算参数的下限和上限,用于随机抽样。

5、计算基准参数的模型输出:
使用for循环,对每个样本进行迭代。
在每次迭代中,随机抽样参数(Xs(jj,:)),并将其转换为实际参数值(params)。
计算模型输出(y(jj)),通常通过调用一个函数(如func_test1)实现。

6、移除不合理输出(进行约束):
如果模型输出超出预期范围(如大于15),则重新抽样参数并重新计算,直到获得合理的输出。

7、计算扰动参数的模型输出:
对每个参数进行扰动,即在每个参数上增加或减少步长h。
计算扰动后的模型输出(y_plus),并同样移除不物理的输出。

8、计算梯度:
使用有限差分法计算每个参数的梯度(grad_y),即模型输出对每个参数变化的敏感度。梯度计算公式为:
grad

9、奇异值分解(SVD):
对梯度矩阵进行奇异值分解,得到权重(U)、奇异值(S)和特征向量(V)。
第一列权重(w)和第二列权重(w2)分别表示模型输出对每个参数的相对重要性。

10、计算特征值和权重:
计算特征值(evalues),这些值表示模型输出对参数变化的敏感性。
计算权重(W和W2),这些值表示每个参数对模型输出的贡献度。

通过这种方法,可以全面了解模型输出对各个输入参数的敏感性,从而识别出对模型结果影响最大的参数。这对于优化模型参数、理解模型行为以及进行不确定性分析都非常有用。以下为目标函数:

function gamma = func_test1(x)
gamma=x(1)^2 + x(2)^2 + x(3)^2  + x(4)^2 +x(5)^2;                    
end

二 、代码展示

%使用有限差分法计算参数变化的敏感性。通过计算梯度并使用SVD分析结果,可以了解模型输出对每个参数的敏感程度。
clear all;%清除所有变量
rng('shuffle');%初始化随机数生成器:将随机数生成器设置为“shuffle”,以确保每次运行时生成的随机数序列不同。
N = 1000;   %每个参数的样本数量
h = 1e-5;  %有限差分的步长y = zeros(N,1);                        %存储输出数组
Nparams = 5;
y_plus = zeros(N,Nparams);             %存储扰动后输出的数组
grad_y = zeros(Nparams,N);             %存储输出的梯度数组 
Xs = zeros(N,Nparams);                    %存储输出的梯度数组setvals = [1; 0.5; 0.4; 0.3; 1.5]; % 设置参数的初始值
var = 0.05; % 参数变化的百分比  5
xl = (1-var)*setvals;%参数的下限
xu = (1+var)*setvals;%参数的上限tic
%使用for循环计算基准参数和扰动参数的y。
for jj = 1:Njjrng(sum(100*clock)+pi*jj); % 在可接受的范围内随机抽样参数Xs(jj,:) = 2*rand(1,Nparams) - 1;params = 1/2*(diag(xu - xl)*Xs(jj,:)' + (xu + xl));% 计算函数的根,func_test函数用于计算给定参数的函数y。y(jj) = func_test1(params);% 设置阈值移除必要的根,%如果计算得到的y大于15,则重新随机采样参数直到获得合理的y。while y(jj) > 15                                                        Xs(jj,:) = 2*rand(1,Nparams) - 1;params = 1/2*(diag(xu - xl)*Xs(jj,:)' + (xu + xl));y(jj) = func_test1(params);end 
end%扰动参数
%略for jj = 1:N%使用有限差分计算appx梯度,%使用有限差分法计算增长率对每个参数的梯度。grad_y(:,jj) = (y_plus(jj, :) - y(jj))/h;
end
toc% 计算权重和特征值
%计算矩阵C的奇异值分解
[U,S,V] = svd(1/sqrt(N)*grad_y);
w = abs(U(:,1));
W=w/sum(w);
w2 = abs(U(:,2));W2=w2/sum(w2);   
%计算C的特征值
evalues = diag(S.^2);
%使用奇异值分解(SVD)计算grad_y矩阵的权重和特征值。
%找出最大和最小grad_y的差值以检查错误
diff_y = max(max(grad_y)) - min(min(grad_y));
%计算grad_y矩阵中最大值和最小值的差异,以检查可能的错误。
figure()
bar([W   W2]);xlabel('输入变量')ylabel('权重')legend('初始结果','扰动结果')title('有限差分敏感性分析')

三、结果展示

在这里插入图片描述

根据目标函数可得,结果较为合理 。
赠送复杂的测试函数,以供学习。

四、代码获取

1.阅读首页置顶文章
2.关注CSDN
3.根据自动回复消息,回复“106期”以及相应指令,即可获取对应下载方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/47412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode+SSH连接Ubuntu

目录 问题引入 基本思路 Permission denied, please try again 修改用户名与密码 新建用户 最终成功方案 问题引入 ssh 用户名ip地址。用户名是远端服务器的用户名,ip地址也是远端服务器的地址。linux虚拟机的ip地址与windous主体不一样,所以还需要…

2024年对网络安全专业的观点解析

就业前景广阔 网络空间安全专业的就业前景非常广阔。随着信息时代的到来,各类企业和组织对网络安全的需求越来越大,使得该专业的毕业生在市场上拥有很大的需求量。 据统计,近几年网络空间安全行业的就业市场持续增长,职位空缺率…

【BUG】已解决:AttributeError: ‘NoneType‘ object has no attribute ‘split‘

已解决:AttributeError: ‘NoneType‘ object has no attribute ‘split‘ 英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,…

yarn的安装和配置以及更新总结,npm的对照使用差异

1. Yarn简介 Yarn 是一个由 Facebook 开发的现代 JavaScript 包管理器,旨在提供更快、更安全、更可靠的包管理体验。 1.1 什么是Yarn Yarn 是一个快速、可靠和安全的 JavaScript 包管理器,它通过并行化操作和智能缓存机制,显著提升了依赖安…

【React】事件绑定、React组件、useState、基础样式

React 教程 目录 事件绑定 1.1. 基础实现 1.2. 使用事件参数 1.3. 传递自定义参数 1.4. 同时传递事件对象和自定义参数 React 组件 2.1. 组件是什么 2.2. 组件基础使用 useState:状态管理 3.1. 基础使用 3.2. 状态的修改规则 3.3. 修改对象状态 基础样式 4.1. 行…

基于Web的特产美食销售系统的设计与实现

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

HardeningMeter:一款针对二进制文件和系统安全强度的开源工具

关于HardeningMeter HardeningMeter是一款针对二进制文件和系统安全强度的开源工具,该工具基于纯Python开发,经过了开发人员的精心设计,可以帮助广大研究人员全面评估二进制文件和系统的安全强化程度。 功能特性 其强大的功能包括全面检查各…

抖音seo短视频账号矩阵系统源码-SaaS开源部署流程开发者技术分享

抖音seo账号矩阵系统,短视频矩阵系统源码, 短视频矩阵是一种常见的视频编码标准,通过多账号一键授权管理的方式,为运营人员打造功能强大及全面的“矩阵式“管理平台。使用矩阵系统也能保证账号的稳定性,降低账号的风险…

客户端与服务器通讯详解(3):如何选择合适的通讯方式

上篇文章中,我们讲解了客户端与服务器通讯详解(2):12种常见通讯方式,重点讲解了http、websocket和RESTful API三种,本文我们继续讲解如何依据场景选择最合适的通讯方式。欢迎友友们点赞评论。 一、客户端服…

基于 asp.net家庭财务管理系统设计与实现

博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用感兴趣的可以先…

Linux 下 ElasticSearch 集群部署

目录 1. ElasticSearch下载 2. 环境准备 3. ElasticSearch部署 3.1 修改系统配置 3.2 开放端口 3.3 安装 ElasticSearch 4. 验证 本文将以三台服务器为例,介绍在 linux 系统下ElasticSearch的部署方式。 1. ElasticSearch下载 下载地址:Past Rel…

vue3+ts+vite项目中使用vite-plugin-pwa搭建 PWA 项目

参考官方github地址: https://github.com/vite-pwa/vite-plugin-pwa 官方文档地址: https://vite-pwa-org.netlify.app/guide MDN地址: https://developer.mozilla.org/zh-CN/docs/Web/Progressive_web_apps 前提概要 最近项目更新需求中&am…

资源管理大师:如何在Gradle中配置资源目录

资源管理大师:如何在Gradle中配置资源目录 在软件开发中,资源管理是项目构建过程中的一个重要环节。资源通常包括配置文件、图片、样式表、本地化文件等,它们对于应用程序的运行至关重要。Gradle作为一个灵活且功能强大的构建工具&#xff0…

【C++】类和对象·this指针

C中的类与C语言中的结构体有很多的相似的地方,可以说本质上除了结构体只能定义成员变量,以及结构体默认的访问控制权限是public之外与class没啥区别。但是结构体变量每次调用函数的时候需要指针,而类中的成员函数明明被保存在公共代码段&…

php 方法追踪其被调用的踪迹

一、遇到的问题 一个公共方法,有多个调用入口,快速排查到其被调用的入口 二、解决 使用debug_backtrace(),其记录了调用方法的所有上层方法,如下为打印的debug_backtrace()的数据,从键值0开始,依次往上一…

Hive第三天

1. 后台启动HIVE的JDBC连接 0 表示标准输入 1 表示标准输出 2 表示标准错误输出 nohup 表示挂起 最后的 & 表示 后台启动 nohup hive -service hiveserver2 > /usr/local/soft/hive-3.1.2/log/hiveserver2.log 2>&1 & jps 查看 Runj…

30秒学会UML-功能类图

目录 1、类图本体 三部分 修饰符 2、类与类直接关系 泛化关系 实现关系 简单关联关系 依赖关系 组合关系 聚合关系 1、类图本体 三部分 第一层:类名第二层:成员变量(类的属性)第三层:函数方法(类…

水利行业的智慧革命:深度剖析智慧水利解决方案,看其如何以科技力量提升水资源管理效率,保障水生态安全

目录 一、智慧水利的概念与内涵 二、智慧水利解决方案的核心要素 1. 感知层:全面监测,精准感知 2. 网络层:互联互通,信息共享 3. 平台层:数据分析,智能决策 4. 应用层:精准施策&#xff0…

【线程系列之五】线程池介绍C语言

一、基本概念 1.1 概念 线程池(Thread Pool)是一种基于池化技术管理线程的机制,旨在减少线程创建和销毁的开销,提高系统资源的利用率,以及更好地控制系统中同时运行的线程数量。线程池通过预先创建一定数量的线程&am…

3 C 语言运算符深度解析:从基础到实战

目录 1 运算符分类 2 算术运算符与算术表达式 2.1 算术运算符的用法 2.2 左操作数和右操作数 3 关系运算符与关系表达式 3.1 关系运算符的用法 3.2 常量左置防错 3.3 三数相等判断误区 4 逻辑运算符与逻辑表达式 4.1 逻辑运算符的用法 4.2 闰年的判断 4.3 短路运算…