A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://TheAlgorithms.github.io/C-Plus-Plus/d6/dd3/ode__midpoint__euler_8cpp_source.html below:

TheAlgorithms/C++: numerical_methods/ode_midpoint_euler.cpp Source File

Go to the documentation of this file. 53void problem

(

const double

&x, std::valarray<double> *y,

54

std::valarray<double> *dy) {

55 const double

omega = 1.F;

57

dy[0][1] = -omega * omega * y[0][0];

67

y[0][0] = std::cos(x);

68

y[0][1] = -std::sin(x);

86

std::valarray<double> *y, std::valarray<double> *dy) {

88 double

tmp_x = x + 0.5 * dx;

90

std::valarray<double> tmp_y = y[0] + dy[0] * (0.5 * dx);

108

std::valarray<double> *y,

bool

save_to_file =

false

) {

109

std::valarray<double> dy = y[0];

113

fp.open(

"midpoint_euler.csv"

, std::ofstream::out);

115

std::perror(

"Error! "

);

119

std::size_t L = y->size();

122

std::clock_t t1 = std::clock();

125 if

(save_to_file && fp.is_open()) {

128 for

(

int

i = 0; i < L - 1; i++) {

129

fp << y[0][i] <<

","

;

131

fp << y[0][L - 1] <<

"\n"

;

136

}

while

(x <= x_max);

138

std::clock_t t2 = std::clock();

143 return static_cast<double>

(t2 - t1) / CLOCKS_PER_SEC;

157 const double

&step_size,

158 const

std::valarray<double> &Y0) {

160

std::valarray<double> y = Y0;

162

std::ofstream fp(

"exact.csv"

, std::ostream::out);

164

std::perror(

"Error! "

);

167

std::cout <<

"Finding exact solution\n"

;

169

std::clock_t t1 = std::clock();

172 for

(

int

i = 0; i < y.size() - 1; i++) {

175

fp << y[y.size() - 1] <<

"\n"

;

180

}

while

(x <= X_MAX);

182

std::clock_t t2 = std::clock();

183 double

total_time =

static_cast<double>

(t2 - t1) / CLOCKS_PER_SEC;

184

std::cout <<

"\tTime = "

<< total_time <<

" ms\n"

;

192int main

(

int

argc,

char

*argv[]) {

195

std::valarray<double> Y0 = {1.f, 0.f};

199

std::cout <<

"\nEnter the step size: "

;

200

std::cin >> step_size;

203

step_size = std::atof(argv[1]);

207 double

total_time =

midpoint_euler

(step_size, X0, X_MAX, &Y0,

true

);

208

std::cout <<

"\tTime = "

<< total_time <<

" ms\n"

;

int main()

Main function.

double midpoint_euler(double dx, double x0, double x_max, std::valarray< double > *y, bool save_to_file=false)

Compute approximation using the midpoint-Euler method in the given limits.

void midpoint_euler_step(const double dx, const double &x, std::valarray< double > *y, std::valarray< double > *dy)

Compute next step approximation using the midpoint-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