Я хочу генерировать перестановку, чтобы проверить ее, удовлетворяет уравнению, прежде чем я генерирую другое [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Я хочу генерировать перестановку, чтобы проверить ее, удовлетворяет уравнению, прежде чем я генерирую другое [закрыто]

Сообщение Anonymous »

Я пишу код, чтобы найти выпуклый n-n-gon с длиной стороны 1^k, 2^k, ..., n^k с равными углами интерьера. Если мы сформулируем это как задачу алгебры на сложной плоскости, это удовлетворено с помощью следующих уравнений: < /p> где a_1, a_2, ..., a_n - это некоторая перестановка 1^k, 2^k, ..., n^k без повторений. Так, например, для n = 3 вы можете иметь только боковые длины 1^0,2^0,3^0, для n = 6 = 2x3 вы можете иметь боковые длины 1^1,2^1, ..., 6^1, для n = 30 = 2x3x5 вы можете иметь боковые длины 1^2,2^2, ..., 30^2.
кодовый код. (at the moment n=12 and k=1 as it takes too long to generate any shape n>12 and w=e^{(2*i*pi)/n})
I'm currently using itertools to generate all permutations of the side lengths and then iterating through them to find a permutation that satisfies my equations and then it Перерывы. Мне было интересно, могу ли я написать какой -нибудь код, чтобы я мог проверить, удовлетворяет ли перестанов мои уравнения, прежде чем генерировать следующую перестановку для проверки. Это значительно сократит мое время выполнения, поскольку мне нужна только одна перестановка, которая работает. < /P>
Я не осознавал, что мой код должен быть здесь. Я принял предложение пользователя, и, похоже, он работает так, как предполагалось, но это все еще довольно медленно, если у кого -то есть еще несколько идей, чтобы сократить время. < /P>
import itertools
import numpy as np
import cmath

n = 12 #number of sides of the polygon
k = 1 #lengths = 1^k,2^k,...,n^k
lengths = [] #empty set to append edge lengths
w = cmath.exp((2*np.pi*1j)/n)

for i in range(1,n):
lengths.append(i**k)

for shape in itertools.permutations(lengths):
sum = n**k
for a in range(1,n):
sum = sum + shape[a-1]*w**a
if abs(round(sum.real,12)) == 0.0 and abs(round(sum.imag,12)) == 0.0:
ngon = [n**k]
for ii in shape:
ngon.append(ii)
print(ngon)
break


Подробнее здесь: https://stackoverflow.com/questions/795 ... ore-i-gene
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»