Советы по написанию математических уравнений в коде - PullRequest
4 голосов
/ 01 августа 2011

Я разработчик-самоучка (около 3 лет), и я хочу улучшить свои навыки разработки, научившись записывать математические уравнения в код.

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

Например, как можно начать понимать такие уравнения: http://en.wikipedia.org/wiki/Manhattan_distance и написать их в коде?

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

Ответы [ 4 ]

11 голосов
/ 01 августа 2011
I can read parts of them (multiplication, division, decimals, sigma, variables)
but I have troubles when going off to implement them in code.

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

Давайте возьмем в качестве примера манхэттенское расстояние между двумя точками в двумерном пространстве с фиксированной (x, y) системой координат.Вы хотите написать функцию, которая получит две точки и даст вам манхэттенское расстояние между этими точками.Давайте воздержимся от использования объектно-ориентированных концепций и предположим, что у вас есть четыре входные переменные:

x1, the x-coordinate of the first point
y1, the y-coordinate of the first point
x2, the x-coordinate of the second point
y2, the y-coordinate of the second point

Так что наша функция будет выглядеть как

function mdistance (x1, y1, x2, y2) {
    ???
}

Что должно быть внутрифункция (тело функции) выглядит?Теперь мы проверяем математическую формулу, которую хотим переписать как код.Версия Википедии (в разделе «Формальное описание») рассматривает случай произвольных измерений - мы тоже можем это сделать, но пока мы рассматриваем только 2-мерный случай.Таким образом, их n равно 2, насколько нам известно, и мы хотим вычислить |x1 - x2| + |y1 - y2|.Это результат потери сигма-нотации в пользу выражения, описывающего сумму с двумя слагаемыми.Но мы до сих пор не выяснили, как |a - b| можно выразить в компьютерном коде.

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

function mdistance (x1, y1, x2, y2) {
    return bars(x1, x2) + bars(y1, y2);
}

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

Так как же bars() должно бытьопределены?Ну, |a - b| просто выражает идею "абсолютное значение a - b".PHP имеет встроенную функцию для абсолютного значения действительного числа;это abs().Итак, мы определяем bars() следующим образом:

function bars (a, b) {
    return abs(a - b);
}

Теперь наша функция mdistance() будет работать так, как мы хотим.

0 голосов
/ 01 августа 2011

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

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

0 голосов
/ 01 августа 2011

Ну, вы можете записать математические вычисления в свой код, используя математические API. Например, в Java есть математика для этой цели. Или вы можете написать свои собственные методы (функции), которые будут в состоянии выполнять эти операции ... давайте посмотрим на оценку в размещенной ссылке. Первое вычисление: сумма абсолютных значений разности пи и ци (р с индексом i). пи и ци вы можете хранить их внутри массива. Затем для абсолютного значения вы можете написать свою собственную функцию, которая может выполнять эту операцию, например (я использовал синтаксис в стиле C / C ++):

int absoluteValue(int number){
     if (number < 0) return number = number * (-1);
     else return number;
}

И для suma: простой цикл for (). Если у вас есть более сложные математические операции, конечно, их сложнее реализовать. Вам просто нужно написать на ПК пошаговые инструкции, как выполнить операцию. Точно как у вас, когда вы что-то рассчитываете.

Надеюсь, это было полезно :)

0 голосов
/ 01 августа 2011

Использование sin(),cos(),sqrt().

Для векторов вам нужно array(), а для суммы вам нужен цикл (for / foreach). Длина вектора = длина массива, используйте count.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...