Вот решение моей проблемы
%vector with lengths
sideLength = [1 2 3];
%This is to keep track of which if statement we are at
ifStatement=["a" "b" "c"];
for i=1:length(sideLength) %for loop that iterates 3 times
fprintf('If statement %s equals if (side(%d) == side(%d)) and (side(%d) ~= side(%d)) \n',...
ifStatement(i), i, (mod((i),3)+1), (mod((i),3)+1), (mod((i+1),3)+1))
end
Это дает вывод:
If statement a equals if (side(1) == side(2)) and (side(2) ~= side(3))
If statement b equals if (side(2) == side(3)) and (side(3) ~= side(1))
If statement c equals if (side(3) == side(1)) and (side(1) ~= side(2))
Проблема была в моем понимании мод. В Python индексы начинаются с 0, в matlab они начинаются с 1 и должны go увеличиваться в натуральных числах. Я действительно не думал, что смогу выполнить операцию мода, а затем добавить 1 к ответу, чтобы обойти проблему с 0 в качестве индекса.
Первоначально я пытался найти число, которое могло бы вычесть из него индекс, чтобы при делении индекса на него равнялся желаемому шаблону. Вся причина этого состояла в том, чтобы попытаться избежать того, чтобы индекс был чем-то вроде 3/3 = 0, а затем имел ошибку.
Решением этой проблемы было добавление 1 к ответу результата функции по модулю. Это означало, что если ответ по модулю был 0, то он был бы преобразован в индекс (1).
mod((i+1),(6-i))) %original attempt
%iteration 1 = the remainder of (1+1) / (6-1) = (2)/(5) = remainder 2
%iteration 2 = the remainder of (2+1) / (6-2) = (3)/(4) = remainder 3
%iteration 3 = the remainder of (3+1) / (6-3) = (4)/(3) = remainder 1
%The above was far too complicated when trying to use the same index number to solve
%for different patterns.
%Below is the solution
(mod((i),3)+1) %solved for middle part of if statement
%iteration 1 = the remainder of (1/3) + 1 = 2
%iteration 2 = the remainder of (2/3) + 1 = 3
%iteration 3 = the remainder of (3/3) + 1 = 1
%what solved this issue was understanding that I could put plus 1 outside of the mod
%operation to keep the indexes above 0 and solve the problem.
%The last part of the if statement I wanted to give the pattern of 3, 1, 2.
% to solve this I looked at (mod((i),3)+1). If I wanted to change that
%pattern from 2, 3, 1 I could simply add 1 at the point where the remainder was being
%calculated.
(mod((i+1),3)+1) %solved for last part of if statement
% pattern Iteration 1 (mod(1+1)/3) + 1 = (2) + 1 = 3
% pattern Iteration 2 (mod(2+1)/3) + 1 = (0) + 1 = 1
% pattern Iteration 3 (mod(3+1)/3) + 1 = (1) + 1 = 2
Это концептуализируется как часы. каждое число на часах одинаково, когда делится на длину часов и смотрит на остаток.
First hand on the clock will always be 1. 1/3 = r.1 || 4/3 = r.1 || 7/3 = r.1
Second hand on the clock will always be 2. 2/3 = r.2 || 5/3 = r.2 || 8/3 = r.2
Third hand on the clock will always be 0. 3/3 = r.0 || 6/3 = r.0 || 9/3 = r.0
13
10
7
4
1
15, 12, 9, 6, 3 2, 5, 8, 11, 14
Если я хотел составить схему из 1, 2 и 3, мне нужно было добавить 1 к ответу приведенного выше уравнения по модулю, чтобы оно имело диапазон от 1 до 3. Затем определите, какие с чего начать индекс, чтобы получить нужный шаблон.
т.е. шаблон 2, 3, 1
%iteration 1 = the remainder of (1/3) + 1 = 2
%iteration 2 = the remainder of (2/3) + 1 = 3
%iteration 3 = the remainder of (3/3) + 1 = 1
т.е. шаблон 3, 1, 2
% pattern Iteration 1 (mod(1+1)/3) + 1 = (2) + 1 = 3
% pattern Iteration 2 (mod(2+1)/3) + 1 = (0) + 1 = 1
% pattern Iteration 3 (mod(3+1)/3) + 1 = (1) + 1 = 2
Я надеюсь, что это хорошее объяснение, это довольно простая проблема, когда на нее смотрят так, но когда я пытался решить ее с помощью уравнений для выработки первого метода, это было не просто.