Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3324_KT / УМК_Красноярск_Учебное пособие_МатЛаб_МатКад.pdf
Скачиваний:
195
Добавлен:
28.03.2015
Размер:
5.19 Mб
Скачать

26. АНАЛИТИЧЕСКИЕ ВЫКЛАДКИ В MATHCAD

В MathCad существуют три основных способа организации символьных выкладок: с помощью команд через символьное меню Symbolics и соответствующие подменю; с помощью панели инструментов Symbolic и с п о-

мощью процедур пользователя.

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

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

Третий способ напоминает второй, но выполняется с помощью проце-

дур пользователя, которые создаются с использованием инструментов обычного программирования – панели инструментов Programming Toolbar. При

этом можно использовать многие приёмы, отработанные для численного программирования, но при этом возникают и специфические проблемы, нигде практически не оговорённые.

На кафедре САПР Политехнического института СФУ под руков о- дством заведующего кафедрой доктора технических наук профессора С. А. Бронова ведутся работы по развитию использования универсальных математических программ, в том числе символьных процессоров, в научных исследованиях и учебном процессе.

При выполнении символьных матричных операций в ряде случаев необходимо создать исходный материал в виде матриц и векторов. Для этого можно использовать простейшие операции программирования, полностью напоминающие обычные символьные операции – см. рис. 26.1. Здесь операции просто реализуются и избавляют от необходимости прописывать большие матрицы и векторы в общем виде.

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

В данном случае в качестве аргумента использовался угол θ, а задаваемая функция – косинус. Это позволяет заполнять большие матрицы соответствующими функциями в автоматическом режиме. Данная процедура используется, в частности, для задания матриц косинусоидальных индуктивностей в моделях электрических двигателей. Для трёхфазного асинхронного двигателя необходимо задать 6× 6 = 36элементов с собственными амплитудами и а р- гументами (фазами).

Математическое программное обеспечение. Учебное пособие

-245-

26. АНАЛИТИЧЕСКИЕ ВЫКЛАДКИ В MATHCAD

 

MForm(N,M,A) :=

 

for j 1.. N

 

 

 

 

 

Входные данные:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for

k 1.. M

 

 

 

 

N – число строк формируемой матрицы;

 

 

 

 

 

 

 

 

 

 

 

 

zj , k Aj, k

 

 

 

 

M – число столбцов формируемой матрицы;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A – символ для обозначения элементов

 

 

 

 

 

 

 

 

 

 

 

z

 

 

 

 

 

 

 

 

 

 

формируемой матрицы

 

 

 

 

 

 

 

 

 

 

 

 

Число строк:

N := 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a1,1

a1,2

a1,3

a1,4

Число столбцов: M := 4

 

 

 

 

 

 

 

 

 

 

 

 

a

 

a

 

a

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I := MForm(N,M,a)

2,1

 

2,2

 

2,3

 

2

,4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

a

 

a

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3,1 3,2

 

3,3 3

,4

 

 

 

 

 

 

 

 

 

 

 

а) формирование символьной матрицы

 

 

 

 

 

 

 

 

 

 

 

 

 

VForm(N,A) :=

 

for

j 1.. N

 

 

 

 

 

 

 

Входные данные:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

zj Aj

 

 

 

 

 

 

 

 

 

N – размерность формируемого вектора;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A – символ для обозначения элементов

 

 

 

 

 

 

 

 

 

 

z

 

 

 

 

 

 

 

 

 

 

 

 

формируемого вектора

 

 

 

 

 

 

 

 

 

 

 

 

Размер вектора:

N := 3

 

 

 

 

 

 

 

 

 

 

 

 

x1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X := VForm(N,x) x2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

б) формирование символьного вектора

 

 

 

 

 

 

 

 

 

 

 

 

 

MSim(A) :=

 

N cols(A)

 

 

 

 

 

 

 

 

 

Входные данные:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for

 

j 1.. N

 

 

 

 

 

 

 

 

 

A – исходная квадратная матрица

 

 

 

 

 

 

 

 

 

 

 

 

for

k j .. N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ak, j Aj, k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Исходная матрица

:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

 

 

d

 

 

d

 

 

d

 

 

 

d

1,1

d

1,2

d

1,3

d

1,

4

 

 

 

 

 

 

 

 

 

 

 

1,1

1,

2

1,

3

1

,4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d2,2

d2,3 d2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2,1

d

2,2

d

2,3

d

2,

4

 

 

 

 

 

 

 

 

 

 

d1,2

,4

 

D :=

d

d

d

 

 

 

 

 

 

 

 

 

 

 

Dsim := MSim(D) d

1,3

d

2,

3

d

3,

3

d

3

,4

 

d

3,1

3,2

3,3

3,

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

 

 

d

 

 

d

 

 

d

 

 

 

d4,1 d4,2 d4,3 d4,4

 

 

 

 

 

 

 

 

 

 

 

1,4

 

2,

4

 

3,

4

 

4

,4

 

 

 

 

 

 

 

 

 

 

 

 

 

в) симметрирование матрицы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

1,1

d

1,

2

d

1,3

d

1

,4

 

Входные данные:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

 

 

 

 

N – число строк и столбцов формируемой

 

 

 

 

 

 

 

 

 

 

d

 

 

d

 

d

 

 

 

Dsim := MSim(D)

 

 

1,2

 

2,

2

 

2,3

 

2

,4

 

квадратной матрицы;

 

 

 

 

 

 

 

 

 

 

 

 

 

d

1,3

d

2,

3

d

3,3

d

3

,4

 

V – символ или число, размещаемое по

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

диагонали формируемой матрицы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d1,4 d2,4 d3,4 d4,4

 

 

W

 

 

0

 

 

 

 

Размер матрицы: N := 3

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ds := MDiagSim(N,W)

 

 

0

W

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

 

W

 

 

 

 

г) формирование диагональной матрицы

Рис. 26.1

Математическое программное обеспечение. Учебное пособие

-246-

26. АНАЛИТИЧЕСКИЕ ВЫКЛАДКИ В MATHCAD

MFun(N,M,A,F ) :=

for

j 1.. N

 

for

k 1.. M

 

zk, j Ak, j F(θk, j)

 

z

 

Входные данные:

N – число строк формируемой матрицы; M – число столбцов формируемой матрицы;

A – символ или число, размещаемое перед функцией;

F – функция;

X – аргумент функции.

 

U1

,1

cos(θ1

,1)

U1

,2

cos(θ1

,2)

U1

,3

cos(θ1

,3)

U1

,4

cos(θ1

,4)

Fun := MFun(4,3,U,cos )

U

 

cos(θ

2

,1

)

U

 

cos(θ

2

,2

)

U

 

cos(θ

2

,3

)

U

 

cos(θ

2

,4

)

 

 

2,1

 

 

2,2

 

 

2,3

 

 

2,4

 

 

 

 

 

 

cos(θ3

,1)

U3,2

cos(θ3

,2)

U3,3

cos(θ3

,3)

U3,4

cos(θ3

 

 

 

U3,1

,4)

Рис. 26.2

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

MDif(A,x) :=

M cols(A(x))

 

N rows(A(x))

 

for

j 1.. N

 

for

k 1.. M

 

zj, k d A(x) j,

 

 

dx

 

z

 

Входные данные:

A – матрица с подлежащими дифференцированию элементами;

X – аргумент функции.

Исходная матрица с функция-

 

 

cos( t)

 

0

 

 

sin( t)

 

 

 

ми:

 

 

 

 

 

 

2 cos(t2) t

2 e2 t

 

 

1

 

 

 

 

 

sin(x)

17

cos(x)

 

dGT := MDif(GT , t)

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 t 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

GT(x) := sin(x2)

exp(2 x)

 

x

 

 

 

 

 

2

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

3

t

2

+ 2 tan(2

t)

 

x3

 

 

 

 

 

 

 

 

0

tan(2 x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 26.3

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

Математическое программное обеспечение. Учебное пособие

-247-

26. АНАЛИТИЧЕСКИЕ ВЫКЛАДКИ В MATHCAD

MElimi n(A,Nv) :=

 

 

NA rows(A( v))

 

 

 

 

 

 

 

 

for j 1.. Nv

 

 

 

 

 

 

 

 

 

 

for k 1.. Nv

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

vk 0

 

 

 

 

 

 

 

 

 

 

vj 1

 

 

 

 

 

 

 

 

 

 

for k 1.. NA

 

 

 

 

 

 

 

 

 

Zk, j A( v) k

 

 

 

 

 

 

 

Z

 

 

Исходная система уравнений:

 

 

a1.1

x

1

+ a1.2 x

2

 

 

x

1

 

 

 

 

 

 

 

 

x2

+ a2.3 x3

 

 

R(x) := a2.2

 

Вектор: x := x2

 

a x

1

+ a x

3

 

 

x

3

 

3.1

 

3.3

 

 

 

 

Входные данные:

A – матрица-столбец с линейными уравнениями;

Nv – размерность вектора.

a1.1

a1.2

0

 

 

0

a2.2

a2.3

 

AX := MElimin(R ,3)

 

a

0

a

 

 

3.1

 

3.3

 

Рис. 26.4

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

a1,1x1

+ a1,2x2 + + a1,n xn

 

u

 

 

 

+ a2,2 x2 + + a2,n xn

 

 

1

 

 

a2,1x1

 

u2

 

,

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

am,1x1 + am,2 x2 + + am,n xn

um

 

 

которую целесообразно далее перевести в матричную форму вида A x = u :

a1,1a2,1

am,1

a1,2 a1,n a2,2 a2,n

am,2 am,n

x

 

u

 

1

 

1

 

x2

 

u2

 

 

 

=

.

 

 

 

 

 

 

 

 

xn

 

um

Так, в исходном виде уравнения записаны в строку и вся система представляет из себя матрицу-столбец, которая поступает в процедуру. Эта исходная матрица-столбец должна быть записана как функция от вектора, который должен быть пронумерован. Размерности вектора и исходной матри- цы-столбца могут быть разными, если число уравнений не равно числу переменных. Размерность исходной матрицы-столбца (число строк) определяется автоматически, а размерность вектора задаётся. Идея вычленения матрицы заключается в том, что в цикле все элементы вектора задаются равными нулю, кроме одного, который задаётся равным единице. Тогда все элементы с нулевыми сомножителями также обнуляются и исчезают, а при единичном сомножителе коэффициент выделяется и записывается в выходную матрицу.

Процедура на рис. 26.5 позволяет сформировать матрицу, отражающую

Математическое программное обеспечение. Учебное пособие

-248-

26. АНАЛИТИЧЕСКИЕ ВЫКЛАДКИ В MATHCAD

структуру исходной матрицы – с нулевыми элементами на месте нулевых элементов исходной матрицы и ненулевыми элементами (заданной цифрой, например, единицей или символом). Такие матриц часто оказываются необходимы при анализе структур, для перехода от матриц к графам и т. п. Сложность реализации этой процедуры связана с тем, что символьный процессор не умеет определять наличие или отсутствие символа, т. е. операция сравнения x = 0? имеет смысл только для чисел.

WS(W , h, b) :=

 

 

N rows(W)

 

 

 

 

 

 

 

 

M cols(W)

 

 

 

 

 

 

 

 

for

k 1.. N

 

 

 

 

 

 

 

 

for

j 1.. M

 

 

 

 

 

 

 

 

Zk, j

W k,

 

 

 

 

 

 

 

 

W k, j

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z

 

 

Исходная матрица

с нулевыми

и ненулевыми элементами:

 

R

1,1

 

0

R

1

,3

 

 

 

 

 

 

 

 

 

 

 

R2,2

 

 

 

 

 

 

W := R2,1

 

0

 

 

 

 

 

 

0

R

3,2

R

3

 

 

 

 

 

 

 

 

 

,3

 

 

Входные данные:

W – матрица;

h – вспомогательный параметр, задаваемый при вводе в виде любого символа;

b – число или символ, помещаемый вместо ненулевых элементов.

L 0 L SW := WS(W , h,L) substitute, h = 0 L L 0

0 L L1 0 1

SW := WS(W , h,1) substitute, h = 0 1 1 00 1 1

Рис. 26.5

Данная процедура реализована в сочетании со вторым способом выполнения символьных операций. Математическая основа использованного приёма для определения наличия или отсутствия символьного выражения в соответствующей ячейке матрицы следующая. Символьно может выполниться операция

Z

b ,

Z + h

 

где Z – любое содержание ячейки (символ); h и b – вспомогательные символьные переменные, из которых b может быть также числом.

Если ячейка была пуста, то рассматриваемое выражение будет иметь вид

0 +0 h b = 0 ,

так как умножение на нуль символьный процессор "понимает" правильно и выдаёт нуль. Если бы в знаменателе не было символьной переменнойh, то получилось бы деление нуля на нуль, что символьный процессор понять не может.

Если ячейка не пуста, то в этом месте формируется выражение

Математическое программное обеспечение. Учебное пособие

-249-

26. АНАЛИТИЧЕСКИЕ ВЫКЛАДКИ В MATHCAD

Z

b ,

Z + h

 

которое затем обрабатывается в командном режиме с подстановкой значения h = 0, что означает:

Z

b =

Z

b =1 b = b ,

Z + 0

Z

 

 

и оно превращается в число или символ, заданный через параметр b.

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

Математическое программное обеспечение. Учебное пособие

-250-