Ответы пользователя по тегу Математика
  • Как правильно решать линейные уравнения методом Гаусса?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    1) Да, можно прибавлять любую строку, умноженную на любой коэффициент, к любой другой строке.
    2) Нужно сделать так, чтобы во всех клетках (a,b), где a > b остались нули. Тогда матрица примет треугольный вид.
    Например, из системы
    x + y + z = 1
    2*x + 3*y - z = 2
      -x + y + 2*z = 0

    получится
    x + y + z = 1
        y - 3*z = 0
            9*z = 1

    После этого найти последовательно z, y, x
    3) Можно, но вам не понравится. Надо считать миноры (определители матриц (N-1)*(N-1)). Но это будет уже не метод Гаусса.
    Ответ написан
    Комментировать
  • Реализация вращения через кватернион. Где ошибка?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Получилось (-0.41,-7.31,-1.00). Почему вы считаете, что это неправильно? Простейшие независимые проверки не показывают ошибок.
    Ответ написан
  • Как легче всего решить матрицы?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Все задачи на работу со столбцами. Читаете, что бывает с определителем, когда столбец умножается на число, когда столбец прибавляется к другому, когда два столбца меняются местами, когда все элементы столбца оказываются нулевыми. И решаете, что применить.
    Ответ написан
    Комментировать
  • Как преобразовать определенные биты в числе?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если номер позиции pos, число разрядов len, а число, которое надо изменить - x, то ответом будет
    x | (((1 << len) - 1) << pos)
    Ответ написан
    1 комментарий
  • Реальное и воображаемое комплексного числа в степени комплексного числа?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    3-i*4 = exp(ln(5)-i*arctg(4/3)+i*2*pi*k)=exp(1.6094379-i*0.9272952+i*2*pi*k)
    (3-i*4)^(2+i)=exp((1.6094379-i*0.9272952+i*2*pi*k)*(2+i))=
    =exp(4.146171042-i*0.24515252+12.56637*i*k-6.283185*k)=
    =(61.30217-i*15.336867)/exp(2*pi)^k
    Ответ из учебника не получается ни при каком k.
    Ответ написан
    Комментировать
  • Как сделать подбор слов из словаря чтобы получилась заданная фраза (анаграммы)?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Многомерная задача о рюкзаке.

    Допустим, у нас есть фраза "aaabbc" и словарь
    aab
    abb
    abc
    bbcc
    aac

    Для фразы считаем, сколько раз в ней встретилась каждая буква. Буква 'a' встречается na=3 раза, буква 'b' - nb=2 раза, буква 'c' - nc=1 раз.
    Заводим битовый массив B с размерностями 0..na, 0..nb. 0..nc (в нашем примере это 24 бита). В элемент (0,0,0) кладём 1, в остальные 0.
    1000 0000
    0000 0000
    0000 0000

    Теперь перебираем слова из словаря. Для каждого слова считаем количество каждой буквы в нём (для aab это ma=2,mb=1,mc=0), и строим массив B1, в котором B1[a,b,c] = B[a,b,c] | B[a-ma,b-mb,c-mc] (для отрицательных индексов считаем значения нулевыми). В нашем случае получится
    1000 0000
    0010 0000
    0000 0000

    Продолжаем для остальных слов. После добавления каждого слова проверяем элемент B[na,nb,nc]. Если он ненулевой - мы нашли вариант (правда, помним из него только последнее слово - остальные восстановим на следующих проходах). Вариант запомним, элемент B[na,nb,nc] обнулим.
    У нас получится:
    abb=(1,2,0)
    
    1000 0000
    0010 0000
    0100 0000
    
    abc=(1,1,1)
    
    1000 0000
    0010 0100
    0100 0001

    Первый вариант есть - он кончается на "abc". Обнуляем B[3,2,1] и продолжаем.
    Слово bbcc=(0,2,2) можно не рассматривать, в нём mc > nc.

    aac=(2,0,1)
    
    1000 0010
    0010 0100
    0100 0001


    Нашли второй вариант - кончается на "aac". Слова в словаре кончились.

    Теперь надо построить фразу "aab" из словаря
    aab
    abb

    и фразу "abb" из словаря
    aab
    abb
    abc
    bbcc

    Теоретически, это можно делать одновременно - но придётся отслеживать несколько индеков. И обнулять их уже нельзя, надо смотреть, не пытаются ли в них записать 1 (даже если там уже было значение 1).
    Если на массив у вас есть 2 ГБ памяти, а разных букв не более 26, то этого хватит на фразу из 39 букв (худший случай - когда 13 букв встречаются по 1 разу, а 13 по 2 раза).
    Ответ написан
    Комментировать
  • Тау расстояние Кенделла?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    В первой расстановке 0 идёт раньше 1 (0, 3, 1...), а во второй - позже (1, 0, 3...) Поэтому их "относительный порядок" разный. Для пар 0,3 и 0,6 порядок одинаковый - в обеих расстановках 0 идёт и раньше 3, и раньше 6.
    "Почему выбраны именно эти пары?" - потому что в остальных порядок одинаковый.
    Ответ написан
    Комментировать
  • Как построить полную сетку из не полной?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Думаю, что лучше ещё раз посмотреть в сторону триангуляции.
    После того, как триангуляция Делоне исходных точек построена, то для любого треугольника и любого уровня высоты пересечение изолинии с треугольником будет либо пустым, либо точкой, либо отрезком. Координаты концов отрезка определяются линейной интерполяцией. И продолжать изолинию можно будет просто шагая по треугольникам.
    Проблема возникнет, когда изолиния уткнётся в вершину. Теоретически, из вершины может быть больше двух путей - если она оказалась седловой точкой. Чтобы этого избежать, достаточно просмотреть в начале все данные, и если попадётся "круглое" число - слегка его изменить.
    Ответ написан
    5 комментариев
  • Как решить задачу о математической игре Баше?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если позиция сразу проигрышная, то программа не помечает ход как правильный. Больше ошибок пока не видно.
    Ответ написан
  • Как найти статью на хабре о получении числа 100 из 6 цифр?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Возведения в степень там точно не было. Список вот:
    https://www.dropbox.com/s/v1gp0yp62kr1kdh/badticke...
    Но я не помню, разрешался там унарный минус, или нет.
    Дата создания файла 3 апреля 2013, но вряд ли это поможет.

    UPD. habrahabr.ru/post/174715
    К счастью, она была в хабе "алгоритмы".
    Ответ написан
    Комментировать
  • Практическое применение гиперболических функций?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Редко применяются. Главным образом, потому, что они хорошо выражаются через обычную экспоненту. Конечно, написать (exp(x)+exp(-x))/2 сложнее, чем cosh(x), но функция обычно нужна не сама по себе, а как часть большого выражения.
    Логика подсказывает, что гиперболические функции удобно использовать для формул, связывающих углы и стороны треугольника на плоскости Лобачевского, но та же логика говорит, что в реальной жизни это нужно чуть реже, чем никогда. Можно встретить эти функции в каких-то задачах на теплопроводность... и получается ответ - используйте эти функции тогда, когда встретите их в справочнике. Из остальных случаев могу вспомнить только использование tanh() в формуле релятивистского сложения скоростей. Почему-то перейти от скорости к "быстроте" мне тогда показалось удобным.
    Ну, и полезное применение tanh() - что она отображает всю числовую прямую на интервал (-1,1). Хотя для положительных чисел проще использовать x/(1+x).
    Ответ написан
    Комментировать
  • Как выбрать случайным образом победителя, учитывая его шанс на победу?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Лучше брать дробное случайное число:
    double r=frand()*total_chance_sum.
    (как сегодня называется frand() я не знаю - должно выдавать случайное число от 0 до 1). Условие current_sum <= r не нужно, оно выполняется всегда.
    Если хотите повысить шансы тех, кто делал большие ставки - можете возвести эти ставки в квадрат (т.е. если цены - 0.5, 1, 2, то шансы на победу будут 1/21, 4/21, 16/21). Не знаю, хорошо ли это.

    Вообще, не очень понятно, как работает
    current_sum += items[i].chance
    если сумма целая, а ставка дробная. Она не ругается на потерю точности?
    Ответ написан
  • Взаимное уничтожение слагаемых - что это?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Это то, из-за чего (a+b)*(a^2-a*b+b^2)=a^3-b^3. Четыре слагаемых - a^2*b, -a^2*b, a*b^2, -a*b^2 в сумме дали 0, и в итоговой формуле их не видно. Как того суслика.
    Ответ написан
    Комментировать
  • Как найти центральный угол сектора, если известны значения двух углов прямых, окружности относительно оси x?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если это не прямые, а лучи, и направления a,b, лежащие от 0 до 360, то
    min( abs(a-b), 360-abs(a-b) )
    Ответ написан
    1 комментарий
  • Как построить модель цилиндрической волны?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если достаточно приближенной модели, можно сделать так:
    r1=sqrt(x^2+y^2)
    a=A*p/sqrt(p^2+x^2+y^2)
    z=a*sin(k*r1-w*t)
    где p - размер области в окрестности нуля с насильственно ограниченной амплитудой,
    A - максимальная амплитуда (в нуле)
    k - пространственная частота (т.е. 2*pi/k - расстояние между волнами)
    w - временнАя частота (2*pi/w - период).
    w/k - скорость распространения.
    Ответ написан
    Комментировать
  • Задача про стену и кирпичи. Как решить?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Строите матрицу перехода между рядами (43х43, как описано в ответе Andy_U ), потом возводите её в 9-ю степень (поскольку у нас 9 переходов) и считаете сумму всех элементов (поскольку первый и последний ряд могут быть любыми). Всё.
    Работает для любого числа рядов, хоть для триллиона :) Только потребуется быстрое возведение в степень.
    Но это будет число способов построить стену. Если имелось в виду число наборов кирпичей (сколько может быть кирпичей 3x1 и сколько 4x1), то надо подумать, как сделать проще всего.
    Ответ написан
  • Как разделить "пик" функции на два простых пика?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Сумма двух парабол - это тоже парабола. Как и сумма любых двух многочленов - многочлен той же степени.
    Возможно, график удастся представить в виде суммы двух нормальных распределений:
    f(x)=a1*exp((x-b1)^2/c1)+a2*exp((x-b2)^2/c2).
    Получается 6 неизвестных. Записываете функцию F(a1,b1,c1,a2,b2,c2)=sum((f(x_i)-y_i)^2) и ищете её минимум. Например, методом градиентного спуска.
    Ответ написан
    1 комментарий
  • Какая математика нужна GameDev'у?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Ведь игры это не обязательно 3D-графика?
    В зависимости от типа игр могут потребоваться:
    - вся математика, до которой сможете дотянуться
    - комбинаторика
    - теория вероятностей
    - теория графов
    - начала искусственного интеллекта
    - матан, диффуры и теоретическая механика
    - вообще ничего, кроме программирования
    Ответ написан
    Комментировать
  • Знаете ли вы хороший сервис по изучению математики?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Игра в Евклида почему-то закрылась. Есть вот такой задачник: sciencevsmagic.net/geo/# но он, судя по всему, не о том. Но если поискать "interactive geometry problems", то много чего выдаёт, можно покопаться в результатах.
    Ответ написан
    1 комментарий
  • Как использовать метод Гаусса для итерационного метода Ньютона?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Итак, у вас есть система: F(X)=0. В точке X=(x1,x2,...,xn) её матрица Якоби равна J, а значение F(X)=Y. Шаг метода Ньютона с обратной матрицей выглядел бы как
    X'=X-J-1Y.
    Обозначим dX=J-1Y. Тогда J*dX=Y. А это - линейная система из n уравнений. Её действительно проще решить методом Гаусса, чем искать обратную матрицу и умножать на вектор. Так что находите dX и вычитаете из X.
    Ответ написан
    Комментировать