Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <array>
  4. #include <vector>
  5. #include "cranberries/rkf45.hpp"
  6. int main()
  7. {
  8. using state_type = std::array<long double, 3>;
  9. std::vector<long double> timelog;
  10. std::vector<state_type> statelog;
  11.  
  12. state_type state0 = { { 10, 1, 1 } };
  13. bool exit_status = cranberries::make_rkf45(
  14. // Lorenz attractor
  15. [&, p = 10.L, r = 28.L, b = 8.L / 3](const long double t, const state_type& x) {
  16. state_type dxdt{};
  17. // x=x[0], y=x[1], z=x[2]
  18. dxdt[0] = -p*x[0] + p*x[1]; // dx/dt
  19. dxdt[1] = -x[0] * x[2] + r*x[0] - x[1]; // dy/dt
  20. dxdt[2] = x[0] * x[1] - b*x[2]; // dz/dt
  21. return dxdt;
  22. })
  23. .set_integrate_range({ 0,25 })
  24. .set_tolerance(8.0E-3L)
  25. .set_step_size_range({ 1.0E-6,0.05 })
  26. .integrate(state0,
  27. [&](auto t, state_type state) {
  28. std::cout
  29. << "t=" << t << " "
  30. << "x=" << state[0] << " "
  31. << "y=" << state[1] << " "
  32. << "z=" << state[2] << "\n";
  33. });
  34.  
  35. // バイナリで出力
  36. std::ofstream ofs(R"(./rkf45_test/lorenz.dat)", std::ios::binary);
  37. const size_t N = timelog.size();
  38. ofs.write(reinterpret_cast<const char*>(&N), sizeof(N));
  39. ofs.write(reinterpret_cast<char*>(&timelog[0]), sizeof(long double)*N);
  40. ofs.write(reinterpret_cast<char*>(&statelog[0]), sizeof(state_type)*N);
  41.  
  42. return exit_status ? EXIT_SUCCESS : EXIT_FAILURE;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement