Назначение полной матрицы с помощью условных выражений в Octave - PullRequest
0 голосов
/ 12 ноября 2019

Я хочу сделать итерацию, где я изменяю элементы матрицы, используя точечное умножение, но использую условные выражения, чтобы изменить только некоторые элементы. Однако использование условных выражений с матрицами, по-видимому, позволяет назначить скаляр только некоторым элементам, а не полной матрице.

Я попытался использовать условные выражения, чтобы определить, какие элементы повторяются, но использование условных выражений изменяет размеры матрицы наодномерный массив.

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

Условные обозначения превращают матрицу в одномерный массив, поэтому это не работает. Итак, мои вопросы

  1. Почему они превратили его в одномерный массив? Это ужасно бесполезно при работе с матрицами.

  2. Как я могу обойти это и использовать только некоторые элементы, чтобы сделать мой код более эффективным?

Редактировать: я подаю в суд на Octave 5.1.0 под Windows.

...