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/d3/d06/ode__semi__implicit__euler_8cpp_source.html below:

TheAlgorithms/C++: numerical_methods/ode_semi_implicit_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);

83

std::valarray<double> *y,

84

std::valarray<double> *dy) {

86

y[0][0] += dx * dy[0][0];

104

std::valarray<double> *y,

105 bool

save_to_file =

false

) {

106

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

110

fp.open(

"semi_implicit_euler.csv"

, std::ofstream::out);

112

std::perror(

"Error! "

);

116

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

119

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

122 if

(save_to_file && fp.is_open()) {

125 for

(

int

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

126

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

","

;

128

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

"\n"

;

133

}

while

(x <= x_max);

135

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

140 return static_cast<double>

(t2 - t1) / CLOCKS_PER_SEC;

154 const double

&step_size,

155 const

std::valarray<double> &Y0) {

157

std::valarray<double> y = Y0;

159

std::ofstream fp(

"exact.csv"

, std::ostream::out);

161

std::perror(

"Error! "

);

164

std::cout <<

"Finding exact solution\n"

;

166

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

169 for

(

int

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

172

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

"\n"

;

177

}

while

(x <= X_MAX);

179

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

180 double

total_time =

static_cast<double>

(t2 - t1) / CLOCKS_PER_SEC;

181

std::cout <<

"\tTime = "

<< total_time <<

" ms\n"

;

189int main

(

int

argc,

char

*argv[]) {

192

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

196

std::cout <<

"\nEnter the step size: "

;

197

std::cin >> step_size;

200

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

205

std::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