Было бы проще, если бы вы не настаивали на использовании имени I
, которое в Maple имеет особое значение sqrt -1.
restart;
interface(imaginaryunit=j):
local I:=Array((1..3)$4,datatype=float[8]);
for i1 from 1 to 3 do
I[i1,i1,i1,i1]:=1.0;
end do:
Выше приведено I
в виде 4-мерного массива, где каждое измерение имеет ширину из трех элементов. И все три "длинных диагональных" элемента инициализируются до 1,0. И массив может содержать аппаратные поплавки двойной точности. И все остальные элементы по умолчанию 0.0.
Это то, что вы пытались сделать?
Если вы не настаиваете на том, чтобы называть его специальным именем I
, тогда все будет проще. Например,
restart;
II:=Array((1..3)$4,datatype=float[8]):
for i1 from 1 to 3 do
II[i1,i1,i1,i1]:=1.0;
end do:
Вы не можете должным образом переопределить / отключить специальное значение I
, просто сняв его с защиты. (И даже если бы вы могли, снять защиту и переопределить I
- неосуществимая идея, поскольку значительная часть команд Maple больше не будет правильно вычисляться в данном сеансе.)
Последние версии Maple позволяют создавать так называемый «локальный» экземпляр этого имени верхнего уровня, который можно использовать отдельно от обычного глобального имени I
. Если вы настаиваете на этом маршруте, и если ваша версия Maple достаточно свежая, чтобы поддержать его, то вы, вероятно, также захотите изменить
настройка интерфейса для воображаемой единицы (sqrt of -1), чтобы все не было слишком запутанным. Вот почему я показал это в первом примере выше.
Но я действительно думаю, что вам было бы проще, если бы вы просто использовали другое имя, например II
или что у вас.
Вам не нужно накладывать ограничение datatype=float[8]
на массив. Но если ваш последующий код имитирует некоторый (изначально) код Matlab, то, возможно, плавающие объекты - это все, что будет назначено в массив. И некоторые операции с массивами могут быть намного быстрее, с этим. Посмотрите, как это происходит.