Что такое def в математике
Производная как смысл жизни или что такое дифференциал(d)
Пролог:
Эта одна из статей серии «Производная как смысл жизни», сначала я хотел сделать одну огромную статью про почти все темы по дифференцированию, но я передумал и сделаю несколько статей, возможно так даже будет легче для людей которые пытаются найти конкретную для себя тему.
Начало
Для начала лучше ознакомиться со статьей о самой прозводной (скоро будет). Ну если вы ознакомились, или уже были ознакомлены то идем дальше.
Как мы уже знаем формула записи производной выглядит так:
Мы должны понимать, что если мы уберем предел, то к f'(x) прибавиться коофициент, я ее называю «неточность».
Так же вполне логично, что при Δx->0, β->0, так как чем меньше мы делаем разницу между x и x₀, тем меньше значение «неточности»(в статье о производной об этом подробнее рассказано).
Теперь выразим из этого равенства приращение функции(Δy):
И на этом следует пока остановиться и рассмотреть график.
Смотрим дифференциалу в лицо
Расмотрим такой график:
Как мы знаем производная в точке равняется значению тангенса угла в этой точке, то есть f'(x)=tg(α). Так что давайте обозначим производную, ну и приращения которыми она ограничена.
Зная это введем обозначение на графике:
Вернемся к равенству
BD = Δy и мы знаем, что BD = BC + CD, а значит Δy = BC + CD, где BC мы назвали главной линейной частью приращения функции(dy), следовательно Δy = dy + βΔx.
Из формулы мы понимаем, что dy=f'(x)Δx.
Хорошо, мы определили чему равен дифференциал функции, а что же тогда является дифференциалом независимой пременной функции(аргумента).
Графически мы видим, что Δx никак не разделена касательной, то есть Δx это полное приращение функции, а значит dx = Δx.
Так же мы можем найти по формуле: dx = (x)’Δx = 1*Δx = Δx
И зная, что dy = f'(x)dx, мы можем выразить производную: f'(x)=dy/dx.
Немного пределов
Добавим с левой части и с правой предел
В самом начале мы сказали, что если β->0, то Δx->0 и наборот, а значит:
Зная, что f'(x)Δx = dy, мы делаем вывод, что:
Научный форум dxdy
Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки
Правила форума
В этом разделе нельзя создавать новые темы.
Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе «Помогите решить/разобраться (М)».
Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.
Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.
Чем «равно по определению» отличается от «равносильно»?
Последний раз редактировалось Denis Russkih 20.09.2013, 23:37, всего редактировалось 2 раз(а).
Прошу извинить за бредовый вопрос, но вот начал читать Зорича и завис на этом моменте. 🙂
Скажем, там приводится такое равенство по определению:
Так вот, как я ни старался, так и не смог постичь, зачем конкретно нужен выпендрёж с дополнительным значком присваивания. 🙂 Почему нельзя просто написать:
Очевидно, специальный символ «равно по определению» использован не просто так, но какой именно глубокий смысл в этом сокрыт. Значок нарисовали просто для того, чтобы показать, в каких случаях его можно использовать. Или тут что-то большее?
Далее на той же странице написано:
Здесь Зорич символом «равносильно» не побрезговал. 🙂 Но почему так? Почему бы не использовать и здесь «равенство по определению»?
Я долго пытался понять, что же такого есть в одном высказывании, чего нет в другом (придумал сразу несколько версий, одна другой причудливее), и в итоге понял, что мой мозг не справляется с обработкой этой задачи. 🙂
Такое впечатление, что это никак не объяснимо с логической точки зрения, а относится к чему-то сакральному, что называют «математической культурой» и передают в ходе живого общения.
Поскольку я математику пытаюсь изучать самостоятельно, по книгам, просто как хобби, то с «математической культурой» у меня напряг. 🙂
Я, конечно, пытался гуглить, но только ещё больше запутался. Оказалось, существует ещё и символ
который означает «равносильно по определению»! Это слишком для моего разума! 🙂
Заслуженный участник |
Последний раз редактировалось venco 21.09.2013, 00:04, всего редактировалось 1 раз.
Заслуженный участник |
Последний раз редактировалось provincialka 20.09.2013, 23:57, всего редактировалось 1 раз.
А вот в вашем примере с равенством множеств, наоборот. Само равенство, видимо, задается (определяется) другим утверждением (например, через элементы множеств). Равносильность же показывает, что это определение можно записать и с помощью знака включения.
Кстати, такой простой знак, как «равно» может иметь самый разный смысл. Например, постоянную функцию можно описать равенством . Но равносильно ли оно равенству
?
Заслуженный участник |
Последний раз редактировалось Denis Russkih 21.09.2013, 00:15, всего редактировалось 5 раз(а).
Большое спасибо за ответы! Буду обдумывать.
Или так:
\stackrel <\rm def>
Последний вариант самый короткий.
Прошу прощения, коряво вставил текст. 🙂 Сейчас поправил пост.
Заслуженный участник |
Спасибо за подсказки! Про stackrel я нашла, просто написала неправильно, без .
Прошу прощения за некоторый уход от темы, этот простой значок меня давно занимает. Может, создать тему про него? Где-нибудь в «свободном полете».
Ещё раз спасибо за подробные ответы! Сейчас как следует изучил их, и вроде бы ситуация стала проясняться. 🙂
Значит, «равно по определению» используется лишь при введении новых понятий. Но для чего же тогда нужно «равносильно по определению»? Или это одно и то же?
Вы мимоходом взорвали мой мозг. 🙂 Честно говоря, не знаю, как правильно ответить на этот вопрос. (В смысле, правильными словами.) Вообще, для меня ещё со школы является загадкой, почему в одних случаях можно ставить «равносильно», а в других допускается только «следовательно». Где бы об этом почитать?
Заслуженный участник |
В программах используются другие знаки, чем в математике, это вызвано в том числе скудностью доступных для набора обозначений, и необходимостью автоматического разбора компилятором.
А фраза «Пусть «, имхо, ровно это и делает: вводит определение значка
для употребления ниже по тексту.
Последний раз редактировалось Denis Russkih 21.09.2013, 01:38, всего редактировалось 2 раз(а).
Ещё по поводу символов «равносильно» и «следовательно». Как я понимаю, выбор значка определяется тем, является ли преобразование выражений тождественным?
Например, можно написать:
Но при этом нельзя писать:
(Потому что область определения функции меняется, .)
А можно ли записать:
Вроде бы можно. Или надо писать как-то иначе?
(Понимаю, что детские вопросы, но вот остались у меня такие пробелы в знаниях, не разобрался толком в этом вопросе в своё время.)
Заслуженный участник |
Последний раз редактировалось venco 21.09.2013, 01:47, всего редактировалось 1 раз.
Не нужно. Его и не используют. Используют «равносильно».
А можно ли записать:
Заслуженный участник |
А можно ли записать:
Заслуженный участник |
Последний раз редактировалось Munin 21.09.2013, 03:09, всего редактировалось 2 раз(а).
Иногда определения выражаются теми же словами, что и равносильность: «одно и то же», «тождественно», Это можно считать вольностью языка. Но никогда не бывает наоборот: не называют определением простую равносильность. (Иногда бывает, что какое-то соотношение можно принять за определение, хотя выше использовалось иное определение.)
Огромное спасибо за детальные разъяснения!
Наконец что-то начало складываться. 🙂 После стольких лет сумбура в моей голове впервые забрезжил свет. По крайней мере, в том, что касается этих значков. 🙂
Раньше я просто старался всюду ставить «следовательно», потому что заметил, что если поставить вместо
, то к этому относятся терпимее, чем когда ставишь
вместо
. 🙂
Лишь сейчас я наконец решился прояснить этот вопрос, потому что не хочется оставлять в тылу такие «силы противника». 🙂
Заслуженный участник |
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей
Функции и их аргументы
В этой статье я планирую рассказать о функциях, именных и анонимных, инструкциях def, return и lambda, обязательных и необязательных аргументах функции, функциях с произвольным числом аргументов.
Именные функции, инструкция def
Определим простейшую функцию:
Инструкция return говорит, что нужно вернуть значение. В нашем случае функция возвращает сумму x и y.
Теперь мы ее можем вызвать:
Функция может быть любой сложности и возвращать любые объекты (списки, кортежи, и даже функции!):
Функция может и не заканчиваться инструкцией return, при этом функция вернет значение None:
Аргументы функции
Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произвольным числом аргументов, функции с позиционными и именованными аргументами, обязательными и необязательными.
Функция также может принимать переменное количество позиционных аргументов, тогда перед именем ставится *:
Функция может принимать и произвольное число именованных аргументов, тогда перед именем ставится **:
В переменной kwargs у нас хранится словарь, с которым мы, опять-таки, можем делать все, что нам заблагорассудится.
Анонимные функции, инструкция lambda
Анонимные функции могут содержать лишь одно выражение, но и выполняются они быстрее. Анонимные функции создаются с помощью инструкции lambda. Кроме этого, их не обязательно присваивать переменной, как делали мы инструкцией def func():
lambda функции, в отличие от обычной, не требуется инструкция return, а в остальном, ведет себя точно так же:
5 способов вычисления чисел Фибоначчи: реализация и сравнение
Введение
Программистам числа Фибоначчи должны уже поднадоесть. Примеры их вычисления используются везде. Всё от того, что эти числа предоставляют простейший пример рекурсии. А ещё они являются хорошим примером динамического программирования. Но надо ли вычислять их так в реальном проекте? Не надо. Ни рекурсия, ни динамическое программирование не являются идеальными вариантами. И не замкнутая формула, использующая числа с плавающей запятой. Сейчас я расскажу, как правильно. Но сначала пройдёмся по всем известным вариантам решения.
Код предназначен для Python 3, хотя должен идти и на Python 2.
Для начала – напомню определение:
Замкнутая формула
Решаем квадратное уравнение:
Откуда и растёт «золотое сечение» ϕ=(1+√5)/2. Подставив исходные значения и проделав ещё вычисления, мы получаем:
что и используем для вычисления Fn.
Хорошее:
Быстро и просто для малых n
Плохое:
Требуются операции с плавающей запятой. Для больших n потребуется большая точность.
Злое:
Использование комплексных чисел для вычисления Fn красиво с математической точки зрения, но уродливо — с компьютерной.
Рекурсия
Самое очевидное решение, которое вы уже много раз видели – скорее всего, в качестве примера того, что такое рекурсия. Повторю его ещё раз, для полноты. В Python её можно записать в одну строку:
Хорошее:
Очень простая реализация, повторяющая математическое определение
Плохое:
Экспоненциальное время выполнения. Для больших n очень медленно
Злое:
Переполнение стека
Запоминание
У решения с рекурсией есть большая проблема: пересекающиеся вычисления. Когда вызывается fib(n), то подсчитываются fib(n-1) и fib(n-2). Но когда считается fib(n-1), она снова независимо подсчитает fib(n-2) – то есть, fib(n-2) подсчитается дважды. Если продолжить рассуждения, будет видно, что fib(n-3) будет подсчитана трижды, и т.д. Слишком много пересечений.
Поэтому надо просто запоминать результаты, чтобы не подсчитывать их снова. Время и память у этого решения расходуются линейным образом. В решении я использую словарь, но можно было бы использовать и простой массив.
(В Python это можно также сделать при помощи декоратора, functools.lru_cache.)
Хорошее:
Просто превратить рекурсию в решение с запоминанием. Превращает экспоненциальное время выполнение в линейное, для чего тратит больше памяти.
Плохое:
Тратит много памяти
Злое:
Возможно переполнение стека, как и у рекурсии
Динамическое программирование
После решения с запоминанием становится понятно, что нам нужны не все предыдущие результаты, а только два последних. Кроме этого, вместо того, чтобы начинать с fib(n) и идти назад, можно начать с fib(0) и идти вперёд. У следующего кода линейное время выполнение, а использование памяти – фиксированное. На практике скорость решения будет ещё выше, поскольку тут отсутствуют рекурсивные вызовы функций и связанная с этим работа. И код выглядит проще.
Это решение часто приводится в качестве примера динамического программирования.
Хорошее:
Быстро работает для малых n, простой код
Плохое:
Всё ещё линейное время выполнения
Злое:
Да особо ничего.
Матричная алгебра
И, наконец, наименее освещаемое, но наиболее правильное решение, грамотно использующее как время, так и память. Его также можно расширить на любую гомогенную линейную последовательность. Идея в использовании матриц. Достаточно просто видеть, что
А обобщение этого говорит о том, что
Два значения для x, полученных нами ранее, из которых одно представляло собою золотое сечение, являются собственными значениями матрицы. Поэтому, ещё одним способом вывода замкнутой формулы является использование матричного уравнения и линейной алгебры.
Так чем же полезна такая формулировка? Тем, что возведение в степень можно произвести за логарифмическое время. Это делается через возведения в квадрат. Суть в том, что
где первое выражение используется для чётных A, второе для нечётных. Осталось только организовать перемножения матриц, и всё готово. Получается следующий код. Я организовал рекурсивную реализацию pow, поскольку её проще понять. Итеративную версию смотрите тут.
Хорошее:
Фиксированный объём памяти, логарифмическое время
Плохое:
Код посложнее
Злое:
Приходится работать с матрицами, хотя они не так уж и плохи
Сравнение быстродействия
Сравнивать стоит только вариант динамического программирования и матрицы. Если сравнивать их по количеству знаков в числе n, то получится, что матричное решение линейно, а решение с динамическим программированием – экспоненциально. Практический пример – вычисление fib(10 ** 6), числа, у которого будет больше двухсот тысяч знаков.
n = 10 ** 6
Вычисляем fib_matrix: у fib(n) всего 208988 цифр, расчёт занял 0.24993 секунд.
Вычисляем fib_dynamic: у fib(n) всего 208988 цифр, расчёт занял 11.83377 секунд.
Теоретические замечания
Не напрямую касаясь приведённого выше кода, данное замечание всё-таки имеет определённый интерес. Рассмотрим следующий граф:
Подсчитаем количество путей длины n от A до B. Например, для n = 1 у нас есть один путь, 1. Для n = 2 у нас опять есть один путь, 01. Для n = 3 у нас есть два пути, 001 и 101. Довольно просто можно показать, что количество путей длины n от А до В равно в точности Fn. Записав матрицу смежности для графа, мы получим такую же матрицу, которая была описана выше. Это известный результат из теории графов, что при заданной матрице смежности А, вхождения в А n — это количество путей длины n в графе (одна из задач, упоминавшихся в фильме «Умница Уилл Хантинг»).
Почему на рёбрах стоят такие обозначения? Оказывается, что при рассмотрении бесконечной последовательности символов на бесконечной в обе стороны последовательности путей на графе, вы получите нечто под названием «подсдвиги конечного типа», представляющее собой тип системы символической динамики. Конкретно этот подсдвиг конечного типа известен, как «сдвиг золотого сечения», и задаётся набором «запрещённых слов» <11>. Иными словами, мы получим бесконечные в обе стороны двоичные последовательности и никакие пары из них не будут смежными. Топологическая энтропия этой динамической системы равна золотому сечению ϕ. Интересно, как это число периодически появляется в разных областях математики.