%目标函数快速计算,用于查看 clear; clc; % 读取实测径流数据 Qo = load('observed.txt'); % 检查数据格式,假设数据是每行一个数值,如果数据是列向量则无需转置 if size(Qo, 1) == 1 % 如果Qo是行向量 Qo = Qo(:); % 转换为列向量 elseif size(Qo, 2) == 1 % 如果Qo已经是列向量 % Qo已经是列向量,无需转置 else error('实测径流数据文件格式不正确,应为每行一个数值。'); end % 读取模拟径流数据 Qs = load('simulated.txt'); % 检查数据格式,假设数据是每行一个数值,如果数据是列向量则无需转置 if size(Qs, 1) == 1 % 如果Qs是行向量 Qs = Qs(:); % 转换为列向量 elseif size(Qs, 2) == 1 % 如果Qs已经是列向量 % Qs已经是列向量,无需转置 else error('模拟径流数据文件格式不正确,应为每行一个数值。'); end % 调用函数计算NSE, KGE, R2 NSE = GetNSE(Qs, Qo); KGE = GetKGE(Qs, Qo); PBIAS=GetPBIAS(Qs, Qo); RMSE=GetRMSE(Qs, Qo); % 注意:这里需要修正R2计算函数中的变量名,使用a和b而不是Qs和Qo R2 = GetR2(Qs, Qo); % 应改为 R2 = calculateR2(Qs, Qo); % 显示结果 disp(['纳什效率系数(NSE): ', num2str(NSE)]); disp(['Kling-Gupta效率系数(KGE): ', num2str(KGE)]); disp(['决定系数(R²): ', num2str(R2)]); disp(['PBIAS: ', num2str(PBIAS)]); disp(['RMSE: ', num2str(RMSE)]); % 将结果写入新的文本文件 %fileID = fopen('results.txt', 'w'); %if fileID == -1 % error('无法打开文件以写入结果。'); %end %fprintf(fileID, '纳什效率系数(NSE): %f\n', NSE); %fprintf(fileID, 'Kling-Gupta效率系数(KGE): %f\n', KGE); %fprintf(fileID, '决定系数(R²): %f\n', R2); %fprintf(fileID, 'PBIAS: %f\n', PBIAS); %fclose(fileID); %% % 径流目标函数计算 clear; clc; % 读取实测径流数据 Qo = load('observed.txt'); % 检查数据格式,假设数据是每行一个数值,如果数据是列向量则无需转置 if size(Qo, 1) == 1 % 如果Qo是行向量 Qo = Qo(:); % 转换为列向量 elseif size(Qo, 2) == 1 % 如果Qo已经是列向量 % Qo已经是列向量,无需转置 else error('实测径流数据文件格式不正确,应为每行一个数值。'); end % 读取模拟径流数据 Qs = load('simulated.txt'); % 检查数据格式,假设数据是每行一个数值,如果数据是列向量则无需转置 if size(Qs, 1) == 1 % 如果Qs是行向量 Qs = Qs(:); % 转换为列向量 elseif size(Qs, 2) == 1 % 如果Qs已经是列向量 % Qs已经是列向量,无需转置 else error('模拟径流数据文件格式不正确,应为每行一个数值。'); end % 调用函数计算mNSE,PFAB %mNSE = GetmNSE(Qs, Qo); %PFAB = GetPFAB(Qs, Qo); PBIAS=GetPBIAS(Qs, Qo); %NRMSE=GetNRMSE(Qs, Qo); RMSE=GetRMSE(Qs, Qo); % 显示结果 %disp(['修改后的纳什效率系数(mNSE): ', num2str(mNSE)]); %disp(['PFAB: ', num2str(PFAB)]); disp(['PBIAS: ', num2str(PBIAS)]); %disp(['NRMSE: ', num2str(NRMSE)]); disp(['RMSE: ', num2str(RMSE)]); % 将结果写入新的文本文件 fileID = fopen('results.txt', 'w'); if fileID == -1 error('无法打开文件以写入结果。'); end %fprintf(fileID, '修改后的纳什效率系数(mNSE): %f\n', mNSE); %fprintf(fileID, 'PFAB: %f\n', PFAB); %fprintf(fileID, 'RMSE: %f\n', RMSE); fprintf(fileID, 'PBIAS: %f\n', PBIAS); fclose(fileID); % GetNSE函数定义(保持不变) function NSE = GetNSE(Qs, Qo) if length(Qs) == length(Qo) QoAve = mean(Qo); NSE = 1 - sum((Qs - Qo).^2) / sum((Qo - QoAve).^2); else error("实测径流和模拟径流长度不等"); end end % calculateKGE函数定义(保持不变) function KGE = GetKGE(Qs, Qo) QsAve = mean(Qs); QoAve = mean(Qo); COV = cov(Qs, Qo); CC = COV(1,2) / (std(Qs) * std(Qo)); BR = QsAve / QoAve; RV = (std(Qs) / QsAve) / (std(Qo) / QoAve); KGE = 1 - sqrt((CC-1)^2 + (BR-1)^2 + (RV-1)^2); end % calculateR2函数定义(修正变量名) function R2 = GetR2(Qs, Qo) % 修正为正确的输入变量名 if length(Qs) == length(Qo) QsAve = mean(Qs); QoAve = mean(Qo); tempX = sum( (Qo-QoAve).*(Qs-QsAve)); tempY = sqrt(sum( (Qo-QoAve).^2 ) * sum( (Qs-QsAve).^2)); R2 = (tempX / tempY).^2; else error("输入数据长度不等"); end end %function mNSE = GetmNSE(Qs, Qo) % if length(Qs) == length(Qo) % QoAve = mean(Qo); % mNSE = 1 - sum(abs(Qs - Qo)) / sum(abs(Qo - QoAve)); % else % error("实测径流和模拟径流长度不等"); % end %end %function PFAB = GetPFAB(Qs, Qo) % if length(Qs) == length(Qo) % PFAB = abs(sum(Qo - Qs) / sum(Qo)) * 100; % else % error("实测径流和模拟径流长度不等"); % end %end function PBIAS = GetPBIAS(Qs, Qo) PBIAS = sum(Qo - Qs) / sum(Qo) * 100; end %function NRMSE = GetNRMSE(Qs, Qo) % 计算均方误差 % mse = mean((Qo - Qs).^2); % 计算真实值的最大值和最小值 % y_range = max(Qo) - min(Qo); % 计算NRMSE % NRMSE = sqrt(mse)*100 / y_range; %end function RMSE = GetRMSE(Qs, Qo) % 计算预测值和真实值之间的误差平方和 squared_errors = (Qo - Qs).^2; % 计算平均误差平方 mean_squared_error = mean(squared_errors); % 计算均方根误差 RMSE = sqrt(mean_squared_error); end使用MATLAB-快速计算常用水文评价指标
张小明
前端开发工程师
必看!2025年德诺超声波(DELOK)医疗超声波焊接技术最佳案例推荐
在本篇文章中,我们将深入探讨德诺超声波(DELOK)在医疗行业中的多项成功案例,展示其在医疗产品焊接中的先进技术。通过医疗超声波焊接案例,可以看出这一技术在提升产品质量方面的重要性。例如,在焊接一次性医…
如何利用LobeChat进行Prompt工程调试?实用技巧集锦
如何利用LobeChat进行Prompt工程调试?实用技巧集锦 在AI应用开发日益深入的今天,一个常被忽视却至关重要的问题浮出水面:我们如何确保大语言模型真正理解我们的意图? 表面上看,调用API、输入一段文本、等待回复&#x…
数据库的ACID属性分别代表什么?为什么重要?
本报告旨在对数据库管理系统(DBMS)中至关重要的ACID属性进行一次系统性、深层次的剖析。ACID是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Dur…
LobeChat能否集成RAG系统?增强检索生成实战验证
LobeChat能否集成RAG系统?增强检索生成实战验证 在企业知识管理日益复杂的今天,员工每天面对海量的文档、政策和流程手册,却常常“有问无答”或得到模棱两可的回复。传统AI助手依赖模型内部知识,面对公司特有的请假制度、报销规则…
多应用统一身份认证方案-接口设计篇
文章目录 I 多应用统一身份认证 整体架构 认证服务 服务部署篇 实现篇 需求 登录认证接口的改造方案 II 登录认证接口设计 登录校验 接口改造(调用顺序) III 登录接口 用户表-登录设备限制 最近登录设备列表(记录数等于设备限制数) I 多应用统一身份认证 整体架构 https:…
LobeChat日志记录与监控功能实现方案探讨
LobeChat日志记录与监控功能实现方案探讨 在今天的企业级 AI 应用部署中,一个看似“安静运行”的聊天界面背后,往往隐藏着复杂的交互链条:用户的一条消息可能触发模型调用、插件执行、外部 API 请求,甚至跨服务的数据流转。当系统…