公布!2025年影响因子修正版更新!(附完整版下载)

每年的影响因子基本都在6月底发布,但是由于数据不全等原因,部分期刊未能及时获得影响因子,或者影响因子有一定误差。

因此,每年科睿唯安还会在10-11月份还会进行一次修正,主要包括补录和修正两种情况。期刊的影响因子以修正后的为准。

影响因子变化情况

10月15日,科睿唯安完成 2024IF 最终修正,其中257本期刊发生变化。主要情况:

• 248本期刊影响因子更正后上涨:涨幅最大的期刊是:POSITIF,由0.1上升到5.0,增长了4.9.

9本下降。

• 9本期刊影响因子更正后下跌:其中ACTA GEOLOGICA SINICA-ENGLISH EDITION期刊影响因子跌幅最大,从3.7跌至2.2,下降了1.5.

影响因子变化完整版目录

感谢说明你的 MATLAB 版本:**R2012a**。 这个版本 **不支持某些现代语法**,例如: - `isrow()` 函数(R2013a 才引入) - `string` 类型和 `sprintf` 的高级用法 - 隐式维度扩展(如自动广播 `A + b` 当 `b` 是行/列向量) - `arrayfun(@(t) x0_true(t)(1), ...)` 这种嵌套索引在旧版中会报错 --- ## ✅ 适配 R2012a 的完整修改方案 我将为你提供一个 **完全兼容 MATLAB R2012a 的版本**,并移除所有不兼容的语法、函数和写法。 --- # ✅ 完全兼容 MATLAB R2012a 的代码(带详细注释) ```matlab %% 多智能体事件触发分布式观测器仿真(Leader State Estimation) % 系统描述: % - N 个跟随者,1 个领导者 % - 拓扑由拉普拉斯矩阵 L 和领导连接矩阵 D 描述 % - 每个跟随者维护对领导者状态 x0 的估计 x0_hat(i,:) % - 当本地估计误差超过阈值时,触发事件并更新估计 % % 兼容性:MATLAB R2012a 及以上 % 作者:AI 助手 | 日期:20254月5日 clear; clc; close all; %% ================= 参数设置 ================= N = 6; % 跟随者数量 dim = 3; % 每个智能体的状态维度(如位置+速度) T = 20; % 总仿真时间 (s) dt = 0.01; % 仿真步长 tspan = 0:dt:T; % 时间序列 steps = length(tspan); % --- 领导者动态参数 --- omega = 0.5; % 振荡频率 % 注意:R2012a 不支持直接索引匿名函数返回值(如 x0_true(t)(1)) % 解决方法:定义为单独函数或使用中间变量 % 定义领导者真实轨迹函数句柄(返回 3x1 列向量) x0_true = @(t) [sin(omega*t); cos(omega*t); t*0.1]; % --- 通信拓扑 --- % 拉普拉斯矩阵 L(假设给定,表示跟随者之间的通信) L = [ 2, -1, 0, -1, 0, 0; -1, 3, -1, 0, -1, 0; 0, -1, 2, 0, 0, -1; -1, 0, 0, 2, -1, 0; 0, -1, 0, -1, 3, -1; 0, 0, -1, 0, -1, 2]; % 领导者连接矩阵 D(对角阵,D(i,i)>0 表示第i个跟随者能收到领导者信息) D = diag([1, 1, 0, 1, 0, 0]); % 只有智能体 1,2,4 直连领导者 % --- 事件触发参数 --- alpha = 0.1; % 触发阈值系数 beta = 0.05; % 自适应衰减因子(可选) min_interval = 0.5; % 最小触发间隔(防止Zeno现象),单位:秒 last_trigger_time = zeros(N, 1); % 记录每个智能体上次触发时间 % --- 存储变量 --- x0_hat = zeros(N, dim); % 每个跟随者对领导者状态的估计(Nx3) xhat = zeros(N * dim, 1); % 每个跟随者的记忆状态(用于比较) x = zeros(N * dim, 1); % 当前实际状态(此处简化为静态或外部输入) e = zeros(N * dim, 1); % 本地误差信号 triggers = false(N, 1); % 触发标志 trigger_count = zeros(N, 1); % 统计每个智能体的触发次数 % --- 偏移量(如有模型偏差)--- est_offset = [0; 0; 0]; % 估计模型中的常数偏移(假设无) real_offset = [0; 0; 0]; % 实际系统中的偏移(假设一致) % --- 初始化 --- % 找出哪些智能体与领导者直连(D(i,i) ≠ 0) connected_agents = (diag(D) ~= 0); % logical 向量 num_connected = sum(connected_agents); % 获取初始时刻的真实领导者状态 initial_x0 = x0_true(0); % 3x1 列向量 % 初始化直连智能体的估计为当前领导者状态 if num_connected > 0 % 使用 repmat 将 initial_x0' 复制 num_connected 次 repeated_x0 = repmat(initial_x0', num_connected, 1); x0_hat(connected_agents, :) = repeated_x0; end % 将初始估计写入记忆状态 xhat for i = 1:N idx = (i-1)*dim + (1:dim); xhat(idx) = x0_hat(i,:)'; % 写入估计值作为初始记忆(转置为列向量) end % 数据记录(用于绘图) record_x0_hat = zeros(steps, N, dim); % 存储每一步的估计值 record_triggers = zeros(steps, N); % 记录是否触发 time_axis = tspan; %% ================= 主仿真循环 ================= for k = 1:steps t = tspan(k); % 获取当前真实的领导者状态 x0_current = x0_true(t); % 3x1 列向量 % 更新每个跟随者的实际状态 x(这里简化为等于真实值) for i = 1:N idx = (i-1)*dim + (1:dim); x(idx) = x0_current; % 假设所有跟随者感知到相同参考 end % --- 事件触发判断与更新 --- triggers(:) = false; for i = 1:N idx = (i-1)*dim + (1:dim); % 第i个智能体的状态索引 % 只有直连领导者的智能体才能更新其估计 if D(i,i) == 0 continue; % 不直连 → 不参与估计更新 end % 计算当前估计与实际状态之间的误差 estimated_state = xhat(idx); % 当前提醒的记忆值(列向量) true_state = x(idx); % 实际状态(即 x0_current) offset_diff = real_offset - est_offset; % 偏差修正项(应为列向量) % 【关键修复】确保 offset_diff 是列向量(R2012a 中手动处理) if size(offset_diff, 1) == 1 && size(offset_diff, 2) == dim offset_diff = offset_diff'; % 转置为列向量 end % 计算本地误差(含偏移补偿) e(idx) = estimated_state - true_state + offset_diff; % 计算欧氏范数作为触发判据 error_norm = sqrt(sum(e(idx).^2)); % norm(e(idx)) 的等价写法 % 计算自适应阈值 threshold = alpha * exp(-beta * t); % 判断是否满足触发条件 + 时间间隔限制 if error_norm > threshold && (t - last_trigger_time(i) >= min_interval) triggers(i) = true; trigger_count(i) = trigger_count(i) + 1; last_trigger_time(i) = t; % 更新最后触发时间 % === 执行事件触发:更新估计和记忆 === x0_hat(i, :) = x0_current'; % 更新对该智能体的估计 xhat(idx) = x0_current; % 同步记忆状态 end end % --- 数据记录 --- record_x0_hat(k, :, :) = x0_hat; % 保存当前估计 record_triggers(k, :) = triggers; % 保存触发状态 end %% ================= 结果可视化 ================= % --- 图1:各智能体对领导者状态第一分量的估计轨迹 --- figure; plot(time_axis, record_x0_hat(:,:,1), 'LineWidth', 1.5); hold on; % 手动计算真实轨迹的第一分量(避免 arrayfun(@(t)x0_true(t)(1),...) 错误) true_traj_1 = zeros(size(time_axis)); for k = 1:length(time_axis) true_traj_1(k) = sin(omega * time_axis(k)); end plot(time_axis, true_traj_1, 'k--', 'LineWidth', 2, 'DisplayName', 'True x_0^1'); xlabel('Time (s)'); ylabel('State Estimate x_0^1'); title('Estimation of First State Component by Followers'); legend_str = {'Agent 1', 'Agent 2', 'Agent 3', 'Agent 4', 'Agent 5', 'Agent 6', 'True'}; legend(legend_str, 'Location', 'bestoutside'); grid on; hold off; % --- 图2:估计误差范数 --- figure; error_norm_history = zeros(steps, N); for i = 1:N for k = 1:steps est = record_x0_hat(k, i, :)'; true_val = x0_true(time_axis(k)); diff = est - true_val; error_norm_history(k, i) = sqrt(diff(1)^2 + diff(2)^2 + diff(3)^2); % 手动 norm end end plot(time_axis, error_norm_history); hold on; % 绘制阈值曲线 threshold_curve = zeros(size(time_axis)); for k = 1:length(time_axis) threshold_curve(k) = alpha * exp(-beta * time_axis(k)); end plot(time_axis, threshold_curve, 'k--', 'LineWidth', 2, 'DisplayName', 'Threshold'); xlabel('Time (s)'); ylabel('||\hat{x}_0^i - x_0||'); title('Estimation Error Norm vs Threshold'); legend({'Agent 1','Agent 2','Agent 3','Agent 4','Agent 5','Agent 6','Threshold'}, ... 'Location','bestoutside'); grid on; hold off; % --- 图3:触发时刻分布(累计触发次数)--- figure; stair_step = zeros(steps, N); for i = 1:N stair_step(:,i) = cumsum(record_triggers(:,i)); % 累积触发次数 end plot(time_axis, stair_step); xlabel('Time (s)'); ylabel('Cumulative Trigger Count'); title('Event Triggering Times for Each Follower'); legend_labels = cell(1,N); for i = 1:N legend_labels{i} = ['Agent ', num2str(i)]; end legend(legend_labels, 'Location','bestoutside'); grid on; % --- 显示统计信息 --- fprintf('=== 触发统计 ===\n'); for i = 1:N if D(i,i) ~= 0 fprintf('Agent %d (connected): triggered %d times\n', i, trigger_count(i)); else fprintf('Agent %d (not connected): no update allowed\n', i); end end ``` --- ## ✅ R2012a 特别注意事项 ✅ | 问题 | R2012a 替代方案 | |------|----------------| | ❌ `norm(x)` | ✅ 改用 `sqrt(sum(x.^2))` 或 `sqrt(x'*x)` | | ❌ `arrayfun(@(t)x0_true(t)(1), ...)` | ✅ 改用 `for` 循环逐点计算 | | ❌ `isrow(v)` | ✅ 改用 `size(v,1)==1 && size(v,2)>1` | | ❌ `'DisplayName'` in plot | ✅ 可保留,R2012a 支持基本 DisplayName | | ❌ `string` / `" "` 字符串双引号 | ✅ 必须使用单引号 `' '` | --- ## ✅ 如何运行? 1. 保存为 `.m` 文件(如 `event_triggered_observer_r2012a.m`) 2. 在 MATLAB R2012a 中运行 3. 输出三张图: - 估计轨迹跟踪情况 - 误差 vs 阈值 - 累计触发次数 --- ## ✅ 推荐升级建议(可选) 虽然 R2012a 可以运行此代码,但建议未来升级至 **R2016b 或更高版本**,以享受以下特性: - 自动广播(无需 `repmat`) - `timetable`, `table` 数据结构 - 更强的面向对象编程支持 - Simulink 改进、实时仿真工具等 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值