Решение систем нелинейных уравнений https://www.mapleprimes.com/users/one%20man/posts?page=1
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

draghilevinout.cpp 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "draghilevinout.h"
  2. #include "octaveplg.h"
  3. #ifdef MATHGL
  4. #include "libmathgl.h"
  5. #endif
  6. draghilevinout::draghilevinout(int argc, char *argv[]) :
  7. cmd("Метод Драгилева", ' '),
  8. #ifdef MATHGL
  9. mathgl("m", "mathgl", "Вывод графики через Mathgl", cmd, false),
  10. #endif
  11. nodel("n", "nodel", "Не удалять сду", cmd, false),
  12. nocomp("c", "nocomp", "Не компилировать сду, если она существует", cmd, false),
  13. nocpp("p", "nocpp", "Не удалять сду-файл, если он существует", cmd, false),
  14. benchmark("b", "benchmark", "Формирование m-файла для тестирования производительности", cmd, false),
  15. inp_file("inp_file", "Чтение из входного файла", false, "example.txt", "входной файл", cmd),
  16. out_file("o", "outfile","Запись в выходной файл", false, "", "выходной файл", cmd),
  17. oct_file("O", "oct_file", "Создание скриптового m-файла для octave", false, "", "octave m-файл", cmd),
  18. exit("e", "exit", "Завершение работы при возвращении в начальное положение", false, -1, "точность", cmd)
  19. {
  20. cmd.parse(argc, argv);
  21. std::ifstream myfilein ( inp_file.getValue() );
  22. mystreamin << myfilein.rdbuf();
  23. myfilein.close();
  24. }
  25. void draghilevinout::checkdel()
  26. {
  27. if ( !nodel.getValue() && !oct_file.isSet() )
  28. if ( std::remove("test.cpp") || std::remove("test.so") )
  29. std::cout<<"Ошибка при удалении сду"<< std::flush;
  30. }
  31. void draghilevinout::write_out_text(sys_osn_dan &sod)
  32. {
  33. if ( out_file.isSet() )
  34. {
  35. std::ofstream outst ( out_file.getValue() );
  36. //std::vector<double>::const_iterator it=sofe.get_coord().begin();
  37. auto it = sod.get_resOUT().begin();
  38. int N_var=sod.get_par_diff().nv;
  39. while( it != sod.get_resOUT().end() )
  40. {
  41. std::copy(it, it+N_var, std::ostream_iterator<double>(outst, " "));
  42. outst<<std::endl;
  43. it += N_var;
  44. }
  45. outst.close();
  46. }
  47. }
  48. void draghilevinout::write_octave_m(sys_osn_dan &sod, sys_diff_equation &sde)
  49. {
  50. if ( oct_file.isSet() )
  51. {
  52. octaveplg Octm(sod, sde, oct_file.getValue(), benchmark.getValue());
  53. Octm.octave_m();
  54. }
  55. }
  56. #ifdef MATHGL
  57. void draghilevinout::write_mathgl_disp(sys_diff_equation &sde, solver_diff_eqn &sofe)
  58. {
  59. if ( mathgl.getValue() )
  60. {
  61. Mathgl_graph Mg(sde);
  62. Mg.animate(sofe.get_coord(), sde.vp_num, sde.dim_line, sde.equations);
  63. }
  64. }
  65. #endif
  66. #ifndef MATHGL
  67. void draghilevinout::write_mathgl_disp(sys_diff_equation &sde, solver_diff_eqn &sofe){}
  68. #endif