Untitled
unknown
plain_text
2 years ago
1.5 kB
8
Indexable
#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;
}
Editor is loading...
Leave a Comment