/* % 函数功能: % 将原问题的网格时间,在求解结果下进行修正 % 输入: % Ts1_Te1 :原起终点时间矩阵 % MeshGrid:原网格信息 % max_time: 原最大时间 % min_time:原最小时间 % t0_ans:新最小时间 % tf_ans:新最大时间 % interval_num:间隔数目 % 输出: % Time_interval_ans:新时间下的原网格信息 % 编写: % 李兆亭,2020/06/11 % 注意: % 这里的最后一个元胞多一行(终点时间处) % C++ 李兆亭,2020/10/18 */ #include #include #include #include #include #include "GPM.h" int Time2Newtime(mat Ts1_Te1, mat MeshGrid, double max_time, double min_time, double t0_ans, double tf_ans, int interval_num, int Col_total, uvec last_col, vec* Time_interval_ans) { vec T_ans = zeros(Col_total, 1 ); mat Ts_Te = Re_Normal(Ts1_Te1, max_time, min_time); // 原起终点时间矩阵反归一化 for (int i = 1; i <= interval_num; i++) { int rank = MeshGrid(i - 1, 0); // 继续反归一化得到原网格点时间 if (i == 1) { vec vec_temp = MeshGrid.row(i - 1).cols(1, (rank + 1)).t(); T_ans.rows(0, last_col(i - 1) - 1) = Re_Normal(vec_temp, Ts_Te(i - 1, 1), Ts_Te(i - 1, 0)); } else { vec vec_temp = MeshGrid.row(i - 1).cols(1, (rank + 1)).t(); T_ans.rows((last_col(i - 2)), last_col(i - 1) - 1) = Re_Normal(vec_temp, Ts_Te(i - 1, 1), Ts_Te(i - 1, 0)); } } Time_ID(&T_ans, min_time, max_time, t0_ans, tf_ans); // 原网格点时间,收缩与扩张,得到现网格点时间 *Time_interval_ans = T_ans; return 1; }