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

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Делают длинный диапазон, составленный из отрезков, пропорциональных вероятностям.
    0..22 : "0"
    22..22+19=41: "1"
    41..41+16=57: "2"
    ...
    ..100: "8"

    Выбор из него с линейной вероятностью даст желаемое распределение.

    Например, выпало 56 – попадает в диапазон, относящийся к "2"
    Ответ написан
    1 комментарий
  • Как найти синус 10 градусов?

    Приближенные значения обычно смотрят в таблицах или получают в калькуляторах.

    Ещё есть такая формула (ряды Тейлора):
    sin(x) ~= x5/5! + x3/3! + x
    где x в радианах:
    9a5ff766043c4698a193c81dc7c06445.gif

    Если стоит задача именно без техники примерно найти sin(10°) можно воспользоваться бумагой, карандашом, линейкой и циркулем. sin() угла в прямоугольном треугольнике это отношение противолежащего катета к гипотенузе. Если нарисовать окружность радиуса 1, то sin() будет равен самой длине противолежащего катета.

    Нарисуйте окружность радиусом, скажем, 10 см (будем считать 1 = 10см). Отмерьте угол в 1/18 полукруга (прямой угол разделить на три части и ещё раз на три). Опустите перпендикуляр из точки на окружности на горизонтальную ось. Его длина, делёная на 10см будет значением синуса.
    Ответ написан
    6 комментариев
  • Как найти необходимую ширину и высоту трех изображений?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    W ширина области, в которую надо вписать комплект картинок
    H высота области.

    У n-й картинки:
    • iwn - своя ширина
    • ihn - своя высота
    • kn = iw / ih пропорция


    Для каждой, в итоге, надо найти индивидуальный коэффициент масштабирования sn.

    Сложив пропорции w/h картинок, получим пропорцию их блока, когда все одной высоты:
    K = k0 + k1 + k2
    • К == W/H области, куда надо вписать конструкцию значит что картинки идеально впишутся
    • К > W/H значит, высота будет недостаточна, останется место сверху и снизу.
    • К < W/H значит, высота впишется, а слева+справа останется лишнее место - его за счёт межкартиночных интервалов можно распределить.


    Исходя из сравнения считаем высоту блока Hb. Она либо равна W / K, когда K > W/H; либо равна H.

    Теперь остаётся сосчитать индивидуальные коэффициенты:
    sn = Hb / ih

    На этот коэффициент нужно умножить начальные размеры картинки.
    Ответ написан
    1 комментарий
  • Как рассчитать необходимую ширину и высоту двух изображений?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Есть 2 изображения со значениями ширины и высоты (w1,h1) и (w2,h2). Известна суммарная ширина двух изображений после трансформации: W.

    Требуется найти коэффициенты k1 и k2 пропорционального масштабирования двух изображений, чтобы изменённые изображения:
    1. имели одинаковую высоту: k1 * h1 = k2 * h2
    2. в сумме дали нужную ширину W: k1 * w1 + k2 * w2 = W


    Решите эту систему уравнений. У меня получилось
    k1 = W / ( w2 * ( h1/h2 + w1/w2))
    k2 = k1 * (h1/h2)
    Ответ написан
    7 комментариев
  • Чему равен ответ примера?

    100 – исходя из того, что слева десятичася система, а справа семеричная )
    Ответ написан
    2 комментария
  • Как вычислить координаты кривой?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Есть ли понимание того, какого вида функция должна в итоге получиться?
    Построил ваши точки на графике:
    1c9ba3cc0d9a4021b3c90e9d51532ba2.png
    То ли это экспериментальные данные, стремящиеся к линейной функции - тогда решать линейной регрессией.
    То ли кривая должна лечь точно по точкам, и тогда это может быть сумма синусоиды и линейной, или кривой какого-нибудь 6-го порядка.
    Ответ написан
    3 комментария
  • Программа/сервис выискивающая математическую закономерность в числах?

    Из комментов стало понятно, что вопрос про 6-значные коды, генерируемые Google Authenticator.

    Вот тут (на англ.) рассказывают, какие алгоритмы используются в Google Authenticator: алгоритмы HOTP и TOTP.

    На Хабре есть материал про генерацию одноразовых паролей. Код Google Authenticator открыт – изучайте на здоровье.

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

    У Остапа Бендера в мешке 100 слонов, из которых k разноцветных, и он раздает их m детям по слону в руки (k < m < 100). Сколькими способами может состояться раздача слонов?


    Первого слона можно выбрать 100 способами и отдать m способами.
    Второго выбрать 99 и отдать m – 1 способом.
    N = 100 * m * 99 * (m-1) * ... * (100 - m) * 1
    N = 100! / m! * m! = 100!

    Итого, ответ 100! (100 факториал)

    Но, похоже, я что-то не понял в условии задачи – к чему там разноцветность некоторых слонов?
    Ответ написан
    4 комментария
  • Как высчитать площадь по точкам (Map) в пространстве?

    Можно воспользоваться методом Google Maps API computeArea() – туда первым параметром передать массив из 4 точек вашего прямоугольника.

    Upd. Чуть погуглив, нашёл формулу для вычисления площади:
    A = 2*pi*R^2 |sin(lat1)-sin(lat2)| |lon1-lon2|/360
        = (pi/180)R^2 |sin(lat1)-sin(lat2)| |lon1-lon2|


    Т.е. на JavaScript это будет примерно так:
    // Площадь прямоугольника, заданного двумя параллелями и двумя меридианами
    function area( lat1, lat2, lng1, lng2, R) {
      R = R || 6371000; // радиус Земли в метрах
      var k = Math.PI / 180;
      return k * R * R 
        * Math.abs( Math.sin(lat1 * k) - Math.sin(lat2 * k))
        * Math.abs( lng1 - lng2);
    }


    У меня по вашим координатам получилась в Google площадь 205804.64643832657, а своим JS кодом 205344.32281511626 – наверное, из-за значения радиуса Земли, которое я взял из Вики, а Google нашёл более точное для этой широты.

    area( 65.758185, 65.762301, -169.115964, -169.106136) // 205344.32281511626
    Ответ написан
    6 комментариев
  • Как решить эту задачу?

    У меня дискретной математики не было, но решал бы так. Есть утверждения:
    Л: Пс Бд
    П: Лс Бд
    Б: Лс Пе

    Найдём пару утверждений из которых один оба раза сорвал, другой оба раза сказал правду. Поскольку утверждения Л-П связаны через Бд, а П-Б через Лс, остаётся пара Л-Б – кто-то из них оба раза правда, другой оба раза ложь.

    Ложное утверждение обозначу с воскл. знаком (логическое НЕ) – например, !Лс.

    Итак, один раз соврал и один сказал правду, выходит, Пончик: П: !Лс Бд

    Чтобы Лс было ложным, надо так же сделать ложными утверждения Б. Значит, Б оба раза соврал, а Л оба раза сказал правду:
    Л: Пс Бд
    П: !Лс Бд
    Б: !Лс !Пе

    Итого, точно знаем: Пс и Бд. Остаётся Ле.
    Ленчик – ель; Пончик – сосна; Батончик – дуб.

    upd. Таблица истинности так составляется?
    Л П Б  Пс Бд  Лс Бд  Лс Пе
    0 1 2  0  0   1  1   0  1  конфликт Бд и Лс
    0 2 1  0  0   0  1   1  1  конфликт Бд и Лс  
    1 0 2  1  1   0  0   0  1  конфликт Бд
    2 0 1  0  1   0  0   1  1  конфликт Бд и Лс
    1 2 0  1  1   0  1   0  0  ОК
    2 1 0  0  1   1  1   0  0  конфликт Лс

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

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Парабола подойдёт? y = 100 - 100 * sqrt( x / N) (N – время, когда результат становится нулём)
    80e67e9beec44172b96322f4d832ea83.png
    Примерно в ваши точки ложится парабола с такими параметрами:
    y = 100 - 100 * sqrt( x / 176000)
    be47111e76a34a82b135672a3ee25914.png
    (здесь проценты в 1000 раз больше для пропорционального графика)

    Или, чтобы не так резко падало значение в первые моменты, можно взять смещённую логарифмическую кривую y = 100 - 30 ln( 1 + x / 10000)
    ab5f3ddc2f2d43eca10a1b7867704089.png
    Ответ написан
    2 комментария
  • Как сделать, чтобы меньшие числа давали больше очков?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Буквально ваши правила реализуются подобным JavaScript кодом – с условиями:
    function getPostScore(time) {
      var diff = Math.floor((new Date()).getTime()/1000) - time;
      if( diff <= 3600) return 50000;
      else if( diff <= 7200) return 25000;
      else if( diff <= 10800) return 10000;
      else return 0;
    }
    
    getPostScore(1493487180); // 10000


    Но ступенчатость значений, наверное, не вполне оправдана и лучше будет какой-то гладкой функцией. Например, вида y = k / x
    af5c49df83bb430f9f7ba91b2c6bc147.png
    С коэффициентом k = 50000 * 3600 она удачно захватывает и вторую точку. Но плоха тем, что ближе к нулю зашкаливает в +бесконечность.

    Наверное, для вашей задачи уместнее S-образная кривая – сигмоида, задаваемая формулой вида y = 1 / (1 + e-x) Примерно подобрал коэффициенты:
    ecd0f96a15224fe2ac9fb125e7305b8f.png
    function getPostSigma(time){
      var diff = Math.floor((new Date()).getTime()/1000) - time;
      return Math.round( 10000 + 40000 / (1 + Math.exp((diff-6800)/700)));
    }
    
    getPostSigma(1493531780); // 49998
    getPostSigma(1493522780); // 11545
    Ответ написан
    Комментировать
  • Где и Как познать четвертое измерение?

    Смотрели клип «Imagining the 10th dimension»? Там предлагают представить 4-е через движение трёхмерного пространства во времени, оставляя «след». Т.е. человек – это длинная колбаса в 4D, начинающаяся зародышем и заканчивая стариком. Но поскольку мы живём и воспринимаем лишь 3 измерения, то «видим» лишь какой-то текущий срез этой колбасы – себя сегодня.
    Ответ написан
    2 комментария
  • Как полученить число зависемо от другого чиста?

    Если мой хрустальный шар не сломался, то речь идёт о линейной функции, график которой – прямая линия. И известны две точки, через которые эта прямая проходит:
    13a3284c4f6143f1aafd0289a26ce65a.png

    Допустим, даны две точки D1 с координатами (x1, y1) и D2 с координатами (x2, y2). Тогда уравнение прямой через них можно записать так:

    ( x – x1) / (x2 – x1) = ( y – y1) / (y2 – y1)

    В данном случае, это
    (x – 0)/(6 – 0) = (y – 1)/(0 – 1)
    x / 6 = (y – 1) / –1
    –x / 6 = y – 1
    y = 1 – x/6


    Если, к примеру, x=4, y = 1/3
    Подробнее об уравнении прямой через две заданные точки на плоскости. График нарисовал в бесплатной программе GeoGebra (в т.ч. на Русском языке) – очень рекомендую для объяснения/понимания математики и геометрии.
    Ответ написан
    2 комментария
  • Как найти координаты точки?

    Перечитав ваш вопрос раз 5, вроде бы уловил его смысл. Как я понял, есть прямоугольный треугольник ABC (В – прямой угол). Известны длины всех сторон, координаты на плоскости вершин B и C. Надо найти координаты вершины A:
    b2a77ced1a7c4a0f843ceb13df42f697.png
    При таких условиях задача имеет два решения: точка с одной или с другой стороны от прямой BC (на рисунке – сверху или снизу, под BC)

    Надо взять вектор BC, повернуть его на 90° (в одну или в другую сторону), и длину разделить на bc и умножить на ab:
    x = Bx - ab * (Cy - By) / bc
    y = By + ab * (Cx - Bx) / bc
    // в другую сторону:
    x = Bx + ab * (Cy - By) / bc
    y = By - ab * (Cx - Bx) / bc
    Ответ написан
    Комментировать
  • Как определить функцию линейного графика?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Берём бесплатную программу GeoGebra. Запускаем. В строке внизу вводим первую точку:
    A = (0.5, -85)
    Появляется эта точка на графике, только её не видно сразу – она далеко внизу. Поэтому зумом отъезжаем назад, чтобы точку А стало видно. Вводим вторую точку:
    B = (0.75, 0)
    На графике теперь видны обе точки. Теперь надо через них провести прямую. В палитре линий выбираем иконку линии-через-две точки:
    2ba2e4d629ea445380b095bbaaf3a951.png
    и кликаем по разу на каждой – появляется линия a и её уравнение:
    661d4b2c14de442fa43ed64d0e8b3609.png
    Которое можно через правый клик мышки привести к виду y = ax + b:
    y = 340x - 255
    Ответ написан
    2 комментария
  • Как создать программу сложения цифр n-значного числа?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Сделать из числа массив цифр: str_split(), сложить все элементы массива: array_sum()
    Итого:

    $num = 1679;
    $sum = array_sum( str_split( $num));
    Ответ написан
    1 комментарий