Ответы пользователя по тегу Математика
  • Доказательство простого факта. Математический анализ, равномерная непрерывность. Как?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Я так понял в условии на самом деле говрится, что для любого достаточно маленького z (0 < z < Z0) функциональный ряд равномерно сходится на (a+z, b-z)

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

    Пусть есть a<x0<b. Возьмем z = min(Z0, (x0-a)/2, (b-x0)/2). Используем данное, что ряд равномерно сходится на отрезке (a+z,b-z), а значит F на этом отрезке непрерывна. Значит F непрерывна в точке x0 (ведь мы так z подобрали, чтобы x0 в этом интервале лежала). Мы взяли любую точку x0 из (a,b), а значит F непрерывна на всем интервале.

    Edit: Если же в условии тупо дана равномерная сохдимость на каком-то интервале (c,d) (a < c < d < b), а не для сколь угодно близкого к (a,b) вложенного интервала, то, очевидно, что непрерывности там никакой и нет.
    Ответ написан
    Комментировать
  • Как задать плотность вероятностей перехода λij системы из состояния Si в Sj?

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

    Допустим, телефон, когда он сядет, где-то за пару часов в среднем втыкают в разетку. Значит плотность перехода из S4 в S2 должна быть такой, чтобы среднее время до совершения осбытия было где-то пару часов. Процесс, видимо пуассоновский, раз у вас такие формулы, значит время до перехода будет распределенно показательно, значит среднее время равно 1/лямбда. Остюда лямбда = 1/<среднее время перехода>, или 1/2.

    Заряжается телефон где-то за 3 часа - значит переход между разряжен->выключен происходят с интенсивностью 1/3.

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

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

    В примере:

    60/100 = 3/5
    30/100 = 3/10
    10/100 = 1/10

    Знаменатели 5,10 и 10. НОК(5, 10, 10) = 10.

    Поскольку задача с процентами, то все знаменатели до сокращения - 100. После сокращения может быть только число с максимум двумя двойками и двумя пятерками. Поэтому можно чуть проще руками посчитать двойки и пятерки в знаменателях.

    Пусть n2 равно 1, если есть число в процентах, не делящееся на 2, и равно 0 - иначе.
    n4 - тоже для 4, n5, n25 - тоже для 5 и 25.

    Тогда ответ 2^(n2+n4)*5^(n5+n25).

    В примере есть число не делящееся на 4 (10 и 30), поэтому n4=1. Все четные - поэтому n2=0.
    n5 = 0, потому что все делится на 5. n25=1 - все не делится на 25. Поэтому ответ 2^(0+1)*5^(0+1) = 2*5=10

    edit:

    Вы обновили вопрос - проценты у вас могут быть нецелые. Например 3.71%

    Тогда забейте на 2 и 5 - проще через НОК считать. Опять же сократите дроби и возьмите знаменатели:
    3.71% = 371/10000
    3.72% = 372/10000 = 186/5000 = 93/2500
    и т.д.
    Ответ написан
  • Как найти следующий корень уравнения, используя метод простых итераций?

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

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

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

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

    Когда подберете параметры, функция будет вычислятся кусочно. Сначала найдите к какому отрезку относится текущее время (или тупо циклом или набором if-else, или, если сделаете отрезки одинаковым количеством часов, то можно поделить время на длину отрезка и округлить вниз, чтобы получить номер отрезка). Потом вычислите значение нужного сплайна, что будет просто вычислением полинома второй или третьей степени.

    Ну, или можете просто задать нексолько ключевых значений, и проинтерполировать полиномом лагранжа. Правда тут сложно будет заставить его идти именно как вам хочется. Через точки-то он точно пройдет, но вот между ними может иметь какие-то левые пики и изгибы. Так что придется поэксперементировать. Можно поиграться, например, в wolframalpha.com (введите "interpolating polynomial calculator", потом задайте значения функции в точках и получите и график и формулу. Ссылку дать не могу, qna ссылки на wolfram банит за одно со спамерскими ссылками по ошибке).
    Ответ написан
    Комментировать
  • Как найти сумму N векторов, взятых по одному из N множеств векторов, ближайшую к заданному вектору?

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

    Поэтому симплекc метод тут никак не поможет. Это задача квадратичного программирования, в лучшем случае.

    Тут или полный перебор, или какой-нибудь метод отжига придется делать. В одномерном случае при небольших числах можно какое-нибудь динамическое программирование использовать, но это вряд ли ваш случай.
    Ответ написан
    Комментировать
  • Как сгенеририовать СЛАУ (система линейных алгебраических уравнений) больших размеров?

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

    В C++ есть генератор случайных чисел - функция rand(). Гуглите ее, она вернет случайное целое число. Если вам нужны вещественные и возможно отрицательные коэффициенты, то эти целые числа можно использовать для получения вещественных. Гуглите "C++ случайное вещественное число".
    Ответ написан
  • Сколькими ходами кубик Рубика возвращается в изначальное положение?

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

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

    Если какая-то проверка где-то не сошлась - надо вывести нет. Иначе, надо вывести да.

    Удобно это делать в виде функции возвращающей булевое значение. Тогда в конце ее пишите return true. А внутри каждая проверка возвращает false, если она провалилась.
    Ответ написан
    Комментировать
  • Как найти общую формулу?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    По идее надо бы задать формулу кусочно для разных n, но можно все собрать в одну формулу как-то так:
    (2-n)(3-n)/2*f1(n) + (n-1)(3-n)*f2(n) + (n-1)(n-2)/2*f3(n)


    Далее f1(n) = b-a+1

    Для нахождения f2 и f3 можно сдвинуть левую границу вправо до первого числа нужной четности, а правую границу - влево. Потом уже зная, что 2 крайних числа в промежутке между a' и b' берутся, то фромула будет (b'-a')/2+1.

    Для такого сдвига надо будет смотреть на четность a и b и четность n.

    В итоге:
    f2(n) = ((b-b%2)-(a+a%2))/2+1
    f3(n) = ((b-1+b%2)-(a+1-a%2))/2+1

    Можно f2 и f3 объединить используя n%2 и операцию xor: если четность a или b не такая же как у n, то надо границу сдвигать (вычесть/прибваить 1). Иначе надо вычесть/прибавить 0. xor как раз равен 1 при неравнестве и 0 при совпадении четностей.

    f23(n) = ((a+(a%2 ^ n%2))-(b-(b%2)^(n%2)))/2+1

    Итоговая формула:
    (2-n)(3-n)/2*(b-a+1) + ((n-1)(3-n) + (n-1)(n-2)/2)*(((a+(a%2 ^ n%2))-(b-(b%2)^(n%2)))/2+1)


    А еще, если пользоваться битовыми функциями, то можно вместо (n-1)(3-n) + (n-1)(n-2)/2 использовать (n & 2)/2, в вместо первой скобки (1 - (n & 2)/2)

    Формула правильно возвращает 0, если чисел в промежутке нет. Правда, она не работает, если a > b.
    Ответ написан
    Комментировать
  • Как запрограммировать построение мультипликативной группы по неприводимому многочлену?

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

    А дальше, чтобы найти мультипликативную группу, придется делать полный перебор. Перебирайте все полиномы (они у вас, видимо, над полем по модулю 2, их 2^n. Можно их перебирать как биты у целого числа). Потом умножайте на текущий полином в цикле, помечая в массиве уже полученные ранее полиномы. Если получили все 2^n элементов - вы нашли нужную группу. Если наткнулись на уже ранее полученный полином раньше времени - текущий кандидат не подходит.
    Ответ написан
    Комментировать
  • Как решить задачу о распределении?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Если есть какой-то уникальный id у заказа, и они равномерно и плотно растут (например, имеют порядковые номера), то можно смотреть на последнюю цифру. 0-2 отдавать фирме с 30% заказов, 3-9 - второй фирме. Или для равномерности отдавать второй фирме цифры 1,3,4,6,7,8,0 Если таких номеров нет, то можно генерировать случайное число для заказа и смотреть на последнюю цифру там. В среднем будет соотношение 30/70 примерно.
    Ответ написан
    Комментировать
  • Существует ли такой алгорим?

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

    Есть такой алгоритм. В общем случае он выглядит так:

    Read(a);
    Read(b);
    DoSomething(a, b);
    Write(a+b);


    Перед выводом суммы чисел есть какой-то алгоритм, который что-то делает. Если он виснет, то и весь алгоритм виснет. Если он не виснет - то весь алгоритм выдаст сумму. Но вот определить, а виснет ли заданная программа в общем случае - нельзя.

    Поэтому 100% существует такой DoSomething, про который формально доказать что он не виснет нельзя. Иначе бы проблема остановки решалась.
    Ответ написан
    4 комментария
  • Нахождение определенного интеграла модуля косинуса?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Проблема в том, что вот эта вот ваша формула - она работает только на отрезке, где sinx*sgn(cos x) непрерывна. А она имеет разрывы в точках, где косинус меняет знак. Вы ее, видимо, подобрали методом тыка. И действительно, если взять ее производную в каждой точке, то получается |cos x|. Но эту производную не взять в точках, где косинус меняет знак, ведь там разрывы. Это не первообразная, хотя бы потому, что первообразная должна быть непрерывна. поэтому формула определенного интегралла тут и не работает.
    Ответ написан
    2 комментария
  • Откуда следует этот предел?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    u ограничена. h стремится к нулю. Поэтому u*h - стремится к нулю.
    Ответ написан
    Комментировать
  • Откуда такой переход? интегрируемость монотонной функции?

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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Не очень понятно задание, что там за матрицы даны, но в общем случае делается так: найдите матрицу перехода из старых координат в новые. Это будет S^(-1). Чтобы получить преобразование в новом базисе, надо взять координаты, перейти в старый базис, применить перобразование (А) и перейти назад в новый базис. Т.е. ответ - произведение трех матриц: S*A*S^(-1)
    Ответ написан
    Комментировать
  • Как вычислить сумму бесконечного ряда, используя смешанный способ и общую формулу для вычисления члена ряда. Как найти рекуррентную формулу?

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

    Пусть f(x) - ваш ряд. Тогда f'(x) = sum (-1)^n x^(2n-2) / (2n+1)

    Чтобы совсем избавиться от знаменателя надо бы, чтобы степень была 2n+1. Можно этого добиться, домножив все на x^3. Потом можно опять взять производную.

    (x^3 f'(x))' = sum (-1)^n x^2n = sum (-x^2)^n = 1/(1+x^2)

    Теперь назад проинтегрировав это можно получить:
    x^3 f'(x) = arctg(x)+C

    При x=0 слева 0 - значит C=0.

    f'(x) = arctg(x) / x^3

    Отсюда можно найти f'(x): Зайдите на wolframalpha и введите integrate arctg(x)/x^3 dx (не могу дать прямую ссылку с запросом на wolfram, потому что мат-фильтр почему-то срабатывает на ссылку и не дает отправить ответ).

    Чтобы найти константу, придется подставить, например, x=1 и найти сумму ряда a_n = (-1)^n/(4N^2-1). Это какой-то известный сходящийся рад, похоже. Опять, посмотрите на wolframalpha, введите там sum (-1)^n/(4*n^2-1), n=0 to infinity. В итоге получится, что там константа тоже 0.

    Вот и получится, что f(x) =- (x^2 * arctan(x) + arctan(x) + x) / (2x^2)
    Ответ написан
    Комментировать
  • Как найти неизвестные параметры функции, зная ее значения?

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

    Аналитически, как в методе наименьших квадратов, приравнять производные по n и k к 0 похоже не очень получается. Придется использовать какой-то численный метод минимизации функции. Например, градиентный спуск или метод ньютона. Если похоже, что функция имеет множество локальных минимумов, то будет работать что-то более хитрое, как например, метод отжига.
    Ответ написан
    Комментировать
  • Как разложить поворот вокруг произвольной оси на повороты вокруг ортов СК объекта?

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