Ответы пользователя по тегу Математика
  • Конус вращается, какие типы сечений могут быть в неподвижной плоскости?

    @Mercury13
    Программист на «си с крестами» и не только
    Перед нами эллиптический конус, крутящийся вокруг своей оси.
    Плоскость x+y+z=1 не проходит через вершину конуса — так что отпадают одна точка, две прямых-образующих и среднее между ними — одна прямая-образующая.
    Запишем уравнение конуса в стандартном виде: x²/sqrt(2)² + y²/sqrt(1/2)² − z² = 0
    Таким образом, прямое сечение конуса — эллипс с осями z и 0,5z. Угол между осью и образующей варьируется от arctg sqrt(1/2) до arctg sqrt(2) = 45°.
    Найдём угол между осью Z и секущей плоскостью; =угол между плоскостью XY и нормальным вектором к секущей (1,1,1); =угол между вектором (1,1,0) и (1,1,1). Точнее, не сам угол, а его тангенс.
    Дальний катет (0,0,1) и имеет длину 1, ближний (1,1,0) и sqrt2 → значит, тангенс будет sqrt(2). Если этот угол будет больше, чем угол между OZ и образующей — эллипс, если меньше — гипербола, если равен — парабола. Поскольку может быть только больше и равен, будут эллипс и парабола.
    Ответ написан
    Комментировать
  • Как разбить числа по группам так, чтобы в группах находились близкие по значению числа?

    @Mercury13
    Программист на «си с крестами» и не только
    Это называется кластеризация, и самый ходовой метод для неё — K-means.
    Ответ написан
    2 комментария
  • Как создать класс комплексных чисел методом аргумента в C++?

    @Mercury13
    Программист на «си с крестами» и не только
    Хорошо, вот ревизия кода.
    1. Действительную/мнимую часть лучше назвать re/im или x/y.
    2. Хотелось бы re()/im() вытащить наружу как функции.
    3. По умолчанию комплексный анализ происходит в нецелых числах — так что re/im должны быть или шаблонными, или дробными.
    4. Я бы setModule() назвал просто set(), getModule() — abs().
    5. abs() и arg() должны быть с ремаркой const.
    6. abs() не должна ничего писать в консоль, а именно что возвращать число: double abs() const { return ...; }. И уже обвязка должна писать в консоль — например, std::cout << obj.abs() << std::endl;
    7. pow(x,2) не стоит использовать — лучше x*x. А лучше использовать стандартную функцию hypot, она не переполняется, если не переполняется результат.
    8. А для аргумента лучше использовать atan2. Она делает именно то, что вам надо — угол на точку (x,y).
    9. «Введите числа» — плохая надпись. Лучше написать «Введите действительную и мнимую часть».
    10. Можно также написать операции ostream << Complex, istream >> Complex.
    11. Лучше использовать #include <cmath>, если вы не имеете дело с «амбаркадеброй». В известной мне версии Embarcadero/Dinkumware почему-то cmath глючит. Не помню, как, но глючит. Я даже не в курсе, перешли ли они на clang полностью, но должны уже за эти годы!
    12. Отступы торчат, как зубы дракона!
    13. Хотелось бы и другие конструкторы: конструктор по умолчанию (даёт число 0, нужен для удобства работы в более сложных структурах), конструктор с одним параметром (даёт действительное число). Соответственно set() с одним параметром.
    Ответ написан
    3 комментария
  • Дедекиндово сечение. Какой в нем смысл?

    @Mercury13
    Программист на «си с крестами» и не только
    Один из способов получить из рациональных чисел действительные.
    Проблем не будет.
    Однако эти супремумы и инфимумы стоило бы помучить.
    Ответ написан
    1 комментарий
  • Почему при делении 5/9 получается 0.55555....6?

    @Mercury13
    Программист на «си с крестами» и не только
    Калькулятор Windows использует компьютерный double для трансцендентных операций, и (как, впрочем, и электронные калькуляторы) самописную десятичную арифметику для сложения/вычитания/умножения/деления. Ну и хорошо — про артефакты компьютерных (двоичных) дробных рассказывать не придётся.
    Возьми и округли в десятичной системе 0,5555555555555… — разумеется, будет 0,556. Или 0,5555556 — всё зависит от того, сколько разрядов хочешь оставить.
    Ответ написан
    Комментировать
  • Как изменить константу C в общем уравнении прямой Ax+By+C=0 при сдвиге прямой по вектору?

    @Mercury13
    Программист на «си с крестами» и не только
    U=(A,B) — перпендикулярный вектор прямой.
    Тогда dC = PrUV·|U| = U·V
    Всего лишь скалярное произведение.
    Проверка. x + y = 0, U=(1,1), V = (1,2)
    dC = 1·1 + 1·2 = 3, правильно?
    Ответ написан
    Комментировать
  • Как посчитать математические градусы?

    @Mercury13
    Программист на «си с крестами» и не только
    А арктангенс надо брать arctg((200−100)/(200−100))
    Кроме того, для этого есть функция atan2, определённая для всех x и y, одновременно не равных 0.
    Ответ написан
    4 комментария
  • Как найти координаты точек на дуге зная координаты точек хорды?

    @Mercury13
    Программист на «си с крестами» и не только
    По теореме Пифагора находим расстояние от центра до хорды: d = sqrt(R² − [(x2−x1)² + (y2−y1)²]/4).
    Находим середину отрезка AB (назовём её (x3, y3)). Находим направляющий вектор отрезка AB (x4,y4) = ((x2−x1)/|AB|, (y2−y1)/|AB|), и есть два варианта центра — (x0,y0) = (x3±d·y4, y3∓d·x4).
    А дальше через atan2 получаем углы, упорядочиваем их и через углы получаем сколько угодно точек.
    Ответ написан
  • Как сделать алгоритм?

    @Mercury13
    Программист на «си с крестами» и не только
    Пусть минимальный простой делитель a.
    Тогда минимальный делитель a (будь мин.делитель составной — нашёлся бы меньший), максимальный — x/a (по сходной причине), x=91·a².
    Кроме того, 91 = 7·13, и потому a <= 7.
    2²·91 и 3²·91 до четырёхзначного явно не дотягивают.
    А вот следующее — a=5 — даёт 2275 = 5²·7·13.
    Также должно подойти a=7, x=7³·13=4459.
    (Раз тут математика, часто запрещён даже калькулятор, потому попытался написать так, как думал бы человек без калькулятора)
    Ответ написан
    Комментировать
  • Есть ли простая математика расчета попадания в зону?

    @Mercury13
    Программист на «си с крестами» и не только
    Вам уже подсказали общие способы. Теперь специализированные.
    Точка гарантированно в охватывающем прямоугольнике. Мы получаем уравнения прямых и смотрим, с какой стороны. Проще всего это делать через косое произведение векторов — AX×AB <> 0, или
    (x − xA)(yB − yA) − (xB − xA)(y − yA) <> 0
    Ответ написан
    Комментировать
  • Это сколько 63 280,4 млн. долл.?

    @Mercury13
    Программист на «си с крестами» и не только
    Миллиарда
    Я бы такому редактору бил по рукам: постороннему читателю надо писать 63,3 млрд долларов.
    Ответ написан
    Комментировать
  • Как записать правило математическими символами?

    @Mercury13
    Программист на «си с крестами» и не только
    ∀i Nkk i= 1 & Li ≤ 8
    Ответ написан
    1 комментарий
  • Есть ли функция которая сильно меняет большие значения и чуть чуть маленькие?

    @Mercury13
    Программист на «си с крестами» и не только
    Главное требование: f’(0)=1. Но из вашего описания непонятно, как функция должна вести себя на ∞-и, и вот несколько вариантов.

    Самое простое — это линейная функция kx, k<1 (например, 0,9x). Она везде (и на ∞-и) линейна.
    Можно посложнее: x/(kx²+1). Этот зверь будет переть к нулю.
    Можно что-то среднее: k·ln(x/k + 1). Стремится к ∞-и, но не так, как x.
    Ещё вариант: 2k sqrt(x/k + 1). Тоже стремится к ∞-и, но побыстрее.
    Если нужно к константе a — то [2a/pi] arctg(x/a). Единственное что — для управления скоростью сходимости придётся в арктангенс вместо x подставить примерно такую же функцию (f'(0)=1).
    Ответ написан
  • Какой парсер для математических выражений на Qt посоветуете?

    @Mercury13
    Программист на «си с крестами» и не только
    Egorithm, Отлично, теперь у вас есть файл библиотеки *.a, include-файлы *.h и разделяемая библиотека *.so.
    Задачи, в порядке приоритета.
    1. Заставить прогу компилироваться, для этого надо в проекте прописать доступ к include-файлам *.h.
    2. Заставить прогу линковаться, для этого надо в проекте прописать доступ к *.a (-lmuparser -L$$PWD).
    3. Заставить прогу запускаться, закинув куда надо *.so.
    Ответ написан
    1 комментарий
  • Как описать неравномерное движение по кругу в виде функции?

    @Mercury13
    Программист на «си с крестами» и не только
    Нужно взять интеграл от функции c: C(t) = ∫c(t)dt,
    и тогда x = cos(Ct), y = sin(Ct).

    Если же функция настолько страшна, что интеграла не взять — тогда придётся решить дифур C'(t) = c(t,x,y).
    Пускай даже самым простым способом C(t+h) := C(t) + hc(t,x,y). Есть и более сложные способы, гуглите «методы Рунге-Кутты».
    Ответ написан
  • Что такое совпадение множеств?

    @Mercury13
    Программист на «си с крестами» и не только
    Совпадают множества — это, собственно, равны как множества. Другими словами, равны, если исключить повторы и отсортировать в каком-нибудь порядке.
    Например, { 1, 2, 3 } = { 3, 3, 2, 1, 2, 1 }.
    Ответ написан
    Комментировать
  • Что такое «распределение Нэша» (Nash distribution)?

    @Mercury13
    Программист на «си с крестами» и не только
    Известная теорема теории игр (теорема Нэша).
    Любая матричная игра имеет равновесие Нэша в смешанных стратегиях.
    А смешанная стратегия — это распределение, с какой вероятностью брать ту или эту стратегию.

    Таким образом, распределение Нэша — это та «случайная смесь» стратегий, которая уныла и надёжна, как и полагается равновесию Нэша. Например, для игры «камень-ножницы-бумага» распределение Нэша — все три фигуры по ⅓.
    Ответ написан
    Комментировать
  • Правильно ли я доказываю?

    @Mercury13
    Программист на «си с крестами» и не только
    Если множества X(·) произвольные — утверждение неверно. Точнее, верна только первая часть — правое включается в левое.
    A = B = {0,1}
    X(a,b) = {a xor b}
    ⋂{a}⋃{b} X(a,b) = [X(0,0) ⋃ X(0,1)] ⋂ [X(1,0) ⋃ X(1,1)] = {0,1}⋂{0,1} = {0,1}
    ⋃{b}⋂{a} X(a,b) = [X(0,0) ⋂ X(1,0)] ⋃ [X(0,1) ⋂ X(1,1)] = ∅ ⋃ ∅ = ∅

    Ваша ошибка: в (4.1) ∀a ∃b̂(a), т.е. этот b с крышей зависит от a. Соответственно, в (5.,1) â зависит от b, и никак не наладишь противоречие.
    Ответ написан
  • Почему МНК только при нормальном шуме?

    @Mercury13
    Программист на «си с крестами» и не только
    Не совсем так. Главное требование — симметричный шум, иначе оценка будет смещённой.
    Но в случае нормального шума МНК превращается в метод максимального правдоподобия. Просто посмотрите на формулу шума, а потом прологарифмируйте.
    Ответ написан
    Комментировать
  • Как доказать, что не существует трех таких цифр (0-9), сумма квадратов которых равна 172?

    @Mercury13
    Программист на «си с крестами» и не только
    Перебор.
    98x — не получается
    97x — не получается
    96x — не получается
    95x — не получается
    94x — не получается
    93x — x уже великоват

    88x — не получается
    87x — не получается
    86x — не получается
    85x — x уже великоват

    77x — не получается
    76x — x уже великоват
    66x — x и подавно великоват

    Вариант 2.
    172 делится на 4. Любой квадрат делится на 4 с остатком 0 или 1 — потому у нас должны быть три чётных цифры.
    Перебор сокращается.

    88x — не получается
    86x — x уже великоват

    66x — x и подавно великоват, дальше перебирать нет смысла.
    Ответ написан
    3 комментария