Pull to refresh

Comments 149

Мне больше понравилось вот это видео, и в целом был интересен весь плейлист:

Можно ссылку текстом, пожалуйста. А то здесь белое ничто.

Да и здесь мультфильмы тоже вполне себе ничего.

Интересно посмотреть сколько кода (текста) требуется чтобы "нарисовать" такой мультфильм. Ждем статью посвященную рисованию-кодированию-creating mathematical animations!

Интересно! Надо попробовать сделать такую штуку на WPF, можно будет сравнить реализации.

UFO just landed and posted this here

ИТ без математики никуда, да.

Это смотря без какой именно области, потому что, так то, много где никуда, даже хлеба не купишь, но если брать типичный энтерпрайз и кодирование бизнес-логики, даже если это биг дата и хайлод, не такая и большая область требуется. И даже в 3д играх тоже, если ты не с нуля пишешь. Чрезмерно переоценивать требование тоже не стоит, как бы романтично не хотелось бы в это верить.

Образ мышления и способность вникать в сложные конструкции радикально отличаются у тех кто умеет и кто не умеет в матан. Те же паттерны проектирования, без которых в энтерпрайзах никуда, почему-то сложнее даются чистым гуманитариям, решившим в айти.

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

даже если в игрострое работаешь с готовыми движками понимание матриц нужно. Даже если это условный UE где высокий уровень абстракции. Высокий уровень абстракции не отменяет важность порядка перемножения этих абстракций.

Правильно вы написали - не с нуля... Вся векторная графика построена на умножении выше. 90% кодирования тоже используют в гизкоуровневоц реализации матричные операции. Архиваторы - работа с матрицами.. Вся графика - матрицы...

Просто этот код кто-то за вас уже написал...

Вы это скажите миллионам айтишникам в том числе без высшего образования (либо с высшим и каким нибудь гуманитарным) которые клепают сайт и приложения на коленке.

Ссылки на литературу и различные источники

Да, интересно как много тут людей, у которых все эти ссылки подсвечены фиолетовым?

Интересная статья, но с названием по-моему дело обстоит проще, нам нужна вот такая операция - давайте назовем её умножением матриц. А то почему бы матрицы не "умножать" по рабоче-крестьянски типа c11=a11*b11, c12=a12*b12, и т. д... )))

Не по-рабочекрестьянски, а по-адамаровски...

См. комментарий от 0:44 , если как вы будете умножать , то мы не получим из вектора X вектор Z как мы изначально хотели.

...И ничего страшного! Получим что-то другое. Я вот вовсе не хотел из вектора X получать вектор Z. ))) Я в том смысле, что в начале идет необходимость в чем-то, а потом придумывается название этому.

Так я не против . Можно умножать как угодно лишь бы такая модель нашла потом применение на практике . Традиционный метод позволяет создать наибольшее число таких математических моделей.

Все намного проще. Если бы вы учились, то начинали бы с азов. Перемножение элементов в кольцах и полях и вообще определение умножения, колец и полей. Затем работа с векторными множествами, затем работа с множествами многочленов, затем работа с множествами матриц и как опофеоз - работа с матрицами над полем/кольцом многочленов... И вот тогда вопроса почему матрицы так перемножаются - не было...

А то почему бы матрицы не "умножать" по рабоче-крестьянски типа

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

Можно определять умножение, как вам угодно. Но вот такое, как стандартно принято, обладает всякими полезными свойствами (вроде как указанного в статье вычисления матрицы комбинированного линейного преобразования). Еще эта операция обладает всякими привычными свойствами умножения (вроде дистрибутивности со сложением и ассоциативности). Поэтому именно эта операция и считается умножением. Так удобно.

UFO just landed and posted this here

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

UFO just landed and posted this here

Ну так и сложения строк как такового нет. А вот всякие алгебраические структуры по аналогии с числами привычно складывать и умножать.

UFO just landed and posted this here

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


Но сколько-нибудь распространенной операция сложения на строках не является. Потому что там аналогии со сложением чисел не получается. Ибо как произвольную строку вычесть из произвольной сторки? Именно поэтому в теории формальных языков строки конкатенируют, а не складывают. Если бы операция была похожа на сложение, его бы для удобства восприятия так и назвали.

UFO just landed and posted this here

Да, складываю. Я правда не понимаю, что к чему вы клоните? Натуральные числа — это частный случай строк? Ну тогда ваш изначальный вопрос снимается:


Зачем? Умножение строк же вам не хочется ввести?

Умножение "строк" тогда уже есть — умножение натуральных чисел.


Мое утверждение, что раз есть сложение, то логочно и умножение ввести по аналогии с числами — не опровергнуто.

UFO just landed and posted this here
Ну, получается, чтобы назвать операцию сложением, вычитать уметь не обязательно. Два произвольных натуральных числа вы вычесть тоже не можете

Ну, более чем в половине случаев — вычитать можно. Со строками же все гораздо хуже.

UFO just landed and posted this here

Что может быть проще? Строка на n-символьном алфавите - это запись натурального числа в n-ричной позиционной системе

Я тут внезапно понял, что умножение матриц — часть более общего правила: применение оператора или функции считается умножением, если только эта функция — не тригонометрическая.


Вот серьёзно, смотрите сами:


  1. f2(x) — это обычно f(f(x)), а не (f(x))2, как можно было бы подумать. А f-1(x) — это обратная функция;
  2. линейную дифуру часто записывают подставляя оператор d/dx в характеристический многочлен. И наоборот, практики часто характеристический многочлен объясняют как подстановку лямбды вместо оператора дифференцирования в левую часть уравнения;
  3. и традиция в лямбда-исчислении записывать вызовы функций без скобок тоже прекрасно сюда вписывается.

Угу. Мне вот очень не нравится, что умножением иногда называют операции, в которых А*В != В*А. Назвали бы как-то иначе. Ну не знаю, трансплюкированием.

В общем случае операция может быть как коммутативна (А*В = В*А), так и не коммутативна (А*В != В*А). В том числе и операция умножения. Просто мы привыкли что в поле действительных чисел умножение коммутативно, но в общем случае это может быть не так.

По мне очень математически описано, чтобы понять статью надо врубиться в кучу новых терминов.

Тогда как на самом деле матрица исторически это запись системы уравнения

a11x1+a12x2+...=b1

a21x1+...=b2

...

Отсюда и правила по которым матрица A преобразует вектор X в вектор Y.

Пусть ещё есть матрица B , которая преобразует вектор Y в вектор Z.

Соответственно матрица A*B должна быть такая, чтобы сразу же преобразовать вектор X в вектор Z. Собственно всё.

"матрица исторически это запись системы уравнений".

Исторически - да, но сегодня в матрицы закладывается совершенно иной смысл, доводящий их до математической абстракции, в которой любое действие может иметь смысл (но его ещё нужно как-то понять). Без понимания сути выполняемых действий математика превращается в набор предметов, что-то вроде "линейной магии, высшей магии и основ магического анализа". Конечно, хочется понимать, что же ты делаешь, но, к сожалению, для непосвящённых математика всё больше превращается в религию с мистерией формул...

Предлагаю вам понять комплексные числа и заодно мнимые числа вроде корня квадратного из -1.

Математика - это прежде всего игра ума, абсолютная полная абстракция. А уже потом продукт этой самой игры ума приспосабливают для использования в каких-то практических целях. Но никак не наоборот.

UFO just landed and posted this here

Ну обычные числа описывают предметы(здесь и сейчас). А комплексные - чаще всего процессы. Например колебания шарика на пружине можно представить как движение по кругу по двумя осям - действительной координате x. И мнимой координате y , которая пропорциональна скорости v.

То есть мы сложный случай(процесс) выразили как простой(набор координат).

"А уже потом продукт этой самой игры ума приспосабливают для использования в каких-то практических целях. Но никак не наоборот. " - ну почему Ньютон разработал дифференциальное исчисление конкретно под механические задачи. И в дальнейшем, в математике был например "Спор о струне" и т.д.

"Математика - это абстрактная физика" (с)
Математика пока от физика отделиться не может. Даже комплексные числа, которые родились как абстракция потом оказались вполне физичными и, например, использовались для расчета купола цирка в Самаре.

UFO just landed and posted this here

Вообще с матрицами можно делать все что угодно, с учетом того, что все функции раскладываются в ряд Тейлора.

Функция Вейерштрасса не раскладывается в ряд Тейлора. функция модуля не раскладывается в ряд Тейлора в окрестности нуля. Вейвлеты высоких порядков не раскладываются в ряд Тейлора. Дельта-функция Дирака не раскладывается в ряд Тейлора в окрестности нуля.

Попроще есть варианты — e(-1/x2) в нуле тоже не раскладывается ряд Тейлора, хотя не имеет разрывов.

? в окрестности нуля она прекрасно раскладывается в ряд Тейлора: exp(-1/(x*x)) = 0 (самый-самый простой и короткий ряд Тейлора- полином нулевого порядка!).

в окрестности нуля x- бесконечно малая первого порядка, 1/x2- бесконечно большая второго порядка, exp(-1/(x*x))- бесконечно малая бесконечного порядка. в окрестности нуля ряд Тейлора нулевой, для любого eps>0 существует dx>0 такая, что |f(dx)-0|<eps.

Не, ну если 0 рассматривать как ряд — то да, формально раскладывается. Но всё-таки степенной ряд — это ряд со степенями, задачей которого состоит аппроксимация функции. Из бесконечного ряда нулей исходную функцию не восстановишь. По вашей логике тогда и функция Вейерштрасса, и функция модуля, и даже функция знака тоже должны быть разложимы.

да, надо строже обращаться с терминами.

функция разложима в ряд Тейлора в некоторой окрестности- это значит, что для функции этот ряд сходится и сходится именно к этой функции (с абсолютной точностью). как, например, summ(x^k)=1/(1-x)- это точное представление на интервале (-1..1)

есть функции, которые с любой наперед заданной точностью на интервале могут быть аппроксимированы рядом Тейлора, но при этом ряд не сходится в точности к этой функции (как приведенная вами экспонента- она не аналитическая в нуле, хотя и абсолютно дифференцируема в нуле). Такие функции аппроксимируются частичным рядом Тейлора с погрешностью О(dx^k):

f(x)= summ( a.i*x^i)[i=0..k-1] + O(x^k)

а есть функции, которые и не раскладываются, и не аппроксимируются рядом Тейлора.

Модуль недифференцируем в нуле, и потому в нуле в ряд Тейлора не раскладывается и не аппроксимируется (нет полиномиальной функции, имеющей погрешность порядка О(dx^k)- только О(1)), а в окрестности любой другой точки- раскладывается в ряд (то есть, может быть точно представлен рядом Тейлора). ф. Вейерштрасса вообще нигде не дифференцируема, и потому ни в какой точке не раскладывается в ряд Тейлора и не аппроксимируется рядом Тейлора, вейвлеты высоких порядков имеют локальную область поддержки, за пределами которой они нулевые, и потому раскладываются в ряд Тейлора в любой точке за пределами области поддержки, и не раскладываются и не аппроксимируются в ряд Тейлора ни в какой точке в области поддержки, ну и дельта-функция, как и модуль, разложима везде, кроме нуля.

Я так и не понял, о какой разнице вы мне толкуете. Функцию модуля аналитически можно описать как sqrt(x^2) и по свойствам они ничем не будут отличаться. Её можно продифференцировать совершенно обычным стандартным образом — и получится функция x/sqrt(x^2), которая ничем не будет отличаться уже от функции знака (кроме точки 0, которая у функции знака принудительно доопределяется нулевым значением). Функция Вейерштрасса определяется в спектральном домене, и её в этом же спектральном домене можно совершенно легально продифференцировать. То, что после этого она перестанет сходиться во временном домене — так это проблема схождения, а не существования производной.

О_о. матанлиз все-таки строгая довольно дисциплина, там формулировки вылизаны до блеска, поэтому я и обратил Ваше внимание на разницу между " ф-я разложима в ряд Тейлора", "ф-я может быть аппроксимирована рядом Тейлора, но ряд не сходится к функции" и "ф-я не разложима и не может быть аппроксимирована рядом Тейлора"- это три сильно разных случая, и любой из них может реализовываться на всей оси, на отрезке или в точке.

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

Рассуждения про "проблема схождения, а не существования производной"- тоже весьма туманны, ряд Тейлора завязан на производную чуть менее, чем полностью, а производная- это предел отношения приращения функции к приращению аргумента в точке. У функции Вейерштрасса этот предел отсутствует в любой точке, поэтому ряд Тейлора для нее вообще нельзя построить, она не разложима и не может быть аппроксимирована ни с каким порядком точности, кроме нулевого. При чем тут "временные домены"? Дельта-функция или единичный скачок тоже во временном домене разложимы, только даже во временном домене для них ряды сходятся только в энергетической норме (L2), а в классическом смысле (в норме L1)- не сходятся, и ни дельта, ни скачок в норме L1 ни рядом Тейлора, ни рядом Фурье не аппроксимируются ни в какой окрестности нуля.

Вы мне тут рассказываете про понимание математики, которое было ещё до появления комплексных чисел, не говоря уже об интеграле Фурье и функций Дирака с Хевисайдом. Математика 20-го века позволяет оперировать дискретными функциями как непрерывными, заодно расширяя понятия производной, позволяя ей иметь дробные порядки. С преобразованием Фурье функции Дирака тоже никаких проблем нет, степенной ряд соотносится с рядом Фурье через очевидную замену переменной, а сам степенной ряд можно рассматривать как частный случай z-преобразования, который допускает ещё и отрицательные значения степеней. Вся радио- и цифровая электроника строится на этом матаппарате.

Все мои рассуждения про сходимость ряда Тейлора в L1-норме остаются верными и для комплекснозначных функций комплексных аргументов (ибо теорема об аналитическом продолжении). Я прекрасно знаю, что ряд Фурье для единичного скачка элементарно вычисляется, но также я знаю, что в L1-норме он не сходится ни в вещественных числах, ни в комплексных- модуль погрешности ряда всегда остается порядка 9% от амплитуды скачка :-), и функция Вейерштрасса недифференцируема нигде, хотя и легко представима, как Вы выразились, во временном домене (как и вейвлеты Добеши, кстати). Собственно, поэтому я Вам и говорю, что в матанализе надо строго с терминами себя вести- там таких нюансов на каждом шагу по ведерку.

Интересно, а как у вас цифра 9% получилась? Mathematica кстати ДиракДельту в степенной ряд вполне успешно раскладывает. Очень сложный выбор конечно, кому верить больше.

А в дискретном виде с ограниченным спектром у ДиракДельты так и вообще конкретное значение появляется, а именно 1.

Высота выплеска не зависит от количества членов ряда Фурье, меняется только ширина этого выплеска, поэтому в энергетической норме ряд сходится, но в L1 норме- погрешность ряда Фурье всегда фиксирована и примерно равна 9% величины скачка (9% вверх и 9% вниз, суммарный размах 18%).

Когда Вы говорите про "математика раскладывает"- то у меня опять возникает вопрос- что значит "раскладывает"? Строит аппроксимацию функции? да ради Бога, стройте наилучшее приближение в любом базисе методом наименьших квадратов, хоть в полиномиальном (на выбор- Тейлора, Чебышева, Лежандра, изысысках типа Эрмита или еще каких, лишь бы базис), хоть в Фурье, хоть в вейвлетах. но это будет аппроксимация- с погрешностью, которую надо будет оценивать в какой-то норме, а если "раскладывает"- то значит, что полученный ряд сходится строго к функции и погрешность в любой норме будет нулевая. Ограниченный ряд Фурье, сколько бы членов ряда я не брал, всегда имеет максимальное отклонение в 9% от амплитуды скачка, поэтому надо четко себе представлять, что в конкретном контексте значит "сходится" и что значит "раскладывается". это такие довольно заумные теоретические вопросы, но если мы заговорили про ф.Вейерштрасса- то она сама по себе изврат над логикой- и требует всей этой зауми.

Ммм, давно не видел маткад, первая любовь можно сказать. ДиракДельта в нуле определена как бесконечность, а так вы только Гребень Дирака получить сможете (потому что тригонометрическим рядом только периодические функции описать можно, если помните). Ну а с конечным количеством членов вы получаете ничто иное, как periodic-sinc функцию, которую даже в замкнутом виде выразить можно:


А здесь свёртка гребёнки с sinc-функцией через аналитическое преобразование Фурье (чтобы показать, что результаты совпадают, да и в википедии об этом не написано):



В пределе промежуточные пульсации усреднятся в ноль даже без нормирования по амплитуде пиков.
Хм. То есть разница между 1 и бесконечностью, равно как и разница между Дираком и Гребнем Дирака не считается достаточно строгой, чтобы её принимать во внимание? Я был лучшего мнения о некоторых из.

напоминаю: аккуратнее с определениями, я говорил про 9% для единичного скачка, вот их и нарисовал. хотя, неявно предполагал, что раз уж мы про Фурье-ряды, то естественно для функции, заданной на интервале (или периодической), а не на всей оси.

Ну да, аккуратнее. Вы говорили про единичный скачок, а нарисовали sinc. Стремиться к единичному скачку можно и другими путями:



Вот я сейчас в непонятках. у меня единичный скачок- это f(x)={0,X<0; 1,X>=0}. и его я и рисовал. а у Вас что? И где Вы у меня нашли sinc- решительно не понимаю.

Вы рисовали этот скачок через тригонометрический ряд с ограниченным количеством членов. Скачок у вас не получался, получалась периодическая sinc функция. Вы замерили максимальное отклонение от нуля, получили 9% и сделали вывод, что в пределе он к Дираку сойтись не может. А он сойдётся, о чём и было написано по ссылке.

А у меня всё тот же тригонометрический ряд (из 9-и членов), только с другими коэффициентами, подбирая которые можно задать максимальное отклонение вплоть до нуля независимо от количества членов ряда. И ваше наблюдение «Ограниченный ряд Фурье, сколько бы членов ряда я не брал, всегда имеет максимальное отклонение в 9% от амплитуды скачка» уже не будет соответствовать истине.

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

Мы таки обсуждали дельту Дирака, а не ступеньку Хэвисайда (строгость формулировок предполагает использование общепринятых названий, а не жаргонизмов). Ступенька очевидно получается почленным интегрированием ряда дельты, и её тоже можно получить в виде конечного ряда с контролируемой амплитудой пульсаций.

22 составляющих:
(1/604462909807314587353088)(302231454903657293676544 + 380259520458125181974100 Sin[x] + 115230157714583388477000 Sin[3 x] + 57114078171576114288600 Sin[5 x] + 30596827591915775511750 Sin[7 x] + 16182322148613232381770 Sin[9 x] + 8147742620280788332080 Sin[11 x] + 3830135419790114173200 Sin[13 x] + 1659725348575716141720 Sin[15 x] + 656483657144553037800 Sin[17 x] + 234952045714892666160 Sin[19 x] + 75430073048252791440 Sin[21 x] + 21522167581702562775 Sin[23 x] + 5400107502318097569 Sin[25 x] + 1176494009219629100 Sin[27 x] + 219071298268482660 Sin[29 x] + 34156277687021490 Sin[31 x] + 4335973006951950 Sin[33 x] + 430337170614780 Sin[35 x] + 31313515533300 Sin[37 x] + 1485384711195 Sin[39 x] + 34461632205 Sin[41 x])

1000 составляющих:
  1. в моем ВУЗе Функция Хевисайда и функция единичного скачка на физико-техническом факультете были общепринятыми синонимами, у электронщиков ее еще часто называют функцией включения, и это тоже общепринятое название, а никакой не жаргонизм.

  2. как угодно получайте этот единичный скачок, но если Вы получаете его частичным рядом Фурье, то первая пульсация всегда будет 9%, при любом количестве членов. +9, -5, +3.3, -2.5, +2.1, -1.8. Прямо ряд напряжений микросхем получился. :-) не знаю, как работает Ваша система рисования и почему она сглаживает кривые, но мой маткад и аналитические рассчеты (и мои, и чужие) дают именно такие значения в пучностях самой высокочастотной гармоники. и это, в общем-то, общеизвестные вещи в узком кругу ограниченных людей.

Система рисования тут не при чём. Эти коэффициенты получены строго математически, и именно эта строгая математичность гарантирует монотонность и не превышение 1 по модулю. Другой вопрос, что за это приходится расплачиваться чуть меньшей скоростью нарастания и это тоже общеизвестные вещи для узкого круга людей, имеющих дело с фильтрацией сигналов. Там же исходник функции приложен специально, чтобы каждый мог проверить её лично.

Нет, ряд Фурье (а обсуждается тут именно он, а не какой-то произвольный ряд) не гарантирует ни монотонности, ни непревышения 1 по модулю.

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

а, разобрался :-) ну да, Вы построили свою аппроксимацию, а какое она отношение к Фурье имеет? что она тоже из синусов? но так она у Вас от Фурье-то отличается очень даже. у Фурье 25й коэффициент 0,025, а у Вас- 25й коэффициент- 8,934е-6. а для ряда из тысячи членов какой 25й коэффициент?

0.037 примерно. При увеличении n коэффициенты будут сходиться к идеальным по спирали. Тут знание конкретных значений гармоник не принципиально (я на них просто разложил для наглядности), достаточно просто уверенности в конечности спектра аппроксиманта.
Тут Фурье сам по себе не при чём. Тут при чём, как преобразуется дискретный сигнал в аналоговый при передаче на идеальный дискретно-аналоговый преобразователь (DAC) согласно теореме Котельникова (Найквиста-Шеннона у буржуев). Она предсказывает, как будет выглядеть этот сигнал на осциллографе. Так вот, при передаче значений {...,0,0,0,1,0,0,...} мы получим sinc-функцию вне зависимости от частоты дискретизации:


Результат может вызвать когнитивный диссонанс у незнакомых с теорией экспериментаторов. Но чтобы непрерывный аналоговый сигнал соответствовал ожидаемому, нужно передаваемые на ЦАП значения дискредитировать самостоятельно от непрерывной функции с ограниченным спектром, например так:
дискредитировать->дискретизировать, долбанная автозамена.

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

Это не теоретические рассуждения, а голимая практика. Есть проект, который может синтезировать, анализировать, преобразовывать и измерять сигналы. Есть функции, которые эти задачи должны выполнять. Есть критерии точности, которым нужно соответствовать. Есть теоретические и практические ограничения, которые нельзя обойти при всём желании. О том, что нельзя просто так взять и получить меандр — написано в миллионах книг. О том, как получить его оптимальную аппроксимацию написано уже поменьше. По запросу «Digital Alias-free Signal Synthesis/Processing» и «Equiripple Approximation» находится достаточное количество вполне современных публикаций.
Возможно не совсем очевидно, что при попытке разложения будет получаться 0+0·x+0·x2+0·x3+0·x4+…

Эдак можно и про функцию f(x)=0 написать, что она в ряд Тейлора не раскладывается...

А где у вас в определении функции 0 x, то бишь аргумент? Так можно любое число назвать функцией. Ну и матрицей тоже можно назвать, 1x1. Ну и тензором тоже можно, чё мелочиться.

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


Точно так же как можно составить вектор, матрицу или тензор из одного элемента.


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

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

Кому должна?


Функция, она же отображение — это правило, сопоставляющее каждому элементу из одного множества элемент из другого множества. Чем правило "любому элементу сопоставляется 0" хуже любого другого?

Должна по определению. Правило «любому элементу сопоставляется 0» хуже любого другого тем, что оно необратимо и по смыслу мало отличается от выражений типа 0+0*0=0 с помощью которых доказываются равенства 2*2=5. И мне кажется, что графики моей и вашей функций таки заметно различаются, в отличие от разницы между abs(x) и sqrt(x*x), которую та же Mathematica регулярно использует в вычислениях. Так-то функция модуля для комплексного числа и определена через квадратный корень.
Должна по определению.

Согласно общепринятому определению — не должна.


Правило «любому элементу сопоставляется 0» хуже любого другого тем, что оно необратимо

Обратимость — свойство биекции, от функции в общем случае не требуется быть обратимой.


И мне кажется, что графики моей и вашей функций таки заметно различаются

Так что, всё-таки функция, если у неё даже график построить можно?

UFO just landed and posted this here
Товарищи минусующие. Я правильно понял, что определение модуля комплексного числа через корень — ошибочно, определение действительного числа как частного случая комплексного с нулевой мнимой составляющей — ошибочно, а умножение на ноль обратимо? Тогда расскажите пожалуйста, как правильно, а заодно и как правильно делить на ноль, чтобы получить исходное число или функцию.
UFO just landed and posted this here
Мне кажется более методологически неправильно превращать математику в религию в ущерб её прямому назначению — решение задач. Если моя, чисто практическая задача звучит как «найти минимум двух комплексных чисел» — то её нужно решить вне зависимости от того, определён порядок у комплексных чисел или нет. Или если во время численных вычислений требуется деление на ноль — это тоже нужно как-то решать. Это только в частных случаях типа sin(x)/x можно захардкодить проверку на abs(x)<eps и подсунуть заранее посчитанное значение.

Я не вижу никакой проблемы отталкиваться от действительных чисел. Пространство интуитивно воспринимается скорее как непрерывное, а не дискретное, и понимание числа как «позиция» вполне согласуется с жизненным опытом. Согнутая в форме лука палка вполне согласуется с понятием «функция», которая непрерывна изначально, а не появляется из бесконечного количества бесконечно малых элементов. Комплексные числа вполне логично воспринимаются при переходе с линейки на миллиметровую бумагу. Часы со стрелками наглядно показывают умножение комплексных чисел, а заодно и переход на модульную арифметику, где количество возможных чисел ограничено.
UFO just landed and posted this here

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

UFO just landed and posted this here
Истории про появление и исчезновение мнимой единицы как особенного числа разве недостаточно?

Из чуть менее банального можно про косинус вспомнить, который не может больше 1 по модулю. Затем взять выражение cos(3*arccos(x)) и разложить его в ряд, получим -3·x+4&middotx3. Возьмём к примеру x=2, получим 26 — очевидное противоречие с областью определения косинуса. Математик старой школы скажет, что результат некорректный и докажет это через радиусы сходимости и всё такое. Математик новой школы предположит что результат корректный и придумает теорию функций комплексного переменного, в которой все элементарные функции всюду определены, а гиперболические функции это частные случаи тригонометрических.

Только вот cos(3*arccos(x)) не равен 26 при x=2 даже в комплексных числах...

а, и правда, обсчитался я...

Парадокс брадобрея кстати разрешается элементарно, а заодно показывает ограниченность бинарной логики.

UFO just landed and posted this here
Математично — через троичную логику очевидно. Произвольное записанное выражение вовсе не обязано иметь смысл и не будет непротиворечивым только из-за использования математических символов. Выражения типа 2=3 за парадоксы не выдаются же.
UFO just landed and posted this here
Я вижу проблему ещё на этапе формулирования этого парадокса. Не нравится 2=3, ну ок, a=b истина или ложь? Можно ли скрестить троичную логику с теорией множеств от Бурбаки — не знаю, и даже если нет — не пониманию, почему это делает её неприменимой в данном случае.

Этот парадокс появился же не просто так — кто-то взял и записал его словами. Вероятно всего для того, чтобы потроллить друзей-философов. Математического смысла как постановки задачи у него нет изначально.
UFO just landed and posted this here
Если чуть отойти от математики к информатике, то высказывание это не просто логическое умозаключение — это порция информации, передаваемая из пункта A в пункт Б. В процессе этой передачи она может претерпевать искажения и терять часть информации. Поэтому вполне вероятно, что высказывание может потерять смысл при попытке не очень грамотного человека (брадобрея) выразить свою свою мысль и ввести в ступор пытающего её осмыслить человека.

Если возвращаться к парадоксам в стиле «это утверждение ложно» — то там существует рекурсия, для которой не предусмотрено условие выхода. Я не думаю, что это как-то связано со строгостью формулировок.
UFO just landed and posted this here

Компилятор из описания var x=0 скорее выведет тип int, чем указатель на функцию возвращающую 0 типа real.

А из описания var f = x => 0 он выведет скорее функцию чем тип int. Но при чём тут вообще компилятор?

А затем оптимизатор эту функцию вообще выкинет, как и все ссылки на неё. Вот и получится, что определить функцию вы попытались, но в исходном коде её почему-то не оказалось. При чём тут компилятор? Ну я хз, что на форуме математиков делают программисты.

Оптимизатор может что угодно выкинуть, включая программу целиком. Это вообще не аргумент.

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

давайте функциональный анализ вспомним- что там такое есть "функция"- а там это однозначное соответствие элементов множества "А" элементам множества "Б". f(x)=0 ставит в однозначное соответствие любому элементу (x) из множества чисел (каких-то, наверно R, но может и C или поля какого-нибудь вообще) соответствующий элемент (0) из множества чисел (тоже каких-то, или поля или вектор или еще чего, не суть! главное, что в этом множестве есть нулевой элемент, удовлетворяющий определению нулевого элемента), то есть, является функцией, с чем Вас и поздравляю. и матрицой 1*1 и вектором единичной размерности и тензором нулевого ранга тоже является (тензором, потому что для нее правила преобразования при переходах из одной системы координат в другую вполне себе выполняются).

Давайте. Давайте определим множество функций-целых констант:
f0()=0,
f1()=1,
f2()=2,
f3()=3…
Как-то долго получается, да и боюсь ни бумаги, ни времени ни хватит. Может, всё-таки f(x)=x, где х принадлежит целым, попроще будет?

А так конечно — любую функцию можно представить в виде 0+f(x), 0 это и есть ряд, а значит и любая функция разложима.

И напоследок: что из множества объектов {0,0,0} число, что функция, а что степенной ряд? Просто лично я нули различать не умею.

Множество вещественных или комплексных функций — больше чем континуум. Откуда у вас в принципе взялась идея попытаться записать их все на бумаге?


И напоследок: что из множества объектов {0,0,0} число, что функция, а что степенной ряд? Просто лично я нули различать не умею.

Вот именно по этой причине я исходно и написал f(x)=0, а не просто 0.

Это было ваше предложение, а не моё — описывать константы как множество функций. Ну и — а чё так мало аргументов? Пишите сразу f(x,y,z,a,b,c,d,e,f,g,...)=0. Перебирать все доступные коллекции заранее зная, что необходимых элементов в нём нет — тоже норм, ведь это делает ваши программы и быстрее, и компактнее.

Приведите цитату где я предложил описывать константу как множество функций.


Ну и — а чё так мало аргументов? Пишите сразу f(x,y,z,a,b,c,d,e,f,g,...)=0.

Захотелось так. Захочется функцию большего числа аргументов — приведу и её, не переживайте. Да, это будет уже другая функция.

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

Вместо константы можно же вернуть функцию?

int zero(int argument) {return zero(argument);}

Вроде всё правильно написал.

Не вполне понял что именно вы пытаетесь сделать и причём тут эта цитата.

Я написал программу вычисления константы через функцию по вашей методике вычисления констант. Заменил константу на функцию. А цитату привёл по вашей просьбе «Приведите цитату где я предложил описывать константуы как множество функций» прямо в предыдущем сообщении применительно к другому примеру о замене множества разных функций одной, но с дополнительным аргументом.
Я написал программу вычисления константы через функцию по вашей методике вычисления констант.

Это не методика вычисления констант, поскольку я нигде не предлагал их вычислять.


Заменил константу на функцию.

Зачем?


А цитату привёл по вашей просьбе «Приведите цитату где я предложил описывать константуы как множество функций

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


Вы правда не видите разницы между словами "сопоставить" и "описать"?

А вы правда не видите разницы между «константа» и «функция, значение которой не зависит от аргумента»?
Функции можно вкладывать друг в друга, константы — нельзя.

Разумеется, я вижу между ними разницу. Потом и говорю о сопоставлении их друг другу.

Сопоставить только значения можно, свойства сопоставить нельзя.

О чём вы вообще? И почему нельзя?

и матрицой 1*1 и вектором единичной размерности и тензором нулевого ранга тоже является

Это уже излишняя вольность. Да, матрицы 1x1 и числа можно сопоставить, то это не одно и тоже. Например, на матрицах определен детерминант, на числах же — нет. Грубо говря,[1] — это матрица, а 1 — это число. Но нельзя их считать одними и теми же объектами. Все-таки типы не зря придумали, это помогает.

UFO just landed and posted this here
Да. В моей реализации dataflow-диаграмм (на c++ и c#) константа — это тоже функция. Но только потому, что там вообще всё — функция. Если например рассматривать константу «пи» как выражающую отношение длины окружности к длине её диаметра — то она равна 3.14… только в случае окружности на плоскости. В общем случае, для произвольной поверхности — эти значения будут отличаться.

Что касается аппроксимации произвольной функции многочленом через разложение в степенной ряд — это прежде всего алгоритм, гарантирующий совпадение n-первых производных. Получить аппроксимацию функции многочленом можно и другими способами, типа МНК, гарантирующей минимизацию площади отклонения. Более того, если не ставить задачу интерполяции многочлена через n точек как поиск значения конкретных значений у коэффициентов многочленов — её сложность можно снизить с n^3 (вычисление через обратную матрицу) до n (вычисление через рациональный многочлен с бариоцентрическими координатами).
UFO just landed and posted this here
Что такое площадь отклонения? Площадь — численная характеристика двумерной геометрической фигуры, которая показывает размер этой фигуры. Для функций считается через интеграл. Отклонение по площади — это разница между площадью функции и площадью аппроксимирующей функции. Чем она меньше, чем точнее аппроксимирующая функция соответствует исходной. При нуле соответственно имеем полное соответствие функции и её разложению в степенной ряд.
UFO just landed and posted this here
Есть много специальных функций, считать которые из определения не только затратно, но и численно неустойчиво. Гаммы, беты, эллиптические интегралы и всё такое. Как оптимизировать аппроксимант выбора особо нет — либо МНК, либо минимизация максимального отклонения, что в разы мучительнее и через умножение матриц не решается.
UFO just landed and posted this here

Это вопрос не ко мне, я в матрицах не силён. Обхожусь без них пока, гиперкомплексные числа все необходимые задачи покрывают.

Не надоедает все мои комментарии подряд минусить? Для этого много ума не надо, равно как и для цитирования определений из википедии. Убедительнее будет решить проблемы, с которыми я сам справиться не смог, ну или показать Ваши решения, для которых не нашлось ответа в интернетах.

Как функция, не определённая в нуле, может не иметь в нём разрыва?


Обычный устранимый разрыв первого рода.

Ну ваще офигеть, насколько аккуратно все математические значки и типографика в статье! Там и A одного стиля, и A другого стиля, с подвыподвертом. И ни одной орфографической ошибки не видно. Большущий респект. Видно, что человек сидел и полировал отображение, наслаждаясь процессом, как скульптор наслаждается вырезанием чего-то из дерева или камня. В наш век повального тяп-ляпства это как глоток свежего воздуха. Вот чем занимались математики 400 лет до того, как изобрели программировали (и до того, как додумались, что это можно не только читать, но и ЗАПУСКАТЬ) - полировали математические обозначения и язык.

Вот чем занимались математики 400 лет до того, как изобрели
программировали (и до того, как додумались, что это можно не только
читать, но и ЗАПУСКАТЬ) - полировали математические обозначения и язык.

Вообще-то 99% всей математики, которая нужна в физике, программировании, да и вообще почти везде, изобрели (или открыли, кому как больше нравится) задолго до программирования. Так что нет, не только обозначения и язык.

Причем не математики открыли, а физики и инженеры. 😏

Ну как, какой-нибудь Эйлер или Гаусс вполне себе математики. Но грань была не такая четкая, как сейчас, это да.

Собственно еще лет 40 назад были физико-математические факультеты. Физики были теми же математиками с некоторыми особенностями.
UFO just landed and posted this here

Это не по теме: мой старенький honor 10 lite спотыкается каждый раз на второй гифке (кажется, про умножение векторов). Что Вы туда запихнули?)

Для полноты информации приведу ссылку на недавнюю новость о достижениях AI в умножении матриц: AI уменьшило число операций при перемножении матриц 4x4 с 49 до 47 действий:

https://science.slashdot.org/story/22/10/05/2049228/deepminds-game-playing-ai-has-beaten-a-50-year-old-record-in-computer-science

Вообще задача о том как именно и в каком порядке производить действия при перемножении матриц - интересна и нетривиальна.

Супер. Хотел автору как раз подсказать, что большие матрицы так не умножаются, про Штрассена напомнить, а тут уже и Штрассен не актуален. ИИ, и конкретно Альфа(го, тензор и другие) - вещь конечно, хотя становится страшновато.

Больше всего понравился самый первый мультфильм, только слишком большая скорость воспроизведения там - не успеваешь рассмотреть-проверить!

Остальные мультфильмы тоже прикольные! Неплохо было бы иметь статью о том как такие мультфильмы программируются. Или они рисуются, или как этот процесс называется???

Я думаю очень популярная статья бы получилась!

А есть что-нибудь про оптимизации и алгоритмы умножений матриц, которые используются в gpu и cpu?

Сталкивался что умножение в шейдере каждый раз дает разные результаты с погрешностью, если включить оптимизацию. Для этого есть специальные директивы precise и invariant.

Разрешите позанудствовать, просто не могу проигнорировать. Дело в том, что во всех известных мне определениях, вектор не может быть ни строкой ни столбцом. Строка или столбец - это матрица размера 1xN или Nx1, но вектора не обладают никаким свойством "строчности" или "столбцовости". А то, что в статье упоминается как умножение на "вектор-столбец" или "вектор-строку" есть ни что иное как умножение просто вектора на матрицу или матрицы на вектор (и из-за отсутствия коммутативности это - две разные операции). Как следствие, например, запись x A x где x - вектор, а A - матрица, является корректной, в то время как часто встречающаяся попытка транспонировать вектор перед умножением x^T A x - избыточной, потому что транспонирование никак вектор поменять не может. Давайте уважать свойства векторов :)

в то время как часто встречающаяся попытка транспонировать вектор перед умножением x^T A x — избыточной, потому что транспонирование никак вектор поменять не может

Скорее всего, это идёт уже из программирования, где многие библиотеки для работы с матрицами определяют вектор как матрицу 1xN, тем самым делая некорректной операцию x A.

Нет, это идёт из подхода к линалу, когда вектор определяется через матрицу. Вот буквально, фраза из учебника: "вектор-столбцом называется матрица размера..."


Что, к слову, не так глупо как может показаться. Настоящий вектор (т.е. элемент векторного/линейного пространства) вы на матрицу никак не умножите, умножать на матрицу можно только конструкцию, составленную из его координат в некотором базисе. А как такую конструкцию вводить и называть — дело десятое, она глубоко вторична, как по отношению к векторам, так и по отношению к матрицам.

Тот самый случай, когда материал легко читается благодаря добавлению качественной графики! Спасибо автору и мое уважение! В закладки и статью и автора, жду новых статей.✅

Sign up to leave a comment.

Articles