2015-01-22 3 views
1

Я пытаюсь сгенерировать массив, содержащий сумму квадратов от 1 до произвольного k. Для этого в настоящее время я вызывал еще одну функцию в моем цикле: mylist [k] = function (k), но продолжаю получать ошибку за пределами границ. Как инициализировать массив заданного размера (скажем n) в Maple?initialize array in maple

ответ

2

В Maple списки и массивы - это не одно и то же. Списки неизменяемы, в то время как массивы являются изменяемыми. Это анахронизм, который для коротких списков Maple позволит вам «назначить» записи, как если бы это был массив. Однако то, что это на самом деле делает, это создать новый массив и крайне неэффективно. Вот почему для достаточно большого списка вы видите ошибку, когда пытаетесь это сделать.

Правильный способ создания списка заданного размера n - использовать команду seq, которая создает последовательность.

> [seq(i^2, i = 1 .. 10)]; 
     [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 

(вместо буквального верхней границы «10», можно использовать значение параметра, передаваемый в процедуру, в которой вы использовали эту конструкцию.) Квадратные скобки ([]) вокруг SEQ() вызов превращает полученную последовательность в структуру данных списка.

Если вам действительно нужен (изменяемый) массив, то используйте конструктор Array почти так же.

> Array([seq(i^2,i=1..10)]); 
     [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 

Существует альтернативный синтаксис, хотя, что позволяет избежать создания промежуточного списка:

> Array(1 .. 10, i -> i^2); 
     [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 

(Обратите внимание, что довольно-вывода на печать списков и массивов появляется то же самое, пусть это не путайте вас.)

Вы должны быть в состоянии заменить квадратичную карту (i -> i^2), которую я использовал здесь, с вызовом вашей собственной процедуры.