Error in sum summation variable previously assigned second argument evaluates to



6. Работа с последовательностями, списками, множествами. Последовательности с заданным числом членов

Простейшими являются суммы последовательностей с фиксированным числом членов. Ниже даны примеры применения этих функций (файл sum):

Error, (in sum) summation variable previously assigned, second argument evaluates to k=1..4

Обратите внимание, что во втором примере система отказалась от вычисления, а в третьем даже выдала сообщение об ошибке, связанную с тем, что переменной k перед вычислением сумм было присвоено численное значение 2. После заключения выражения и переменной индекса k в прямые кавычки ошибка исчезла, поскольку такая операция означает, что переменной придается неопределенное значение.

Основные функции для произведения членов последовательностей

Аналогичным образом для произведений членов f(i) некоторой последовательности, например вида

используются следующие функции:

Обозначения параметров этих функций и их назначение соответствуют приведенным для функций вычисления сумм. Это относится, в частности, и к применению одиночных кавычек для f и k.

7. Работа с массивами, таблицами. Создание Maple-таблиц и их применение

Еще одним важным типом множественных данных являются таблицы. Они задают данные с произвольной индексацией. Для создания таблиц служит функция table, которая при вызове в простейшем виде table[] создает шаблон пустой таблицы:

Пустая таблица резервирует память под данные. Когда параметром функции table является список выражений, он выводится в естественном порядке расположения элементов таблицы, но с произвольным порядком индексации:

T: = table([1 = 1, 2 = 2, 3 = π, 4 = string])

S := table([one = 1, three = 3, two = 2])

В конце приведенных примеров показано, как можно выделить отдельные компоненты таблицы и вывести значения и индексы таблицы с помощью функций entries и indices. Следующие примеры показывают, что таблицу можно использовать для выполнения математических преобразований:

> F := table([sin=cos, cos=-sin]): op(op(F));

[cos = -sin, sin = cos]

Следует внимательно присмотреться к этим примерам — они демонстрируют замену функции косинуса на синус со знаком «—» и синуса на косинус.

Создание массивов, векторов и матриц

Важным типом данных являются списки или листы. В Maple 9.5 они создаются с помощью квадратных скобок, например:

[1,2,3,4] — список из четырех целых чисел;

[1,2.34,5] — список из двух вещественных и одного целого числа;

[a,b, «Привет»] — список из двух символов (переменных) и строковой константы;

[sin(x), 2*cos(x),a^2-b] — список из трех математических выражений.

Для создания векторов (одномерных массивов) и матриц (двумерных массивов) служит функция array. Обычно она используется в следующих формах:

array[a..b,s1] — возвращает вектор с индексами от а до b и значениями в одномерном списке s1;

array[a..b,c..d,s2] — возвращает матрицу с номерами строк от а до b, номерами столбцов от с до d и значениями в двумерном списке s2.

Примеры задания вектора и матрицы представлены ниже:

array(1..3,[х,у,х+у]) — создает вектор с элементами x, у и х+y;

array(1..2,1..2,[[a,b],[c,d]]) — квадратная матрица

Для создания векторов может использоваться также конструктор векторов Vector[o](d, init, ro, sh, st, dt, f, а, о) с рядом опционально заданных параметров. В этой книге эта конструкция практически не используется. Векторы и матрицы можно также задавать с помощью угловых скобок:

Имеется множество функций для работы со списками, массивами и матрицами. Они будут рассмотрены в дальнейшем. В принципе, размерность массивов, создаваемых списками, не ограничена, и массивы могут быть многомерными.

Источник

Error in sum summation variable previously assigned second argument evaluates to

Название: Maple в инженерных расчетах — Пасько А.А.

2.2 вычисление суммы ряда, произведения и предела

Вычисление суммы членов некоторой последовательности f (k) при изменении целочисленного индекса

k от значения m до значения n, т.е.

∑ f (k )  f (m)  f (m  1)  .  f (n − 1)  f (n) ,

является достаточно распространенной операцией математического анализа. Для вычисляемой и инертной форм вычисления сумм служат функции sum и Sum.

Вычисляемая форма суммы.

Инертная форма суммы.

Оформление результатов расчета с использованием инертной и вычисляемой форм.

Отметим, что если переменной-индексу (k) к моменту вычисления суммы уже присвоено какоелибо значение, то функция sum приведет к ошибке.

Error, (in sum) summation variable previously assigned, second argument evaluates to 125 = 1 .. 10

Для того чтобы избежать ошибки следует использовать одинарные кавычки, как показано ниже.

Функция value служит для вычисления инертных форм.

Многие бесконечные суммы сходятся к определенным значениям и Maple способен их вычислить.

> Sum(1/k!, k=0..infinity)=sum(1/k!, k=0..infinity);

∞ 1

> Sum(1/k^2, k=1..infinity)=sum(1/k^2, k=1..infinity);

Для вычисляемой и инертной форм нахождения произведений служат функции product и Product.

> Product(k^2,k = 1 .. 5)=product(k^2,k = 1 .. 5);

Для вычисления пределов служат функции limit и Limit. Вычислим предел функции точке π/4.

Читайте также:  Nginx error log warning

> Limit(12*sin(x),x=Pi/4)=limit(12*sin(x),x=Pi/4);

12 sin ( x )  6 2

Предел функции 1/x в точке x = 0.

 undefined x

Первый замечательный предел.

 ∞

 −∞

 1

Содержание

Читать: Аннотация
Читать: Введение
Читать: 1 интерфейс maple
Читать: 1.1 интерфейс рабочего документа
Читать: 1.2 интерфейс справочной системы
Читать: 1.3 интерфейс двухмерной графической системы
Читать: 1.4 интерфейс трехмерной графической системы
Читать: 2 синтаксис языка maple
Читать: 2.1 простые вычисления
Читать: 2.2 вычисление суммы ряда, произведения и предела
Читать: 2.3 основные типы данных
Читать: 2.4 операции с формулами
Читать: 2.5 производные и интегралы
Читать: 2.6 пакеты расширений и работа с ними
Читать: 3 двухмерная графика
Читать: 3.1 совмещение графиков
Читать: 3.2 анимация графиков
Читать: 3.3 построение графика неявной функции
Читать: 3.4 построение графиков линиями равного уровня
Читать: 3.5 график плотности
Читать: 3.6 график векторного поля градиента
Читать: 3.7 график векторного поля
Читать: 3.8 совмещение графиков построенных различными функциями
Читать: 4 трехмерная графика
Читать: 5 решение уравнений,
Читать: 6 управляющие конструкции
Читать: 7 процедуры и функции
Читать: 8 решение дифференциальных уравнений
Читать: 8.1 решение обыкновенных дифференциальных уравнений
Читать: 8.2 решение дифференциальных уравнений в частных производных
Читать: 8.3 численное решение дифференциальных уравнений в частных производных
Читать: 9 примеры решения инженерных задач
Читать: 9.1 расчет быстро вращающихся дисков
Читать: 9.2 расчет аппарата высокого давления
Читать: Список литературы

Источник

pmi432 / LR05 / Books / Аладьев — Основы программирования в Maple, 2006

3.4. Специальные типы циклических управляющих

структур Maple -языка

Наряду с рассмотренными базовыми Maple -язык располагает рядом специальных управляю — щих структур циклического типа, позволяющих существенно упрощать решение целого ряда важных прикладных задач. Такие структуры реализуются посредством ряда встроенных функций и процедур < add , mul , seq , sum , product , map , member и др. >, а также $ -оператора, позволяющих компактно описывать алгоритмы массовых задач обработки и вычислений. При этом, обеспечивается не только большая наглядность Maple -программ, но и повышенная эффективность их выполнения. Следующий фрагмент иллюстрирует результаты вызова некоторых из перечисленных средств с эквивалентными им конструкциями Maple -языка, реализованными посредством базовых управляющих структур следования , ветвления и циклических .

> add(S(k), k=1..10); S(1) + S(2) + S(3) + S(4) + S(5) + S(6)

+ S(7) + S(8) + S(9) + S(10)

> assign(‘A’ = 0); for k from 1 to 5 do A:=A + F(k) end do: A;

F(1) + F(2) + F(3) + F(4) + F(5)

> mul(F(k), k=1..13); F(1) F(2) F(3) F(4) F(5) F(6) F(7) F(8) F(9) F(10) F(11) F(12) F(13)

> assign(‘M’ = 1); for k from 1 to 7 do M:= M*F(k) end do: M; F(1) F(2) F(3) F(4) F(5) F(6) F(7)

> seq(F(k), k=1..12); F(1), F(2), F(3), F(4), F(5), F(6), F(7), F(8), F(9), F(10), F(11), F(12)

> assign(‘S’ = []); for k from 1 to 5 do S:=[op(S), F(k)] end do: op(S); F(1), F(2), F(3), F(4), F(5)

> map(F, [x1,x2,x3,x4,x5,x6,x7,x8]); [F(x1), F(x2), F(x3), F(x4), F(x5), F(x6), F(x7), F(x8)]

> assign(‘m’= []); for k in [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10] do m:= [op(m), F(k)] end do: m;

[F(x1), F(x2), F(x3), F(x4), F(x5), F(x6), F(x7), F(x8), F(x9), F(x10)]

> L:= [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10]: member(x3, L); true

> for k to nops(L) do if L[k] = x10 then R:= true: break else R:= false end if end do: R; true

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

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

> G:= [59, 64, 39, 44, 10, 17]: add(G[k]*`if`(type(G[k], ‘odd’), 1, 0), k=1..nops(G)); 115 > mul(G[k]*`if`(type(G[k], ‘even’), 1, `if`(G[k]=0, 1, 1/G[k])), k=1..nops(G)); 28160

> F:=[10,GS,17]: (seq(F[k]*`if`(type(F[k], ‘symbol’), 1, 0), k=1..nops(F)))(x,y,z); 0, GS(x, y, z), 0 > (seq(`if`(type(F[k], ‘symbol’), true, false) and F[k], k=1..nops(F))); false, GS, false

Первые два примера фрагмента иллюстрируют применение управляющей if -структуры для обеспечения дифференцировки выбора слагаемых и сомножителей внутри функций add и mul . Тогда как третий и четвертый примеры формируют последовательности вызовов функций на основе результатов их тестирования. Данные приемы могут оказаться достаточно полезным средством в практическом программировании в среде языка Maple различного рода циклических вычислительных конструкций.

В циклических конструкциях типа ` for k in n$n=a..b. ` не допускается отождествления идентификаторов k и n , не распознаваемого синтаксически, но приводящего к ошибкам выполнения конструкции. Более того, в общем случае нельзя отождествлять в единой конструкции переменные цикла и суммирования / произведения , например:

Читайте также:  Bash error to dev null

> h:= 0: for k to 180 do h:= h + sum(1, k = 1 .. 64) end do; h; 0

Error, (in sum) summation variable previously assigned, second argument evaluates to 1 = 1 .. 64

> h:= 0: for k to 180 do h:= h + sum(1, ‘k’ = 1 .. 64) end do: h; 11520

> h:= 0: for k to 180 do h:= h + product(1, k = 1 .. 64) end do: h; 0

Error, (in product) product variable previously assigned, second argument evaluates to 1 = 1 .. 64

> h:= 0: for k to 180 do h:= h + product(2, ‘k’ = 1 .. 64) end do: h; 3320413933267719290880

> h:= 0: for k in [‘k’ $ ‘k’=1..64] do h:= h + k end do: h;

[k $ ‘k’=1 .. 64] do h:= h + k end do: h;

[k $ k=1 .. 64] do h:= h + k end do: h;

Error, wrong number (or type) of parameters in function $

Вместе с тем, как иллюстрирует фрагмент, корректность выполняется при кодировании переменной суммирования/произведения в невычисленнои формате . Более того, три последние примера фрагмента иллюстрируют как допустимость , так и корректность использования общей переменной внешнего цикла и циклической $ -конструкции, но при условии использования последней в невычисленном формате. Данное обстоятельство определяется соглашениями Maple -языка по использованию глобальных и локальных переменных, детально рассматриваемых в следующей главе книги, посвященной процедурным объектам языка.

Дополнительно к сказанному, следует иметь в виду весьма существенное отличие в выполнении seq -функции и логически эквивалентного ей $ -оператора. Если функция seq носит достаточно универсальный характер, то $ -оператор более ограничен, в целом ряде случаев определяя некорректную операцию, что весьма наглядно иллюстрирует следующий простой фрагмент применения обоих средств Maple -языка пакета:

> S:=»aqwertyuopsdfghjkzxc»: R:=convert(S, ‘bytes’): convert([R[k]], ‘bytes’) $ k = 1 .. nops(R);

Error, byte list must contain only integers

> cat(seq(convert([R[k]], ‘bytes’), k = 1 .. nops(R))); «aqwertyuopsdfghjkzxc»

> X,Y:=99,95: seq(H(k), k=`if`(X 89,99,99)); H(95), H(96), H(97), H(98), H(99)

Таким образом, оба, на первый взгляд, эквивалентные средства формирования последовательностных структур следует применять весьма осмотрительно, по возможности отдавая предпочтение первому, как наиболее универсальному. В этом отношении для seq -функции имеют место ( в ряде случаев весьма полезные ) следующие соотношения:

seq (A(k), k = [B(x)]) ≡ seq (A(k), k = ) ≡ (A@B)(x) ≡ A(B(x)) seq (A(k), k = x) ≡ seq (A(k), k = B(x)) ≡ A(x)

При использовании ` if` -функции для организации выхода из циклических конструкций рекомендуется проявлять внимательность, ибо возвращаемое функцией break -значение не воспринимается в качестве управляющего слова Maple -языка пакета, например:

> R:= 3: do R:= R — 1; if R= 0 then break end if end do: R; 0 > R:= 3: do R:= R-1; `if`(R=0, `break`, NULL) end do: R; 0 Error, invalid expression

Первый пример фрагмента иллюстрирует успешный выход из do -цикла по достижении R — переменной нулевого значения и удовлетворения логического условия if -предложения. Тогда как второй пример показывает невозможность выхода из идентичного do -цикла на основе `if` -функции, возвращающей на значении R=0 break -значение, не воспринимаемое в качестве управляющего слова. При этом, если в Maple 7 – 10 инициируется ошибочная ситуация, то еще в Maple 6 второй пример, не вызывая ошибочной ситуации, выполняет бесконечный цикл, требуя прекращения вычислений по stop -кнопке GUI . В случае использования вместо break функций done , quit и stop выполняется бесконечный цикл, требуя прекращения вычислений по stop -кнопке GUI .

Циклические вычислительные конструкции можно определять и на основе функций < select , remove >, имеющих следующий единый формат кодирования:

Результатом вызова select — функции является объект того же типа, что и ее второй фактический аргумент, но содержащий только те операнды выражения , на которых логическая функция

( ЛФ ) возвращает true — значение. Третий необязательный аргумент функции определяет дополнительные параметры , передаваемые ЛФ . В качестве выражения могут выступать список , мно — жество , сумма , произведение либо произвольная функция . Функция remove является обратной к select — функции. Следующий простой фрагмент иллюстрирует применение функций select и remove для циклических вычислений:

> select(issqr, [seq(k, k= 1 .. 350)]);

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324]

> ЛФ:= x ->`if`(x >= 42 and x > remove(ЛФ, [seq(k, k = 1 .. 64)]);

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41]

Приведенный фрагмент достаточно прозрачен и особых пояснений не требует.

Детальнее группа функциональных средств, объединенных управляющей структурой цик — лического типа, на семантическом уровне рассматривалась выше. Здесь же на нее было акцентировано внимание именно в связи с вопросом механизма организации управляющих структур Maple -языка.

Читайте также:  Sorry looks like there was an error

На основе рассмотренных управляющих структур следования , ветвления и цикла , поддерживаемых Maple -языком, пользователь в сочетании с его функциональными средствами получает достаточно развитый инструмент для создания собственных программных средств, ориентированных на его конкретные приложения. В этом отношении поддерживаемый языком механизм процедур позволяет создавать его программы не только структурированными в указанном выше смысле, но и более модульными . В следующей главе рассматриваются процедур — ные и модульные объекты Maple -языка, что позволит с большим пониманием освоить и использовать программную среду пакета.

Глава 4. Организация механизма процедур в Maple —

Сложность в общем случае является достаточно интуитивно-субъективным понятием и его исследование представляет весьма трудную фундаментальную проблему современного естествознания да и познания вообще. Поэтому его использование ниже носит интуитивный характер и будет основываться на субъективных представлениях читателя. За свою историю человечество создала немало весьма сложных проектов и систем в различных областях, к числу которых с полным основанием можно отнести и современные вычислительные системы ( ВС ) с разрабатываемым для них программным обеспечением ( ПО ). Поэтому обеспечение высокого качества разрабатываемых сложных программных проектов представляется не только чрезвычайно важной, но и весьма трудной задачей, носящей многоаспектный характер. Последнее время данному аспекту программной индуствии уделяется особое внимание.

Решение данной задачи можно обеспечивать двумя основными путями: ( 1 ) исчерпывающее тестирование готового программного средства ( ПС ), устранение всех ошибок и оптимизация его по заданным критериям; и ( 2 ) обеспечение высокого качества на всех этапах разработки ПС . Так как для большинства достаточно сложных ПС первый подход неприемлим, то наиболее реальным является второй, при котором вся задача разбивается на отдельные объекты ( модули ), имеющие хорошо обозримые структуру и функции, относительно небольшие размеры и сложность и структурно-функциональное объединение ( композиция ) которых позволяет решать исходную задачу. При таком модульном подходе сложность ПС редуцируется к существенно меньшей сложности составляющих его компонент, каждая из которых выполняет четкие функции, обеспечивающие в совокупности с другими компонентами требуемое функционирование ПС в целом. Метод программирования, когда вся программа разбивается на группы модулей , каждый со своей контролируемой структурой, четкими функциями и хорошо определенным интерфейсом с внешней средой, называется модульным программиро — ванием .

Поскольку модульный является единственной альтернативой монолитного ( в виде единой программы ) подхода, то вопрос состоит не в целесообразности разбивать или нет большую программу на модули , а в том — каков должен быть критерий такого разбиения. На сегодня практика программирования знает и использует целый ряд методов организации многомодульных ПС , когда разбиение на модули основывается на их объемных характеристиках в строках исходного текста, выделении однотипных операций и т.д. Однако наиболее развитым представляется критерий , в основе которого лежит хорошо известный принцип « черного ящика ». Данный подход предполагает на стадии проектирования ПС представлять его в виде совокупности функционально связанных модулей , каждый из которых реализует одну из допустимых функций. При этом, способ взаимодействия модулей должен в максимально возможной степени скрывать принципы его функционирования и организации. Подобная модуль — ная организация приводит к выделению модулей , которые характеризуются легко воспринимаемой структурой и могут проектироваться и разрабатываться различными проектировщиками и программистами. Более важный аспект состоит в том, что многие требуемые модификации сводятся к изменению алгоритмов функционирования отдельных модулей без изменения общей структурно-функциональной организации ПС в целом. Вопросы современной концепции модульного программирования базируются на ряде основных предпосылок, рассматриваемых, например, в книгах [1-3] и в цитируемой в них весьма обширной литературе различного назначения.

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

4.1. Определения процедур в Maple -языке и их типы

Выделение в большой задаче локальных подзадач с достаточно большой частотой использования и применимости позволяет не только существенно продвинуть вопрос повышения ее модульности , но и повысить эффективность и прозрачность разрабатываемых программных средств. Наряду с этим, модульный подход позволяет сделать доступными отдельно оформленные виды и типы часто используемых работ для многих пользователей. Достаточно развитый механизм процедур Maple -языка во многих отношениях отвечает данному решению.

Процедура в среде Maple -языка имеет следующую принципиальную структуру:

proc( Последовательность формальных аргументов > )

local Последовательность идентификаторов > ;

global Последовательность идентификаторов > ;

Источник

Оцените статью
toolgir.ru
Adblock
detector