Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- typedef double (*func)(double);
- double MP2(double x0, double h, double eps, func F) {
- double x1 = x0 - h;
- double x2 = x0;
- double x3 = x0 + h;
- double y1 = F(x1);
- double y2 = F(x2);
- double y3 = F(x3);
- if (y1 - 2 * y2 + y3 <= 0) {
- std::cerr << "Invalid argument.";
- return 0;
- }
- double zm;
- do {
- double z1 = x1 - x3;
- double z2 = x2 - x3;
- double p = ((y1 - y3) * z2 - (y2 - y3) * z1) / (z1 * z2 * (z1 - z2));
- double q = ((y1 - y3) * z2 * z2 - (y2 - y3) * z1 * z1) / (z1 * z2 * (z2 - z1));
- zm = -q / (2 * p);
- x1 = x2;
- x2 = x3;
- y1 = y2;
- y2 = y3;
- x3 = x3 + zm;
- y3 = F(x3);
- } while (fabs(zm) >= eps);
- return x3 + zm;
- }
- double F(double x)
- {
- return pow(sin(x), 2) + cos(x); // !!!
- }
- int main() {
- // !!!
- std::cout << "Result: " << MP2(3, 0.1, 1e3, F) << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement