2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2, 3  След.
 
 Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение16.04.2021, 15:19 
Как в Матлабе реализовать функцию, которая определена только в узлах произвольной решетки? Например, в узлах обычной квадратной решетки с шагом $\pi$$$.

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 14:07 
Что означает реализовать функцию, которая определена в узлах квадратной решетки с шагом $\pi$? Что эта функция должна возвращать?

-- Сб 17.04.2021 13:09:39 --

Что известно о квадратной решётке с шагом $\pi$?

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 14:14 
Я бы спросил, что эта функция должна принимать. Не у всех решёток есть какая-то естественная нумерация. Если конечно не имеются в виду лишь квадратные, прямоугольные и прочие решётки вида $a_1 \mathbb Z \times \ldots \times a_n \mathbb Z$. И если вдруг функция является просто ограничением какой-то функции $f_0$ с $\mathbb R^n$ на решётку, то почему не брать сразу ту $f_0$.

-- Сб апр 17, 2021 16:27:43 --

Если вопрос как раз в том, что бы именно она могла принимать — как кодировать точки решётки, — то есть например одно универсальное и достаточно очевидное (по определению решётки!) решение: пусть решётка порождается векторами $\mathbf v_1, \ldots \mathbf v_n$, тогда будем представлять каждую её точку $\mathbf v_0 + m_1 \mathbf v_1 + \ldots + m_n \mathbf v_n$ координатами $(m_1, \ldots, m_n)$. Набор координат будет в общем случае не единственным, но для каждой конкретной решётки можно установить для общего случая, какие из наборов задают одну и ту же точку. Для другого набора порождающих векторов координаты у точек станут другими, но опять же пересчитываться в старые они могут достаточно просто (нам надо только выразить новые векторы через старые).

Полезность этого способа в том, что если у точек $A, B, C, D$ координаты $a_i, b_i, c_i, d_i$ и $\overrightarrow{A B} + \overrightarrow{A C} = \overrightarrow{A D}$, то $a_i + d_i = b_i + c_i$, ну и вообще прибавление $m \mathbf v_i$ к точке решётки — прибавление $m$ к координате номер $i$.

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

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 16:05 
GAA в сообщении #1514739 писал(а):
Что эта функция должна возвращать?
1 - если координаты точки лежат в узле решетки, иначе - 0.
GAA в сообщении #1514739 писал(а):
Что известно о квадратной решётке с шагом $\pi$?
Что она обычная (не повернута вокруг начала координат ни на какой угол).
arseniiv в сообщении #1514743 писал(а):
Я бы спросил, что эта функция должна принимать.
Координаты произвольной точки (лежащей на плоскости).

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 16:56 
В чём, в таком случае, сложность в реализации функции в системе Matlab? Вроде нужно выполнить простую проверку на кратность координат числу $\pi$.

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 17:00 
Да, для частного случая - квадратной решетки с постоянным шагом, это работает:
Используется синтаксис Matlab M
function [res] = isknot(x,y,s)
% обычная квадратная решетка с шагом s
x=double(x);
y=double(y);
if mod(x,s)==0 && mod(y,s)==0
    res=1;
else
    res=0;
end
 

Но если шаг не постоянный, а задан некоторой функцией от n?

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 17:15 
При преобразовании к числам двойной точности с плавающей точкой могут возникнуть погрешности. Естественно работать с символьным представлением. Реализация, конечно, зависит от задачи, которую Вы не сформулировали.

Что есть $n$?

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 18:22 
GAA в сообщении #1514785 писал(а):
При преобразовании к числам двойной точности с плавающей точкой могут возникнуть погрешности. Естественно работать с символьным представлением. Реализация, конечно, зависит от задачи, которую Вы не сформулировали.

Что есть $n$?


Да, входные аргументы у меня символьные, но код не работал правильно, поэтому я и преобразовывал их 'double'. Вот немного другой вариант (входные аргументы остаются символьными):
Используется синтаксис Matlab M
function [res] = isknot(x,y,s)
% обычная квадратная решетка с шагом s
if double(mod(x,s))==0 && double(mod(y,s))==0
    res=1;
else
    res=0;
end
 

Так правильно? Я не знаю как обойтись без 'double' и получить, например, логическую 1 или 0...

$n$ есть порядковый номер вертикальной (горизонтальной) прямой, пересечение которой с соответствующей ортогональной прямой является соответствующим узлом решетки.

Задача заключается в поиске такого узла обычной квадратной решетки с произвольным (не обязательно с постоянным) шагом, через который проходит луч X и который находится ближе всего к началу координат либо получению ответа, что заданный луч не проходит ни через один узел заданной решетки.
Луч X имеет начало в точке (0,0) и проходит через произвольную точку A.

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 19:46 
maximkarimov в сообщении #1514766 писал(а):
1 - если координаты точки лежат в узле решетки, иначе - 0.
Так это не функция, которая определена только на узлах; она определена всюду и есть индикатор этой решётки.

maximkarimov в сообщении #1514782 писал(а):
Но если шаг не постоянный, а задан некоторой функцией от n?
О, тогда это уже не та решётка, о которой лично я по крайней мере думал. С одной стороны задача скучнее (раз решётка, судя по всему, «ортогональная»). С другой стороны хуже.

maximkarimov в сообщении #1514794 писал(а):
Я не знаю как обойтись без 'double' и получить, например, логическую 1 или 0...
Если шаг рациональный, mod должен работать, а если иррациональный, то убедитесь что это вам точно надо, потому что точная арифметика для работы с некоторыми видами иррациональных чисел конечно есть, но это сложно, и при использовании матлаба это как раз символьные вычисления могут в какой-то мере обеспечить, но…

maximkarimov в сообщении #1514794 писал(а):
$n$ есть порядковый номер вертикальной (горизонтальной) прямой, пересечение которой с соответствующей ортогональной прямой является соответствующим узлом решетки.
Координаты узлов решётки равны в точности $(f(i), f(j))$ для произвольных целых $i, j$? Или они равны $(F(i), F(j))$, где $F(m) = \sum_{k = 0}^m f(k)$? Или что-то третье?

maximkarimov в сообщении #1514794 писал(а):
Задача заключается в поиске такого узла произвольной квадратной решетки (не обязательно с постоянным шагом), через который проходит луч X и который находится ближе всего к началу координат либо получению ответа, что заданный луч не проходит ни через один узел заданной решетки.
Луч X имеет начало в точке (0,0) и проходит через произвольную точку A.
Тогда вам не нужна функция-индикатор, совсем. Она вам не поможет. И если $f$ произвольная, то останется скорее всего просто перебирать узлы решётки по одному в квадранте, в котором лежит луч, в порядке, примерно совпадающем с удалением узлов от начала координат, например перебирать $(i, j)$ в порядке $$(0, 0), \quad (1, 0), (0, 1), \quad (2, 0), (1, 1), (0, 2), \quad (3, 0), \ldots, (0, 3), \quad (4, 0), \ldots$$ — и для общего случая вы никогда не сможете опровергнуть прохождение луча через хоть какой-то узел.

Но если функция $f$ достаточно хорошая, можно как-то решить уравнение. Как бы вы например решили это для обычной регулярной решётки? Достаточно просто: $s (m_1, m_2) = x A$ для какого-то неизвестного $x$, где ищем мы наименьшее положительное из них. Тут видно, что шаг решётки $s$ не имеет значения и мы имеем решения ровно если $A_1 / A_2$ — рациональное число, и тогда $m_1, m_2$ — числитель и знаменатель соответствующей приведённой дроби. И уже для такой простой задачи мы видим, что для численного решения она плохо поставлена, если вы не знаете, какому множеству принадлежит $A$ по смыслу задачи. Если $\mathbb R^2$ без ограничений — всё пропало, ничего хорошего не будет, рациональные числа всюду плотны в $\mathbb R$ и вы не сможете написать удовлетворительный численный код.

Так что какова $f$, и каковы возможные $A$?

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 20:17 
1. Да, получается что мне удалось сформулировать лишь индикатор, но не функцию (к сожалению).
2. Шаг иррациональный (снова к сожалению).
3. Если никак не решить задачу без перебора узлов решетки, то это конечно засада((( Остается надеяться, что перебор позволит обнаружить некоторые свойства для конкретной пары <решетка, луч> (и, возможно, доказать).
4. Планирую исследовать оба типа решеток, то есть и решетки, где координаты узлов в точности равны $(f(i),f(j))$, где $i,j$ - целые, и решетки, где координаты узла определяются частичными суммами некоторого сходящегося ряда (выражаясь неформально - компактные решетки).

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 20:22 
maximkarimov в сообщении #1514818 писал(а):
1. Да, получается что мне удалось сформулировать лишь индикатор, к сожалению.
С индикатором тоже всё плохо, я просто не добавил, раз он нам в итоге не нужен. Численные проблемы, «дребезг», ну его.

maximkarimov в сообщении #1514818 писал(а):
2. Шаг иррациональный (снова к сожалению).
Можно прекрасно понять, если он исходно такой, но задачу иногда можно переформулировать, чтобы избавиться от этого — точно никак?

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

-- Сб апр 17, 2021 22:24:36 --

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

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 20:34 
arseniiv в сообщении #1514820 писал(а):
maximkarimov в сообщении #1514818 писал(а):
Но хотя бы может не произвольное иррациональное? Например квадратичная иррациональность или подобный небольшой класс.
Да, объять необъятное в планах нет!) Хочу начать с самого простого случая, а именно c квадратной решетки, которая имеет постоянный шаг $\sqrt{2}$, а там видно будет.

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 20:48 
А, погодьте, я думал, мы не про шаг, а про отношение координат $A$. А когда решётка квадратная, шаг не важен, ведь мы можем насколько-то растянуть всё пространство, и факт попадания или непопадания луча в вершину решётки не изменится (и то, в какую самую близкую к нулю вершину он попадает, в терминах её целочисленных координат из моего первого поста).

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 20:54 
maximkarimov в сообщении #1514794 писал(а):
Да, входные аргументы у меня символьные, но код не работал правильно, поэтому я и преобразовывал их 'double'.
По поводу Вашего исходного варианта функции. Пусть для простоты только одна координата.
Используется синтаксис Matlab M
function [res] = isknot0(x, s)
% обычная одномерная решетка с шагом s
x=double(x);
if mod(x,s)==0
    res=1;
else
    res=0;
end

Передадим координату отличную от узла
Используется синтаксис Matlab M
>> isknot0(sym('10000000000000001')*atan(sym('1')), pi)
ans = 1

А должны были получить 0. По аналогии можно придумать ещё примеров.
Второй вариант заведомо нерабочий (см. help).
Используется синтаксис Matlab M
x = sym('2*pi')
x = 2*pi
>> mod (x, sym('pi'))
ans = 2*pi mod pi

arseniiv в сообщении #1514810 писал(а):
Если шаг рациональный, mod должен работать...
Можно привести примеры? (Ничего разумное мне в голову не приходит при чтении этого утверждения. )

 
 
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 21:03 
GAA в сообщении #1514828 писал(а):
Можно привести примеры? (Ничего разумное мне в голову не приходит при чтении этого утверждения. )
Я имел в виду, что $p \bmod q$ должно бы быть определённым для рациональных $p, q$ в «больших» СКА типа матлаба (как $p - q \left\lfloor \frac p q \right\rfloor$), потому что это выглядит весьма полезным доопределением (ну и для чисел с плавающей запятой это точно так же, но я более-менее пойму, если для рациональных будет определено, а для них нет).

 
 
 [ Сообщений: 44 ]  На страницу 1, 2, 3  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group