Решение систем нелинейных уравнений 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.

sysdiffeqn.h 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #ifndef SYSDIFFEQN_H
  2. #define SYSDIFFEQN_H
  3. #include <fstream>
  4. #include <sstream>
  5. #include <ginac/ginac.h>
  6. #include <string>
  7. #include <vector>
  8. #include "sysosndan.h"
  9. struct ginacdata
  10. {
  11. std::vector<int> vpnum;//линии
  12. std::vector<int> cnum;//круги
  13. std::vector<double> ccord;//
  14. bool up;//управляемый параметр
  15. };
  16. //класс, дающий конечную систему ду в текстовой форме и в компилируемой
  17. class sys_diff_equation
  18. {
  19. public:
  20. sys_diff_equation(sys_osn_dan &); // исходные данные
  21. std::vector<GiNaC::ex> expr_in; //уравнения
  22. std::vector<GiNaC::ex> expr_svob; //уравнения, описывающие систему с степенью свободы больше одной
  23. state_type x;
  24. double dt, N;
  25. static unsigned dim_line; // размерность простратства
  26. static std::vector<int> vp_num;
  27. std::vector<std::string> equations, equations_svob;
  28. // GiNaC::ex line(std::istringstream &);
  29. void det_comp(); //вычисление детерминанта, запись в файл
  30. void info_eqn_octave(std::stringstream &, std::stringstream &);
  31. soldif get_par_diff();
  32. ginacdata get_ginacdata();
  33. static GiNaC::ex eval_line(const GiNaC::ex &, const GiNaC::ex &);
  34. static GiNaC::ex print_line(const GiNaC::ex &, const GiNaC::ex &);
  35. static GiNaC::ex eval_circle(const GiNaC::ex &, const GiNaC::ex &, const GiNaC::ex &);
  36. static GiNaC::ex eval_ellipse(const GiNaC::ex &, const GiNaC::ex &, const GiNaC::ex &, const GiNaC::ex &, const GiNaC::ex &);
  37. static GiNaC::ex eval_circle3(const GiNaC::ex &, const GiNaC::ex &, const GiNaC::ex &, const GiNaC::ex &);
  38. static GiNaC::ex eval_ellipse3(const GiNaC::exvector &);
  39. static std::vector<GiNaC::symbol> var_name; //название переменных, сейчас сделано одно имя-массив, 1-ый эл-т 0, реализовать свободное назначение a,b,c; массивы со стандартными названиями x,y,z; массивы с именами
  40. private:
  41. GiNaC::parser reader;
  42. GiNaC::symtab table; // обработчики выражений
  43. GiNaC::lst biglst; // основное хранилище дифференциальных выражений
  44. GiNaC::lst lst_svb; // свободный столбец дв
  45. GiNaC::matrix A_mat; // с типом матрица возможна операция взятие детерминанта, получается из biglst
  46. GiNaC::matrix b_mat; // получается из lst_svb
  47. GiNaC::matrix b_temp; // временной столбец, служит для возвращении A_mat исходного значения
  48. std::string dimension; //dimension 2-ух, 3-х мерное
  49. std::stringstream &vnut_pred(std::stringstream &);//x_ to x[]
  50. std::vector<std::string> uprav_par_naz;//управляющие параметры
  51. static std::vector<int> circ_num;
  52. static state_type circ_coord;
  53. int n_svob; //число свободных переменных
  54. int N_var;
  55. int N_ex; //число уравнений
  56. bool est_uprav;//Наличие управляющих параметров в уравнениях
  57. sys_osn_dan *sod;
  58. };
  59. //объявление дополнительных функций см. 6.2 Symbolic functions
  60. DECLARE_FUNCTION_2P(line)
  61. DECLARE_FUNCTION_3P(circle)
  62. DECLARE_FUNCTION_5P(ellipse)
  63. DECLARE_FUNCTION_4P(circle3)
  64. DECLARE_FUNCTION_1P(ellipse3)
  65. #endif