Я хочу сделать итерацию, где я изменяю элементы матрицы, используя точечное умножение, но использую условные выражения, чтобы изменить только некоторые элементы. Однако использование условных выражений с матрицами, по-видимому, позволяет назначить скаляр только некоторым элементам, а не полной матрице.
Я попытался использовать условные выражения, чтобы определить, какие элементы повторяются, но использование условных выражений изменяет размеры матрицы наодномерный массив.
y=-1:0.005:1;
[X,Y]=meshgrid(x,y);
Z=X+1i*Y;
Zn=0*Z;
Iter=0*Z;
for m=1:1000
Zn = Zn.^2+Z;
Iter(Iter==0 & (abs(Zn)>10))=m;
endfor
p=pcolor(X,Y,Iter);
set(p,'edgecolor','none')
axis equal
Вот моя полная программа. Он перебирает матрицу для построения графа Мандельброта. Это отлично работает, но онлайн-уроки, которые я делаю (https://ocw.mit.edu/courses/mathematics/18-s997-introduction-to-matlab-programming-fall-2011/fractals-and-chaos/truth-statements-and-logical-indexing/), хотят, чтобы вы остановили итерации для элементов, которые уже больше 10, чтобы сделать его более эффективным.
Внутри цикла for выПосмотрите на матрицу Iter, это именно то, что я хочу. Поскольку я присваиваю скаляры некоторым элементам с помощью условных выражений, все работает отличноВыше этого, хотя моя матрица, которую я повторяю, Zn. Я хотел бы написать что-то вроде Zn (Zn <10) = Zn. ^ 2 + Z;но это дает мне ошибку: </p>
error: mandel: =: nonconformant arguments (op1 is 154633x1, op2 is 401x401)
error: called from
mandel at line 9 column 13
Условные обозначения превращают матрицу в одномерный массив, поэтому это не работает. Итак, мои вопросы
Почему они превратили его в одномерный массив? Это ужасно бесполезно при работе с матрицами.
Как я могу обойти это и использовать только некоторые элементы, чтобы сделать мой код более эффективным?
Редактировать: я подаю в суд на Octave 5.1.0 под Windows.