Time2Newtime.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. % 函数功能:
  3. % 将原问题的网格时间,在求解结果下进行修正
  4. % 输入:
  5. % Ts1_Te1 :原起终点时间矩阵
  6. % MeshGrid:原网格信息
  7. % max_time: 原最大时间
  8. % min_time:原最小时间
  9. % t0_ans:新最小时间
  10. % tf_ans:新最大时间
  11. % interval_num:间隔数目
  12. % 输出:
  13. % Time_interval_ans:新时间下的原网格信息
  14. % 编写:
  15. % 李兆亭,2020/06/11
  16. % 注意:
  17. % 这里的最后一个元胞多一行(终点时间处)
  18. % C++ 李兆亭,2020/10/18
  19. */
  20. #include <iostream>
  21. #include <armadillo>
  22. #include <time.h>
  23. #include <stdio.h>
  24. #include <stdlib.h>
  25. #include "GPM.h"
  26. 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) {
  27. vec T_ans = zeros(Col_total, 1 );
  28. mat Ts_Te = Re_Normal(Ts1_Te1, max_time, min_time); // 原起终点时间矩阵反归一化
  29. for (int i = 1; i <= interval_num; i++) {
  30. int rank = MeshGrid(i - 1, 0);
  31. // 继续反归一化得到原网格点时间
  32. if (i == 1) {
  33. vec vec_temp = MeshGrid.row(i - 1).cols(1, (rank + 1)).t();
  34. T_ans.rows(0, last_col(i - 1) - 1) = Re_Normal(vec_temp, Ts_Te(i - 1, 1), Ts_Te(i - 1, 0));
  35. }
  36. else {
  37. vec vec_temp = MeshGrid.row(i - 1).cols(1, (rank + 1)).t();
  38. 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));
  39. }
  40. }
  41. Time_ID(&T_ans, min_time, max_time, t0_ans, tf_ans); // 原网格点时间,收缩与扩张,得到现网格点时间
  42. *Time_interval_ans = T_ans;
  43. return 1;
  44. }