Ответы пользователя по тегу Математика
  • Почему не существует не итерационных/точных методов для вычисления корня из числа?

    @Mercury13
    Программист на «си с крестами» и не только
    Всё крайне просто.
    Потому что, начиная с рационального числа и проводя четыре арифметических действия, +−×: , мы будем оставаться в поле рациональных чисел. А корень в большинстве случаев иррациональный.
    Мы можем получить лишь рациональное число, достаточно близкое к нашему корню.
    И все «нормальные» методы вычисления корня работают так: если ещё немного повычислять, можно получить более точный корень. То есть итерационные.

    Пример НЕитерационного метода предложили Ын, Уолш и Таролли, но более он известен по игре Quake III: придумать приближение логарифма, разделить на 2 и обратить это самое приближение. Но этот метод не масштабируем: если точности не хватает, придётся брать в руки какой-нибудь метод Ньютона и дотягивать точность. Ну или придумывать более точное приближение логарифма — исходное было всего лишь прочтением компьютерного дробного как целого числа. То есть придётся рубить его на мантиссу и порядок, порядок брать как есть, а мантиссу преобразовывать каким-то многочленом (если читать дробное как целое, то наш многочлен — банальная линейная функция, log₂(1+x)≈x).

    А лучше порядок превратить в несмещённый, поделить надвое, вернуть опять к смещённому, и остаётся только найти приближение — многочленом или таблицей — для x∈[1,4).

    Другой НЕитерационный алгоритм — банальная таблица. Каким-то раком предвычислить таблицу, а то, что в таблицу не попадает, приблизить любым доступным методом, да хоть линейной интерполяцией или многочленами Эрмита.
    Ответ написан
    Комментировать
  • Как найти расстояние от точки до вектора?

    @Mercury13
    Программист на «си с крестами» и не только
    Откуда начинается вектор?
    Если вектор AB и точка C, то расстояние — это ортогональная СОСТАВЛЯЮЩАЯ |AC×AB| / ||AC||·||AB||.
    a×b — это косое произведение векторов ax·by−ay·bx. В 2D это скаляр. Если убрать модуль в числителе, получится знаковое расстояние — плюс с одной стороны и минус с другой.
    ||a|| — длина вектора sqrt(ax²+ay²). Если есть функция hypot, используй её.
    Ответ написан
    Комментировать
  • Как сократить данную операцию?

    @Mercury13
    Программист на «си с крестами» и не только
    Сначала законы де Моргана. Потом !!B=B, и т.д.
    Первая часть даст B || !C. Вторая — !B || C. И всё это ИЛИ — так что выходит тождественная истина (B || !B = 1).
    (Простите, облом искать юникодные символы, так что беру из Си: && и, || или, ! не)
    Ответ написан
    1 комментарий
  • Нахождение F(x), для которой аргумент (элем. исход) ξ(ω) распределён неравномерно?

    @Mercury13
    Программист на «си с крестами» и не только
    Всё точно так же. Считаем, что φ от −π/2 до π/2!!!!
    Fx(u) = p{x < u} = p{h tg φ < u} = p{φ < arctg(u/h)} = Fφ(arctg(u/h))

    Соответственно, в твоём случае φ от 0 до π, при непрерывном распределении:
    Fx(u) = p{x < u} = p{h ctg φ < u} = [арккотангенс убывает, меняется знак!!] = p{φ > arcctg(u/h)} = 1−Fφ(arcctg(u/h))

    Лучше брать arcctg(x/h), чем arctg(h/x) — не нужно делать скидку на то, что мы сидим на двух стульях кусках ОДЗ.
    655408c964d68977789634.png
    Ответ написан
  • Что такое трансцендентные числа?

    @Mercury13
    Программист на «си с крестами» и не только
    Алгебраические числа — это корни многочлена с конечной степенью и целочисленными (ну или рациональными) коэффициентами. Так что пи не алгебраическое — то есть трансцендентное.
    Вот книга про это, добьёте решение в вашей форме? (Ваша чуть отличается от традиционной)
    mathemlib.ru/books/item/f00/s00/z0000027/st057.shtml
    Ответ написан
    2 комментария
  • Генерировать числа с заданной вероятностью?

    @Mercury13
    Программист на «си с крестами» и не только
    Алгоритм простой, подготовка O(n), расчёт O(log n). Вычислить функцию распределения (она кусочно-постоянная). Сгенерировать равномерно распределённое число, определить, в какой кусок оно попадает.
    Для целых «шансов» — если сумма этих «шансов» 123, то генерируем число от 0 до 122, а дальше понятно.

    Алгоритм многопамятный, подготовка O(sum ai), расчёт O(1). Годится только для небольших целых шансов.
    Его предложил Сергей Соколов.

    Алгоритм палочный, подготовка O(n log n), расчёт O(1).
    https://elementy.ru/problems/2263/Razdelyay_i_uravnivay
    Алгоритм легко переделывается на ситуацию, когда все палки имеют целую длину, резать-клеить их можно только по целым длинам, при этом последняя палка может оказаться короче. В общем, простым делением определяем, в какую палку попали, а потом доступом к массиву и сравнением — в какой компонент данной палки.

    Например, у нас есть четыре шанса — 100, 20, 2 и 1. Палочный алгоритм даст, например, такие палки (у всех длина 31, и у последней — 30).
    Палка [0..31): 1 (x<1); 100 (x>=1)
    Палка [31..62): 2 (x<33); 100 (x>=33)
    Палка [62..93): 20 (x<82); 100 (x>=82)
    Палка [93..123): всегда 100
    Разыграв 32, получаем: [32/31] = 1, первая палка. 32<33 — та шмотка, у которой два шанса.
    Ответ написан
  • Какя разница в формулах теоремы Байеса?

    @Mercury13
    Программист на «си с крестами» и не только
    В знаменателе — формула полной вероятности. Вот и всё.
    p(B) = p(B|A)·p(A) + p(B|¬A)·p(¬A)

    Для чего? Да просто p(B) в большинстве случаев хрен поймёшь, и его приходится вычислять непрямо. Например:
    A — письмо является спамом
    B — в письме есть слово «sex»
    Видим в письме слов «sex» — спам ли оно?
    Мы можем собрать базу спама со словом «sex», и базу обычной переписки с этим словом, и вычислить p(B|A) и p(B|¬A). А p(A) и p(¬A) вычисляются уже на компе конечного пользователя в зависимости от того, насколько жёстко его спамят.

    Пример второй. Каждый тысячный водитель — пьяный. Алкотестер чётко видит алкаша, но останавливает каждого сотого трезвого. Какой процент из приехавших в больницу действительно пьянствуют за рулём?
    U — проехавшие через пост водители
    A — пьяный
    B — алкотестер сработал
    Аналогично, p(B) заранее неизвестен, но приходится вычислять по полной вероятности. И вроде бы при таких цифрах один из одиннадцати попавшихся реально пьяный. И это затрудняет антитеррористические меры: если по городу-миллионнику ходит сотня террористов, какая должна быть точность, чтобы не ломать невинные жизни!
    UPD: чуть меньше 1/11: p(B|A)=1, p(A)=1/1000, p(B|¬A)=1/100, p(¬A)=999/1000,
    итого с сокращением на 1000 будет 1/(1+999/100)=100/1099.
    Ответ написан
    Комментировать
  • В каких случаях логичней чтобы получить половину умножать на 1/2, а в каких делить на 2?

    @Mercury13
    Программист на «си с крестами» и не только
    ЦЕЛЫЕ ЧИСЛА / ФИКСИРОВАННАЯ ЗАПЯТАЯ
    ·0,5 в фиксированной запятой нет никакого смысла. /2 и арифметический сдвиг >>1 ведут себя немного по-разному на отрицательных числах, и как сейчас оптимизируют /2 с сохранением точности до бита — я не в курсе (Godbolt показывает пекло какое-то на пять команд — и оно быстрее, чем div?).

    ДРОБНЫЕ ЧИСЛА
    С /2 и ·0,5 никакой разницы, но второе быстрее. Если коэффициент не умещается в компьютерное дробное (⅓, например) — если нет никакого сакрального смысла в точности до бита, можно множить.
    Ответ написан
    Комментировать
  • Какова будет грамматика для данного языка?

    @Mercury13
    Программист на «си с крестами» и не только
    L → EZUU M ZUUUUF
    M → ZUU M ZUUUU | S
    Для S грамматику вы уже придумали.
    Затем — не буду расписывать, они многословны, но просты — UZ → ZU

    А чтобы превратить Z в 0 и U в единицу, если i,n ∊ N+…
    Сделаем затравку…
    EZ → E0
    Ua → 1a
    cZ → c0
    UF → 1F
    …Уничтожим технические нетерминалы…
    E0 → 0
    1F → 1
    …И проведём волну!
    0Z → 00
    U1 → 11

    Вроде так.
    (Z = zero, U = unit)
    Ответ написан
    Комментировать
  • Как разбить числа по группам так, чтобы в группах находились близкие по значению числа?

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

    @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).
    Ответ написан