В каких областях программирования знание математики полезно? [закрытый]

Я очень доволен kdesvn - интегрируется очень хорошо с завоевателем, во многом как trortousesvn с Windows Explorer, и поддерживает большую часть функциональности tortoisesvn.

, Конечно, Вы извлечете выгоду из этой интеграции при использовании kubunto, и не человечности.

28
задан 6 revs, 3 users 93% 31 January 2012 в 15:35
поделиться

38 ответов

Компьютерная графика . ​​

Это все матричное умножение, векторные пространства, аффинные пространства, проекции и т. Д. Много-много алгебры.

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

40
ответ дан 28 November 2019 в 02:14
поделиться

Примеры, которые я лично закодировал:

  • написал простая видеоигра, в которой один космический корабль стреляет лазером по другому кораблю. Чтобы узнать, находится ли корабль на пути лазера, я использовал базовую алгебру y = mx + b, чтобы вычислить, пересекаются ли пути. (Я был ребенком, когда делал это, и был весьма удивлен, что кое-что, чему учили на классной доске (алгебру), можно применить к компьютерному программированию.)
  • расчет остатков по ипотечным кредитам и график погашения с помощью логарифмов
  • анализ выбора покупателя путем вычисления комбинаторики
  • тригонометрии для моделирования поведения объектива камеры
  • Преобразования Фурье для анализа цифровых музыкальных файлов (файлов WAV)
  • анализа фондового рынка со статистикой (линейная регрессия)
  • с использованием логарифмов для понимания обходов двоичного поиска, а также экономия места на диске при использовании упаковки информации в битовые поля. (Я не вычисляю логарифмы в реальном коде, но я выясняю их во время «проектирования», чтобы увидеть, возможно ли вообще заморачиваться кодированием.)

Ни в одном из моих проектов (пока) нет требуемых тем, таких как вычисления, дифференциальные уравнения или матрицы. Я не изучал математику в школе, но если проект требует математики, я просто ссылаюсь на свои учебники по математике, а если я застрял, я ищу в Google.

Отредактировано для добавления: Я думаю, что для некоторых людей более реалистично иметь Задачи программирования мотивируют к изучению определенных математических предметов. Другим нравится математика как таковая, и они могут выучить ее заранее, чтобы применить к будущим задачам программирования. Я из первого типа. Например, я изучал логарифмы в старшей школе, но не понимал их силы, пока не начал заниматься программированием, и внезапно мне показалось, что они появляются повсюду.

Для некоторых людей более реалистично иметь задачу по программированию, которая мотивирует изучение определенных математических предметов. Другим нравится математика как таковая, и они могут выучить ее заранее, чтобы применить к будущим задачам программирования. Я из первого типа. Например, я изучал логарифмы в старшей школе, но не понимал их силы, пока не начал заниматься программированием, и внезапно мне показалось, что они появляются повсюду.

Для некоторых людей более реалистично иметь задачу по программированию, которая мотивирует к изучению определенных математических предметов. Другим нравится математика как таковая, и они могут выучить ее заранее, чтобы применить к будущим задачам программирования. Я из первого типа. Например, я изучал логарифмы в старшей школе, но не понимал их силы, пока не начал заниматься программированием, и внезапно мне показалось, что они появляются повсюду.

2
ответ дан 28 November 2019 в 02:14
поделиться

Повторяющаяся тема, которую я вижу в этих ответах, заключается в том, что это явно контекстно-зависимое .

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

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

2
ответ дан 28 November 2019 в 02:14
поделиться

Однажды я писал что-то для своего Commodore 64 (я забыл что, мне должно быть 6 лет), и я хотел центрировать текст по горизонтали на экране.

Я работал составить формулу, используя математику и метод проб и ошибок; годы спустя я буду решать такие проблемы, используя настоящую алгебру.

1
ответ дан 28 November 2019 в 02:14
поделиться

Рисование, перемещение и наведение ракет, пушек, лазеров, гравитационных бомб и прочего в этой маленькой 2-мерной видеоигре, которую я сделал: wordwarvi

Синус / косинус много используется, и их обратные (через таблицы поиска ... Я старый, хорошо?)

1
ответ дан 28 November 2019 в 02:14
поделиться

Любому сайту / приложению с географической привязкой потребуется математика. Простой пример - функция «Покажи мне все пиццы Боба в радиусе 10 миль от меня» на веб-сайте. Вам понадобится математика, чтобы вернуть широту / долготу в радиусе 10 миль.

1
ответ дан 28 November 2019 в 02:14
поделиться

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

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

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

1
ответ дан 28 November 2019 в 02:14
поделиться

Отчасти хороший программист должен быть знаком с областью, в которой вы программируете. Если вы работаете над программным обеспечением для Fidelity Mutual, вам, вероятно, потребуется знание инженерной экономики. Если вы разрабатываете программное обеспечение для Gallup, вам, вероятно, необходимо знать статистику. LucasArts ... наверное, линейная алгебра. НАСА ... Дифференциальные уравнения.

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

1
ответ дан 28 November 2019 в 02:14
поделиться

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

Объем математики, необходимый для работы вашего сотового телефона, огромен. Сделать мобильный телефон 3G с доступом в Интернет - ошеломляюще. Иногда людям нужно доказать с достаточной уверенностью, что алгоритм будет работать в большинстве случаев.

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

2
ответ дан 28 November 2019 в 02:14
поделиться

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

Явный пример: я написал редактор шейдеров и оптимизатор на основе узлов, который взял набор связанных узлов и преобразовал их в код шейдера . Чтобы найти правильный порядок вывода кода, чтобы все входные данные для определенного узла были доступны до того, как они потребовались этому узлу, требовалась теория графов.

И, как говорили другие, все, что связано с графикой, неявно требует знания линейной алгебры, преобразования координатных пространств и множество других подразделов математики. Взгляните на любой недавний технический документ по графике, особенно те, которые связаны с освещением. Интегралы? Бесконечная серия ?! Теория графов? Оптимизация обхода узлов? Да, все они обычно используются в графике.

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

1
ответ дан 28 November 2019 в 02:14
поделиться

За годы разработки веб-приложений мне не особо требовался Math API. Насколько я помню, я когда-либо использовал только Math # min () и Math # max () из Math API.

Например,

if (i < 0) {
    i = 0;
}
if (i > 10) {
    i = 10;
}

можно сделать как

i = Math.max(0, Math.min(i, 10));
1
ответ дан 28 November 2019 в 02:14
поделиться

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

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

Затем есть побитовое маскирование ...

Преобразование шестнадцатеричного числа в десятичное в уме ...

Оценка потенциальной нагрузки приложения ...

Ага, если кто-то не разбирается в математике, он, вероятно, не очень хороший программист.

2
ответ дан 28 November 2019 в 02:14
поделиться

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

13
ответ дан 28 November 2019 в 02:14
поделиться

Как инженер, я очень стараюсь придумать пример, когда я сделал не нужна математика. Та же история, когда я был аспирантом. Конечно, я не программист, но много пользуюсь компьютерами.

2
ответ дан 28 November 2019 в 02:14
поделиться

В графическом мире нужно много преобразований.
В криптографии вам нужны геометрия и теория чисел.
В AI вам нужна алгебра.
И статистика в финансовой среде.
Компьютерной теории нужна математическая теория: на самом деле почти все основатели математики.

11
ответ дан 28 November 2019 в 02:14
поделиться

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

Все приложения, которые имеют дело с деньгами, нуждаются в математике.

I не могу вспомнить ни одного написанного мною приложения, которое в какой-то момент не требовало математики.

7
ответ дан 28 November 2019 в 02:14
поделиться

Для реализации алгоритма Advanced Encryption Standard (AES) требовалось некоторое базовое понимание математики конечных полей. См. Подробности в акте 4 моего сообщения в блоге (включая образец кода).

5
ответ дан 28 November 2019 в 02:14
поделиться

Несколько лет назад у меня был проект DSP, который должен был вычислить реальное БПФ с основанием 2 и размером N в заданное время. БПФ с реальным основанием 2, поставляемое производителем, не будет выполняться за отведенное время, но их сложное БПФ размера N / 2 будет. Реальные данные легко ввести в комплексное БПФ. Получить ответы потом не так-то просто: это называется пост-плетением, или пост-расплетением, или расплетением. Выводить уравнения нетканого материала из БПФ и теории комплексных чисел было неинтересно. Переход оттуда к сильно оптимизированному коду DSP также был неинтересным.

Естественно, сигнал, который я измерял, не соответствовал размеру выборки FFT, что вызывает артефакты. Стандартное исправление - применить окно Ханнинга. Это вызывает другие артефакты. В рамках понимания (и тестирования) этого кода мне нужно было понять артефакты, вызванные окном Ханнинга,

5
ответ дан 28 November 2019 в 02:14
поделиться

Я использовал много алгебры при написании бизнес-приложений.

Простые примеры

BMI = weight / (height * height);
compensation = 10 * hours * ((pratio * 2.3) + tratio);
5
ответ дан 28 November 2019 в 02:14
поделиться

Игры и симуляторы требуют большого количества математических расчетов - гидродинамики, в частности, таких вещей, как пламя, туман и дым.

2
ответ дан 28 November 2019 в 02:14
поделиться

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

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

4
ответ дан 28 November 2019 в 02:14
поделиться

Общее мышление

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

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

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

Красота и элегантность - Это может быть аргумент, который труднее всего понять. Я обнаружил, что понятие «красота» в коде очень близко к тому, что используется в математике. Красивое доказательство - это доказательство, идея которого сразу убеждает, а само доказательство просто представляет собой последовательность выполнения следующего очевидного шага.

То же самое и с элегантной реализацией.

(Большинство математиков, с которыми я встречался, склонны помещать эффект «Ага!» В конце, а не в начале. Как и большинство элитных компьютерных фанатов).

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

Прикладные навыки

Примеры: - Отсутствие необходимости запускать calc.exe для быстрой оценки требований к памяти. - Некоторые базовые статистические данные, позволяющие определить достоверное измерение производительности по выстрелу в темноте. - вывод формулы для последовательности значений, а не их жесткое кодирование - Понимание того, что означает c * O (N log N). - Рекурсия - это то же самое, что и доказательство индуктивностью

(этот список, вероятно, будет продолжаться, если я буду активно следить за собой в течение дня. Эта часть, по общему признанию, сложнее, чем я думал. Дальнейшие предложения приветствуются;))

Где я его использую

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

5
ответ дан 28 November 2019 в 02:14
поделиться

В машинном обучении : мы постоянно используем байесовские (и другие вероятностные) модели, и мы используем квадратичное программирование в форме машин опорных векторов , не говоря уже о всевозможных математических преобразованиях для различных функции ядра . Исчисление (производные) факторы в обучении перцептрона. Не говоря уже о теории определения точности классификатора машинного обучения.

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

4
ответ дан 28 November 2019 в 02:14
поделиться

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

Есть много других ситуаций, но это это тот, который я получил от макушки. По сути, все операции, которые мы выполняем, являются математическими или, по крайней мере, зависят от математики / связаны с ней.

Вот почему так важно знать математику, чтобы иметь более четкое понимание вещей :)

Фактически в некоторых случаях много математики имеет уловил наш здравый смысл, что мы не замечаем, что используем математику для решения конкретной задачи, поскольку мы использовали ее так долго!

Спасибо

3
ответ дан 28 November 2019 в 02:14
поделиться

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

5
ответ дан 28 November 2019 в 02:14
поделиться

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

3
ответ дан 28 November 2019 в 02:14
поделиться

Я использовал Combinatorials, чтобы вставить 20 бит данных в 14 бит пространства.

3
ответ дан 28 November 2019 в 02:14
поделиться

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

5
ответ дан 28 November 2019 в 02:14
поделиться

Я использовал тонны математики в различных проектах, в том числе:

  • Теория графов для работы с зависимостями в больших системах (например, Makefile - это разновидность ориентированного графа)
  • Статистика и линейная регрессия в узких местах производительности профилирования
  • Преобразования координат в геопространственных приложениях
  • В научных вычислениях требования к проектам часто формулируются в алгебраической форме, особенно для вычислительно-интенсивного кода

И это просто не из моей головы.

И, конечно же, все, что связано с «чистой» информатикой (алгоритмы, вычислительная сложность, лямбда-исчисление), чем глубже, тем больше похоже на математику.

5
ответ дан 28 November 2019 в 02:14
поделиться

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

3
ответ дан 28 November 2019 в 02:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: