Обновить
5
1
Юлий Лапкин@lapkin25

Пользователь

Отправить сообщение

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

def c = add(a, b, carry=0):
  not a and not b =>
    carry => c = [carry]  else => c = []
  else =>
    not a => @a = [0]
    not b => @b = [0]
    a = [a' x]
    b = [b' y]
    last = (x + y + carry) % base
    new_carry = (x + y + carry) // base
    c = [add(a', b', new_carry), last]


def m = findmin(a):
  m = nil
  a =>
    run enumerate(i=a.begin):
      i < a.end =>
        *i < *m => m = i
        enumerate(i.next)
      

def sort(@a):
  a =>
    a = [x a']
    i = findmin(a')
    swap(@x, *i)
    sort(@a')


def s = sum(a):
  a =>
    a = [x a']
    s = x + sum(a')
  else =>
    s = 0


def pythagorean_table(n):
  run rows(i=1):  i <= n  =>
    run cols(j=1):  j <= n  =>
      print(i * j)
      cols(j + 1)
    print("\n")
    rows(i + 1)    

Условные конструкции обозначаются символом =>, вместо циклов - рекурсивный вызов функции-блока.

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

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

Символ * перед переменной обозначает операцию разыменования итератора.

Ключевое слово run используется для запуска функции-блока.

В языке отсутствуют операторы, прерывающие ход выполнения программы, такие как return, break, continue.

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии0

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

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

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

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

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

Теги:
Рейтинг0
Комментарии0

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

Цель - найти все оптимумы, не вычисляя производные. Пусть задано два начальных приближения a, b. Первый шаг алгоритма: найти решение линеаризованной задачи наименьших квадратов в этом направлении. В результате получится точка c. Второй шаг алгоритма: решить задачу линейного поиска относительно угла. Развернем вектор bc на такой угол, в котором значение целевой функции станет локально минимальным. Для решения этой задачи можно использовать метод парабол, если вычислить значения целевой функции при развороте вектора, скажем, на ±5° и приблизить зависимость от угла многочленом второй степени. Далее полученная точка становится вторым приближением, а второе приближение с предыдущего шага - первым.

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

Теги:
Всего голосов 4: ↑3 и ↓1+2
Комментарии0

Информация

В рейтинге
1 669-й
Зарегистрирован
Активность