12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /*
- % 函数功能:
- % 将原问题的网格时间,在求解结果下进行修正
- % 输入:
- % Ts1_Te1 :原起终点时间矩阵
- % MeshGrid:原网格信息
- % max_time: 原最大时间
- % min_time:原最小时间
- % t0_ans:新最小时间
- % tf_ans:新最大时间
- % interval_num:间隔数目
- % 输出:
- % Time_interval_ans:新时间下的原网格信息
- % 编写:
- % 李兆亭,2020/06/11
- % 注意:
- % 这里的最后一个元胞多一行(终点时间处)
- % C++ 李兆亭,2020/10/18
- */
- #include <iostream>
- #include <armadillo>
- #include <time.h>
- #include <stdio.h>
- #include <stdlib.h>
- #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;
- }
|