как определить период функции

1

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

Итак, предположим, что для данной матрицы применяйте правило к ней в 5 раз, а конечная матрица станет той же, что и матрица происхождения, и мы называем этот период матрицы 5.

И у меня есть другая функция B, как я могу заставить функцию B определить период данной функции под тем же правилом функции A и вернуть период? Я просто не знаю, как начать делать это.. Спасибо заранее.

def functionA(origin_matrix,N_times):
   #apply rule on the origin_matrix to generate another matrix which is the next sate of it.
   #apply rule on origin_matrix for N_times
   return the_final_matrix

def functionB(origin_matrix):
   #determine the period of the the origin_matrix.
   return period
  • 0
    Это домашнее задание? Если это так, было бы хорошо, если бы вы признали это, а некоторые из них подтолкнули вас в правильном направлении.
  • 0
    да .. это моя домашняя работа, и я действительно застрял, и мой учитель сегодня ушел. так что я пришел сюда, чтобы спросить, помогает ...
Показать ещё 1 комментарий
Теги:
math

1 ответ

6
Лучший ответ

Используйте цикл for или цикл while с временным результатом и счетчиком. Последний метод наиболее эффективен (в общем).

Простая версия, в псевдокоде:

iterations = 0;
tmp = origin_matrix;

do
    tmp = operation(tmp);
    iterations += 1;
while tmp != origin_matrix;

return iterations;

EDIT: вы также можете использовать простую конструкцию:

while True:
    tmp = operation(tmp)
    iterations += 1

    if tmp == origin_matrix:
        break  # Or you could return here.

EDIT: Это было для функции B. Я не знал, что это отдельные вопросы. Для этого примера операция (x) = functionA (x, 1).

Для функции A вы, скорее всего, будете использовать цикл for. Псевдокод:

matrix = origin_matrix

for i in range(N_times):
    matrix = operation(matrix)

return matrix
  • 0
    Обратите внимание, что это может быть не прекращается, если период операции бесконечен. Возможно, вы захотите встроить защиту, чтобы в этом случае цикл выполнялся максимальное количество раз. Это может зависеть от того, как язык обрабатывает целочисленное переполнение.
  • 0
    если operation изменяет tmp она всегда будет возвращать итерации == 1. В этом случае: tmp = copy.copy (оригинал) или copy.deepcopy (оригинал) могут быть полезны.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню