Задать вопрос
Ответы пользователя по тегу Математика
  • Как сгенерировать случайную величину с заданной многомерной функцией распределения?

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

    Известно, как сгенерировать одномерную величину с заданной функцией распределения: обращаем функцию распределения (интеграл плотности) и подставляем туда равномерно распределенную на отрезке 0..1 величину.

    Пусть у вас 3 компонены x,y,z. Интегриркем по y,z, получаем функцию плотности для x. Гегерируем. Потом подставляем это значение в функцию плотности и получаем новую, уже двухкомпонентную функцию (ее еще надо будет поделить на плотность для данного x l, чтобы нормировать). Повторяем операцию для y.

    Но, как и в одномерном случае, этот метод не просто применить, если функция рачпределения сложная, или у нее интеграл просто не берется.

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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Есть же методы: https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D...

    Они обычно медленнее и более трудоемкие, поэтому из и не используют особо.
    Ответ написан
  • Как доказать, что a³+b³+c³=3?

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

    Это диафантово уравнение. При чем очень сложное: от трех переменных да еще и кубическое. Только для каких-то самых тривиальных случаев, вроде линейного уравнения, еще есть какие-то алгоритмы прямо получения решения (вроде расширенного алгоритма Эвклида). Для некоторых классов существуют методы порождения всех решений, если вам известно одно, но это одно часто надо еще найти - перебором. Но вот такие уравнения человечество еще решать не научилось.
    Ответ написан
  • Как оптимизировать алгоритм самонаведения ракеты?

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

    Обозначьте |MSL_VEL - TGT_VEL| за t.

    Получите уравнение TGT_DIR = (MSL_VEL-TGT_VEL)/t

    Преобразуйте: TGT_DIR*t = (MSL_VEL-TGT_VEL)

    Но тут неизвестные вектор MSL_VEL и t. Но они связаны, ведь t - это длина вектора. Обозначим неизвестный вектор MSL_VEL как (x, y, z) Значит:
    t^2=(x - TGT_VEL_x)^2 + (y - TGT_VEL_y)^2 + (z - TGT_VEL_z)^2

    Ну и еще вы знаете, что скорость ракеты фиксированная же:
    x^2+y^2+z^2 = MSL_SPEED^2

    У вас тут 4 неизвестных и аж 5 уравнений (ведь первое - это векторное уравнение):
    TGT_DIR_x*t = x - TGT_VEL_x
    TGT_DIR_y*t = y - TGT_VEL_y
    TGT_DIR_z*t = z - TGT_VEL_z
    t^2=(x - TGT_VEL_x)^2 + (y - TGT_VEL_y)^2 + (z - TGT_VEL_z)^2
    x^2+y^2+z^2 = MSL_SPEED^2


    Раскройте скобки в 4-ом, подставьте туда пятое и из первых трех выразите x, y, z:

    t^2 = MSL_SPEED^2+TGT_SPEED^2-2*TGT_VEL_x*(TGT_DIR_x -t*TGT_VEL_x)-... = MSL_SPEED^2+(1-2t)TGT_SPEED^2-2(TGT_DIR*TGT_VEL)


    Там в конце векторное произведение векторов. Дальше сами раскройте и получите квадратное уравнение на t. Решите его по школьной формуле. Если дискриминант отрицательный, то решения тупо нет. Слишком быстро цель улепетывает. Потом не забудьте проверить, чтобы t получилось положительное. Потом подставьте t в первые 3 уравнения и найдите искомые x, y, z.

    Еще можно так себе это все представить. Свяжем систему координат с целью. Тогда множество точек, куда может смотреть скорость ракеты - это сфера с центром в TGT_VEL и радиусом MSL_SPEED. Вам надо выбрать на этой сфере точку так, чтобы она была коллинеарна с вектором TGT_DIR. Т.е. у вас есть луч из центра координат вдоль векторо TGT_DIR. Вам надо найти где он пересечет сферу. Введите параметр t вдоль луча и дальше получите то же самое квадратное уравнение.
    Ответ написан
    2 комментария
  • Таблица истинности С++. Почему здесь разные результаты?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    ( x == z) || (!x || (y && z)) == 0 означает ( x == z) || ( (!x || (y && z)) == 0 ).
    Приоритет у сравнения выше, чем у ||, которое, по идее, есть лишь часть считаемого выражения. Поэтому у вас полечается не "выражение == 0" а "выражение1" или "выражение2 == 0".
    Возьмите все ваше выражение в скобки и все заработает.

    Во втором куске кода у вас 2 отдельных выражение сравнивается с 0 и скобочки у вас там расставлены правильно.
    Ответ написан
    1 комментарий
  • Как реализовать операторы в классе математического вектора?

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

    Вектора можно перемножать. Скалярное или вектороное произведения. Чаще скалярное ставят на operator*, а векторное на какое-нибудь operator^

    Операторы сравнения обычно делают лексикографически, покомпонентно. Сравнили первое число - у какого вектора больше - тот и больше. Если числа равны, сравниваем вторые компоненты. И т.д. Но это делают редко, потому что смысла вектора сортировать особо нет. Лексикографический порядок пользы особо не приносит.
    Ответ написан
    9 комментариев
  • Как найти линейную комбинацию равную нулю, с ненулевым набором коэффициентов?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Решите систему линейных уравнений. Обозначьте коэффициенты с1,с2,с3, сложите полиномы, приравняйте коээфициенты пред всеми степенями x к 0. Будет 3 уравнения, 3 неизвестных, но одно из них лишнее (раз они линейно зависимы). Подставьте что угодно ненулевое вместо C, решите первые 2 уравнения относительно A и B.
    Ответ написан
    Комментировать
  • Двойная сумма, непонятно как поменялись предели сумирования?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Что означает вот эта первая надпись с одним знаком суммы? Там же 2 переменные в условии - j и k! Эта надпись означает сумму по всем значениям j и k, т.ч. 1 <= j < k+j <= n. Это множество допустимых значений можно представить как какую-то фигуру на плоскости.
    Ее можно описать вот этими неравенствами, а можно перебрать все допустимые значения j, для каждого из них посмотреть, какие значения k попадают в искомое множество. Вот так и получаются 2 суммы, одна по j, другая по k.
    k не может быть меньше 1 (Видимо, по условию раньше) и больше n, потому что иначе k+j превзойдет n. Зафиксировав k, остаются 2 условия 1 <= j и k+j <= n. ведь j < k+j всегда. Из этих двух условий получаем границы суммирования на j.
    Ответ написан
    Комментировать
  • Как найти линейную комбинацию векторов которая будет ближе всего к заданной?

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

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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Если брать более большой промежуток, отображение будет не биективным.
    Например, для x=2 отображение дает -2. Это же -2 можно получить для x=-2/3.
    Потом, в точках x=+-1 это отображение вообще не определено.
    Ответ написан
    2 комментария
  • Как найти расстояние от точки до вектора?

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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    727/x. Для 720 получается 1.0097222222...
    Но вообще, если это аудио, то можно паузы попробовать повырезать в какомнибудь audacity руками.
    Ответ написан
    Комментировать
  • Модель F(x) с разрывом типа «скачок»?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Сила трения. Имеет разрыв в v=0. Ездили когда-нибудь в автобусе или метро каком-нибудь? Пробовали не держаться за поручни? Вот когда оно тормозит, вас вперед тянет некая сила, которая внезапно обрывается, когда транспорт полностью останавливается. Вот это оно фактически. Сила трения действует на транспорт, вам, с вашей точки зрения, кажется, что это вас тянет вперед (хотя это корпус автобуса тянет назад). Но в момент достижения нулевой скорости эта сила трения становится резко равной нулю.
    Ответ написан
    4 комментария
  • Как графически показать эквивалентность двух множеств?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Наверно, на графике XY нарисовать обе функйции зависимости. Отметить отрезки допустимых x на OX, вертикальными линиями соединить концы отрезков с функцией зависимости, от точек пересечения горизонтальными линиями получить отрезок значений на оси OY. Если множества на оси OY совпали, то они эквивалентны (Спойлер: тут они не совпали. Например, инфинумом первого множества является 1, а второго - 27).
    Ответ написан
  • Почему любую булеву функцию можно представить в виде СДНФ или СКНФ?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Потому что эти формы - это тупо перечисление всех наборов входных значений, которые дают истину, или ложь (в другой форме). В СДНФ вы получаете слагаемые, объедененные через ИЛИ. Каждое слагаемое через И задает все переменные так, что только вот в конкретном наборе входных данных это слагаемое будет истинно. Раз они все через ИЛИ соединены, то вся функция истинна только если входные значение из нужного набора. Аналогично СКНФ - но там каждая скобочка истина, если входные переменные не равны набору, на котором функция должна давать ложь.
    Ответ написан
    Комментировать
  • Почему вектор перемещения не поддается правилу треугольника при вычитании векторов?

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

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

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

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

    Сходу очевидно, что x=y=a+b=c+d+k дает по нулям все левые части, что удовлетворяем всем неравенствам.

    Так что, берем x=y=a=c=1, b=d=k=0

    Плюс, можно менять 1 на что угодно. Можно распределять эту 1 между a и b, а так же между c, d и k. Бесконечно много решений.

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

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

    Совет: обозначте за x длину диагонали от точки пересечения к углу короткого основания. За y обозначьте оставшейся кусок диагонали (к большему основанию). У вас там 4 прямоугольных треугольнка образуются со сторнами xx, xy, yx, yy. Сумма их площадей - 110. Диагональ треугольника xx тоже дана (это короткое основание - 4). Искомое оснавание - диагональ треугольника yy (по теореме пифагора получается sqrt(2)*y).

    Составьте 2 уравнения, решите их, формулу запрограммируйте.
    Ответ написан
    Комментировать
  • Как подступиться? Нужна ли равномерная сетка ВЫЧМАТ?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Да, можно воспользоваться этой оценкой. Что там за Mn я, правда, не знаю. Эту часть надо вычислять имея явный вид функции f(x)=e^x.
    Ответ написан
    Комментировать