(
const double&x, std::valarray<double> *y,
54std::valarray<double> *dy) {
55 const doubleomega = 1.F;
57dy[0][1] = -omega * omega * y[0][0];
67y[0][0] = std::cos(x);
68y[0][1] = -std::sin(x);
83std::valarray<double> *y,
84std::valarray<double> *dy) {
86y[0][0] += dx * dy[0][0];
104std::valarray<double> *y,
105 boolsave_to_file =
false) {
106std::valarray<double> dy = y[0];
110fp.open(
"semi_implicit_euler.csv", std::ofstream::out);
112std::perror(
"Error! ");
116std::size_t L = y->size();
119std::clock_t t1 = std::clock();
122 if(save_to_file && fp.is_open()) {
125 for(
inti = 0; i < L - 1; i++) {
126fp << y[0][i] <<
",";
128fp << y[0][L - 1] <<
"\n";
133}
while(x <= x_max);
135std::clock_t t2 = std::clock();
140 return static_cast<double>(t2 - t1) / CLOCKS_PER_SEC;
154 const double&step_size,
155 conststd::valarray<double> &Y0) {
157std::valarray<double> y = Y0;
159std::ofstream fp(
"exact.csv", std::ostream::out);
161std::perror(
"Error! ");
164std::cout <<
"Finding exact solution\n";
166std::clock_t t1 = std::clock();
169 for(
inti = 0; i < y.size() - 1; i++) {
172fp << y[y.size() - 1] <<
"\n";
177}
while(x <= X_MAX);
179std::clock_t t2 = std::clock();
180 doubletotal_time =
static_cast<double>(t2 - t1) / CLOCKS_PER_SEC;
181std::cout <<
"\tTime = "<< total_time <<
" ms\n";
189int main(
intargc,
char*argv[]) {
192std::valarray<double> Y0 = {1.f, 0.f};
196std::cout <<
"\nEnter the step size: ";
197std::cin >> step_size;
200step_size = std::atof(argv[1]);
205std::cout <<
"\tTime = "<< total_time <<
" ms\n";
int main()
Main function.
double semi_implicit_euler(double dx, double x0, double x_max, std::valarray< double > *y, bool save_to_file=false)
Compute approximation using the semi-implicit-Euler method in the given limits.
void semi_implicit_euler_step(const double dx, const double &x, std::valarray< double > *y, std::valarray< double > *dy)
Compute next step approximation using the semi-implicit-Euler method.
void save_exact_solution(const double &X0, const double &X_MAX, const double &step_size, const std::valarray< double > &Y0)
void problem(const double &x, std::valarray< double > *y, std::valarray< double > *dy)
Problem statement for a system with first-order differential equations. Updates the system differenti...
void exact_solution(const double &x, std::valarray< double > *y)
Exact solution of the problem. Used for solution comparison.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4