Untitled
#include <stdio.h> #include <math.h> double versiera(double x) { // Верзьера Аньези: y = 1 / (1 + x^2) return 1.0 / (1.0 + x * x); } double lemniscate(double x) { // Лемниската Бернулли (для y > 0): r^2 = 2 * a^2 * cos(2 * theta), a = 1, x = sqrt(r^2) * cos(theta) // Используем уравнение в полярных координатах и преобразуем его в декартовы if (x == 0.0) return -1; // Функция не определена в точке 0 double r2 = 2 * cos(2 * atan(x)); return r2 > 0 ? sqrt(r2 / (1 + x * x)) : -1; } double hyperbola(double x) { // Квадратичная гипербола: y = 1 / x if (x == 0.0) return -1; // Функция не определена в точке 0 return 1.0 / x; } int main() { double x, dx = 2 * M_PI / 41; // Шаг для 42 замеров for (int i = 0; i <= 41; i++) { x = -M_PI + i * dx; double y1 = versiera(x); double y2 = lemniscate(x); double y3 = hyperbola(x); if (y2 < 0) { printf("%.7f | - | ", x); } else { printf("%.7f | %.7f | ", x, y1); } if (y2 < 0) { printf("- | "); } else { printf("%.7f | ", y2); } if (y3 < 0) { printf("-\n"); } else { printf("%.7f\n", y3); } } return 0; }
Leave a Comment