2014 dxdy logo

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

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




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


26/09/17
294
Как в Матлабе реализовать функцию, которая определена только в узлах произвольной решетки? Например, в узлах обычной квадратной решетки с шагом $\pi$$$.

 Профиль  
                  
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 14:07 
Заслуженный участник


12/07/07
4135
Донецк, Украина
Что означает реализовать функцию, которая определена в узлах квадратной решетки с шагом $\pi$? Что эта функция должна возвращать?

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

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

 Профиль  
                  
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 14:14 
Заслуженный участник


27/04/09
28128
Я бы спросил, что эта функция должна принимать. Не у всех решёток есть какая-то естественная нумерация. Если конечно не имеются в виду лишь квадратные, прямоугольные и прочие решётки вида $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 


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

 Профиль  
                  
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 16:56 
Заслуженный участник


12/07/07
4135
Донецк, Украина
В чём, в таком случае, сложность в реализации функции в системе Matlab? Вроде нужно выполнить простую проверку на кратность координат числу $\pi$.

 Профиль  
                  
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 17:00 


26/09/17
294
Да, для частного случая - квадратной решетки с постоянным шагом, это работает:
Используется синтаксис 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 
Заслуженный участник


12/07/07
4135
Донецк, Украина
При преобразовании к числам двойной точности с плавающей точкой могут возникнуть погрешности. Естественно работать с символьным представлением. Реализация, конечно, зависит от задачи, которую Вы не сформулировали.

Что есть $n$?

 Профиль  
                  
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 18:22 


26/09/17
294
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 
Заслуженный участник


27/04/09
28128
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 


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

 Профиль  
                  
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 20:22 
Заслуженный участник


27/04/09
28128
maximkarimov в сообщении #1514818 писал(а):
1. Да, получается что мне удалось сформулировать лишь индикатор, к сожалению.
С индикатором тоже всё плохо, я просто не добавил, раз он нам в итоге не нужен. Численные проблемы, «дребезг», ну его.

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

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

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

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

 Профиль  
                  
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 20:34 


26/09/17
294
arseniiv в сообщении #1514820 писал(а):
maximkarimov в сообщении #1514818 писал(а):
Но хотя бы может не произвольное иррациональное? Например квадратичная иррациональность или подобный небольшой класс.
Да, объять необъятное в планах нет!) Хочу начать с самого простого случая, а именно c квадратной решетки, которая имеет постоянный шаг $\sqrt{2}$, а там видно будет.

 Профиль  
                  
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 20:48 
Заслуженный участник


27/04/09
28128
А, погодьте, я думал, мы не про шаг, а про отношение координат $A$. А когда решётка квадратная, шаг не важен, ведь мы можем насколько-то растянуть всё пространство, и факт попадания или непопадания луча в вершину решётки не изменится (и то, в какую самую близкую к нулю вершину он попадает, в терминах её целочисленных координат из моего первого поста).

 Профиль  
                  
 
 Re: Матлаб: реализовать функцию для узлов произвольной решетки
Сообщение17.04.2021, 20:54 
Заслуженный участник


12/07/07
4135
Донецк, Украина
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 
Заслуженный участник


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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу 1, 2, 3  След.

Модераторы: maxal, Toucan, PAV, Karan, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group