【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主体不一样,所以还需要…

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

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

基于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…

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

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

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 短路运算…

golang单元测试性能测试常见用法

关于go test的一些说明 golang安装后可以使用go test工具进行单元测试 代码片段对比的性能测试,使用起来还是比较方便,下面是一些应用场景 平时自己想做一些简单函数的单元测试,不用每次都新建一个main.go 然后go run main.go相对某个功能做下性能测试 看下cpu/内存…

k8s集群 安装配置 Prometheus+grafana+alertmanager

k8s集群 安装配置 Prometheusgrafanaalertmanager k8s环境如下:机器规划: node-exporter组件安装和配置安装node-exporter通过node-exporter采集数据显示192.168.40.180主机cpu的使用情况显示192.168.40.180主机负载使用情况 Prometheus server安装和配置…

自动驾驶AVM环视算法–全景和标定全功能算法实现和exe测试demo

参考:全景和标定全功能算法实现和exe测试demo-金书世界 1、测试环境 opencv310vs2022 2、使用的编程语言 c和c 3、测试的demo的获取 更新:测试的exe程序,无需解压码就可以体验算法测试效果 百度网盘: 链接:http…

代理IP服务中的代理池大小有何影响?

在当今数字化时代,网络爬虫已经成为获取各类信息必不可少的工具。在大规模数据抓取中,使用单一 IP 地址或同一 IP 代理往往会面临抓取可靠性降低、地理位置受限、请求次数受限等一系列问题。为了克服这些问题,构建代理池成为一种有效的解决方…

基于若依的ruoyi-nbcio流程管理系统修正自定义业务表单的回写bug

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

VUE3 播放RTSP实时、回放(NVR录像机)视频流(使用WebRTC)

1、下载webrtc-streamer,下载的最新window版本 Releases mpromonet/webrtc-streamer GitHub 2、解压下载包 3、webrtc-streamer.exe启动服务 (注意:这里可以通过当前文件夹下用cmd命令webrtc-streamer.exe -o这样占用cpu会很少&#xff0c…