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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    180-градусов вдоль оси вдоль зеленой детальки (вправо), а потом 90 градусов вдоль оси перендикулярной деталькам (ось к нам). Ну или в обратном порядке - сначала 90 градусов вдоль перпендикулярной оси, потом 180 вдоль продольной оси (вверх).
    Ответ написан
  • Как решить задачу по математике с помощью python?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Это не задача на программирование, а задача на математику. Решение - одна формула.

    Сначала решите уравнение, при какой величине вклада X доход от бумаги и от банковского вклада будет одинаков?

    1.1X+2000 = 1.12X

    До этой суммы выгоднее брать бумагу - после - вклад.
    Далее надо 4 раза взять одно из двух, сравнивая текущую сумму с пороговым значением выше.

    От питона вам надо уметь выполнять действие 4 раза:
    for i in range(0, 4):

    Сравнивать 2 значения и делать в зависимости от этого разные действия.
    if a < b:
      foo
    else:
      bar


    Ну, вряд ли вы не знаете, еще надо уметь присваивать переменные и выполнять арифметику - умножение и сложение.
    Ответ написан
    Комментировать
  • Как распределить документы среди людей по ключевым словам?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Определите какую-то метрику. Или количество общих слов у человека и документа или как-то оно нормализованное, вроде какая часть их слов у них общая. После построения матрицы растояния уже можно решать вашу задачу.

    Если документы можно распределять ненормированно, то просто давайте каждый документ ближайшему человеку.

    Если надо как-то нормировать нагрузку, то тут возникает задача назначения, которая может решаться алгоритмом максимального потока минимальной стоимости. Можно вводить штрафы на перегрузку каждого человека и тогда алгоритм может выдавать документы не ближайшим людям, у которых мало работы.
    Ответ написан
    Комментировать
  • Возможен ли треугольник по стороне, углу и пропорциональным сторонам?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Треугольник можно составить из любых трех отрезков, пока выпонляется неравенство труегольника a+b > c, a+c > b, b+c > a. достаточно проверять только одно из них - максимальное число должно быть меньше суммы остальных. Но если не очевидно, какое из них максимальное, то можно проверять все три.

    Итак, дано только A и k, так?

    Чтобы как-то угол связать со сторонами надо воспользоваться теоремой косинусов:

    c^2 = a^2+b^2-2*a*b*cosA.
    подставив суда b=ck, получим
    с^2 = a^2+k^2c^2-2*k*a*c*cosA

    Это квадратное уравнение, связывающее C и A. Можно решить его относительно a (c - параметр) и вы получите а, выраженное через с.

    Ну и в конце надо проверить, что a+b > c, a+c > b, b+c > a, подставив туда найденные формулы для b и a через c. В этих неравенствах будут известные cosA, sinA, k и неизвестная с. Поскольку тругольник по углу и соотношению сторон можно масшабировать, то неравнество должно выполнятся для всех c. Но на самом деле в этих неравенствах все c можно будет тупо сократить. Какие-то из них можно сразу же выкинуть, если рассмотреть 2 случая k>1 и k<=1. Ну а как их дальше решать - думайте сами.
    Ответ написан
    3 комментария
  • Как раскидать элементы максимально рандомно согласно условию?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Надо чтобы все возможные варинаты были равновероятны или возможны перекосы?

    Если возможны перекосы, то есть простой алгоритм.
    Сначала за один проход подсчитайте частичные суммы s1=y1, s2=y1+y2, s3=y1+y2+y3...

    Потом идем с конца. В последнюю стопку можно положить от max(0, z-s(n-1)) до yn блоков. Все оставшиеся блоки гарантированно влезают в предыдущие стопки. Уменьшайте z на сгенерированное случайное число блоков и повторяйте дальше.

    Если надо все равновернятно, то все сложно. Надо динамическим программированем уметь считать, сколько вариантов разместить k блоков на первых i стопках. Потом сгенерировать случайный номер среди всевозможного количества размещений и считать, а сколько бывает вариантов при последней стопке с 0, 1, ... yn блоках и так можно понять, сколько блоков надо поставить в последнюю стопку, чтобы накрыть нужный вариант в лексикографическом порядке. Для этого используйте подсчитанные динмическим программированием значения.
    Ответ написан
    Комментировать
  • Какой оптимальный алгоритм для однозначного определения слагаемых в сумме?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Тут предлагают биты устанавливать, это рабочее решение, но погрешность большую вносит. Часто можно гораздо лучше сделать. Вам надо добиться того, чтобы никакую сумму нельзя составить разными подмножествами активных заказов, так ведь?

    Сначала полным перебором найдите суммы всех подмножеств. Если есть совпадения, возьмите минимальную сумму, которую можно набрать больше 1 раза. Вычтите из случайного заказа 1 копейку. Повторяйте процесс. Если цены правдоподобны, сильно больше 100 копеек и цены различаются, то даже для 20 заказов вам придется лишь несколько копеек вычесть.

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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Воспользуйтесь векторным произведением векторов из центра окружности на две точки. Оно вам даст положительное значение, если от первого ко второму вектору надо идти против часовой стрелки и отрицательное - наоборот. Ноль, если вектора лежат на одной прямой с центром окружности.

    Форомула будет (x0 - xr)(y1-yr) - (x1-xr)(y0-yr), где xr, yr - центр окружности.
    Ответ написан
    Комментировать
  • Почему sum(sum(xy)/sum(x))/n приближенно равен sum(sum(xy))/sum(sum(x))?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Должны быть какие-то определенные свойства матрицы даны. Иначе оно нифига приблеженно не равно. Например,

    X= {{1, 5}, { 1, 5}}, Y={{5, 1/5}, {5, 1/5}}

    слева даст: 1/2 (10/2 + 2/10) = 1/2 (5 + 0.2) = 2.7

    а справа: (5+5+1+1)/(1+5+1+5)= 1

    Вообще даже близко не равно. Меняя 5 в матрице выше на сколь угодно большое число, вы получите сколь угодно большую разницу.
    Ответ написан
    4 комментария
  • Верно ли я поставил знаки в формуле?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Нет.
    Ответ написан
    Комментировать
  • Как минимизировать логическое уравнение?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Вы потеряли не С в тертьем слагаемом в первой строчке.

    А дальше там будет 2 соседних слагаемых A !B !C !D+A C !D. Тут можно A !D вынести за скобки и останется (!B !C+C). Это можно сократить просто до !B + C. Было такое правило, вроде бы, но это можно доказать. Если C истинно, то исходное уже истинно. Если !B истинно, то либо !С истинно и истинно первое слагаемое, либо С истинно, и истинно второе слагаемое.

    Вот уже третье слагаемое сократилось то A !B !D

    Потом повторите фокус, вынеся за скобки из первого и второго слагаемого !B. Там останется !A+A !D = !A + !D
    Ответ написан
    3 комментария
  • Как доказать это или где можно почитать доказательство этого факта?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Как и всегда со счетными множествами, надо все элементы (подмножества) перенумеровать. Например, тут подойдет двоичная система счисления. Занумеруйте все элементы множества. Потом для каждого подмножества выписываете 1 в разрядах, соответствующих элеменам в подмножестве и 0 для элементов не в нем. Получаете двоичное число. Переводите в десятичную систему и получаете номер подмножества.

    Так можно по номеру получить уникальное подмножество и любое подмножество имеет какой-то номер. Все. Вот мы и занумеровали множество всех подмножеств натуральными числами. Оно счетно.
    Ответ написан
    2 комментария
  • Следствие из свойств скалярного произведения. Из чего это следует?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Это следует из двух свойств: скалярное произведение суммы есть сумма скалярных произведений; константный множитель можно выносить за скобки.
    Ответ написан
  • Как тут применить китайскую теорему об остатках?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Найдите остаток от деления искомой штуки на 4 и на 25. Далее примените китайскую теорему об остатках.

    Так проще, потому что остаток от деления a^(b^c) на степень простого числа можно найти по малой теореме Эйлера:

    a^(b^c) = a ^ (b^c % (p-1)p^(n-1)) mod p^k.

    Т.е. 7^9^9 = 7^((9^9) % 20) mod 25

    9^9 % 20 уже можно вычеслить через логарифмическое возведение в степень.

    Аналогично для 4.

    Правда, тут можно и без теоремы об остатках. Надо просто сразу применить теорему ейлера. фи(100) надо только аккуратно вычислить. И числа будут чуть больше, но все-равно подъемные.
    Ответ написан
    Комментировать
  • Как доказать что последовательные производные также имеют вещественные корни?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Во-первых, вам достаточно доказать это лишь для одной производной. Все остальные доказываются по индукции.

    Если нет кратных корней - то все просто. У вас n-1 последовательный промежуток между двумя корнями. На каждом должен быть ноль производной.

    Теперь, допустим есть какой-то корень степени k > 1.

    Тогда P(x) = (x-a)^k Q(x).

    Если взять производную, то видно, что она делится на (x-a) в степени k-1, т.е имеет k-1 корней:

    P'(x) = k*(x-a)^(k-1)*Q(x)+(x-a)^k*Q'(x)

    Т.е, если у вас m различных корней (суммарной кратностью n), то производная, как и в первом случае имеет m-1 корней между корнями P(x) и еще n-m раз повторяет корни полинома как во втором случае. Суммарно - n-1 вещественных корней, значит все корни - вещественные.
    Ответ написан
    Комментировать
  • Как посчитать значение счетчика со сбросом?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Восстановить последовательность можно только если неурезанные числа никогда не изменяются больше чем на 65535.

    Один вариант решения - прибавлять к текущему числу 65536, пока оно меньше предыдущего. Можно обойтись арифметикой:

    a[i] += ceil((a[i-1]-a[i])/65536)*65536

    Только проверьте, что в вашем языке ceil(-0.5) даёт 0, иначе надо отдельно проверять случай, когда последовательность возрастает в начале и прибавлять ничего не надо. И ещё, тут считается, что числа в неурезанной последовательности могут повторяться. Если нет, то надо отдельно рассмотреть случай равных чисел в итоге и ещё раз прибавить 65536.
    Ответ написан
    Комментировать
  • Как можно найти центроид четырёх точек ( Quadrilateral ), зная координаты этих вершин?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Вот тут хорошо расписано.

    Сначала надо триангулировать четырехугольник. Потом, центр масс каждого треугольника - среднее арифметическое координат. Далее, остается найти центр масс двух точек - центров масс треугольников, где в каждой точке лежит масса равная площади треугольника.

    Чтобы это работало и с невыпуклыми многоугольниками надо считать площадь треугольников через векторное произведение сторон, разрешая таким образом отрицательные площади у треугольников снаружи вашей фигуры.

    Итоговая фромула (в векторах):
    C = ((p1+p2+p3)/3*(p1p2*p1p3)+(p3+p4+p1)/3*(p1p3*p1p4))/((p1p2*p1p3)+(p1p3*p1p4))


    Тут pi - i-ая вершина четырехугольника, pipj - вектор между точками i и j. pipj*pkpl - векторное произведение двух векторов.
    Ответ написан
    Комментировать
  • Есть ли сервис для создания формулы для числа?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Зачем сервис? Вот вам формула для любого числа X = (X-1) + 1. Например, 172 = 171+1.

    Или вам какое-то особое свойство у формулы нужно?
    Ответ написан
  • C# Math правильно ли я делаю?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Да вроде все правильно. Скорее всего опечатка в задании где-то. Так бывает. Или где-то может быть сказано, что углы должны быть в градусах а не радианах. Тогда выражение под синусом/косиносом надо домножать на 180/pi.
    Ответ написан
    1 комментарий
  • Как найти точку пересечения двух графиков?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Единственный способ - решить уравнение, приравняв 2 функции для графиков. Построение графиков - это фактически графическое решение этого уравнения.

    Дальше завивит от того, как графики заданны. Если это наборы точек, то надо найти 2 одинаковые точки в отсортированных массивах. Или попересекать кучу отрезков, если график кусочно-задан.

    Если графики заданны функциями, то надо решить уравнение. Тут вам помогут численные методы, если это не полиномы степени 4 и меньше. Например, метод Ньютона.

    Никаких других методов нет.
    Ответ написан
    Комментировать
  • Как классифицировать/сгруппировать элементы числового ряда так, чтобы сумма элементов в каждой группе была примерно одинаковой?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Это задача об оптимальном разбиении на подмножества, она NP-сложная. Тут нет какого-то простого и быстрого алгоритма.

    Полный перебор, метод ветвей и границ, всякие методы отжига и генетические алгоритмы вам в помощь.

    В отдельных случаях (сумма не очень большая и множеств всего 2; числа очень маленькие) возможны быстрые алгоритмы на основе динамического программирования
    Ответ написан