Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Литература / Козин Р.Г. Алгоритмы численных методов линейной алгебры и их программная реализация

.pdf
Скачиваний:
4
Добавлен:
07.09.2025
Размер:
4.33 Mб
Скачать

СПИСОК ЛИТЕРАТУРЫ

1.Турчак Л.И. Основы численных методов. М.: Наука, 1987.

2.Крылов В.И., Бобков В.В., Монастырский П.И. Вычислительные методы. Т. 1. М.: Физматгиз, 1976.

3.Калиткин Н.Н. Численные методы. М.: Наука, 1978.

4.Волков Е.А. Численные методы. М.: Наука, 1987.

5.Демидович Б.П., Марон И.А. Основы вычислительной мате-

матики. М.: Наука, 1966.

6.Бахвалов Н.С. Численные методы. М.: Наука, 1973.

7.Воеводин В.В. Вычислительные основы линейной алгебры.

М.: Наука, 1977.

8.Фаддеев Д.К., Фаддеева В.Н. Вычислительные методы линейной алгебры. М.: Наука, 1963.

9.Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные ме-

тоды. М.: Бином, 2008.

10. Козин Р.Г. Алгоритмы численных методов линейной алгеб-

ры. М.: Логос, 2009.

231

Приложение

НЕКОТОРЫЕ СВЕДЕНИЯ

О МАТЕМАТИЧЕСКОМ ПАКЕТЕ MAXIMA

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

Далее описываются некоторые операции и внутренние функции пакета, которые использовались в листингах, приведенных в пособии. Более подробно со всеми особенностями пакета можно ознакомиться, обращаясь к «помощи» самого пакета.

Простейшие операции и операторы: : – операция присвоение; := – определение функции;

=, >, <, >=, <=, # – операции сравнение; and, or – логические операции.

, или ; – элементы, закрывающие каждую команду, (ком1, ком2, ... ) – задание блока команд.

if условие then команда/блок команд else команда/блок команд – условный оператор;

for i :i1 thru i2 step di do команда или (блок команд) – простейший вариант оператора цикла;

while условие do команда или (блок команд) – условный оператор цикла;

print(“text”,v1,.,vn) – функция, которая выводит значения аргументов на экран;

%pi, %i – встроенное число «пи» и мнимая единица.

232

Рис. П1. Экран пакета в режиме отображением двух панелей (слева) с перечнем некоторых внутренних функций и с набранной программой (справа)

Рис. П2. Экран пакета срезультатими выполнения набранной программы

Пример.

Код программы.

n:5;

if n>=0 and n<=10 then (print("есть вхождение"),n:10)

else print("нет вхождения"); for i thru 3 do print(i);

Результат.

Функции для работы с матрицами: m:matrix([.,.],.,[.,.]) – опрделение произвольной матрицы; m:addcol(m,b) – добавление к матрице справа столбец;

m:addrow(m,b) – добавление к матрице снизу строку; submatrix(i1,…,in,m) – удаление из матрицы m i1,…,in строк;

submatrix(m,j1,…,jn) – удаление из матрицы m j1,…,jn столб-

цов;

A:copy(m) – копия матрицы;

determinant(m) – вычисление определителя матрицы; rank(m) – определение ранга матрицы;

invert(m) – нахождение обратной матрицы; transpose(m) – построение транспонированной матрицы;

tracematrix(m) – нахождение следа матрицы m;

ident(n) – генерация единичной матрицы размерности n*n;

zeromatrix(n,m) – генерация нулевой матрицы размерности n*m;

A.B / A.b – «точка» операции перемножения матриц или матрицы и матрицы-столбца;

genmatrix(f,n,m) – генерация матрицы из значений функции f[i,j] для i=1,n; j=1,m;

write_data(M,"c:/MaximaData/datamatrix.csv",comma) – со-

хранение матрицы М в файле datamatrix.csv;

TR:read_matrix("c:/MaximaData/datamatrix.csv") – чтение со-

храненной матрицы из файла в матрицу TR;

eigenvalues(m) – определение собственных чисел матрицы и их кратность.

235

Пример.

Код программы.

kill(all);

/* предварительно все вычистить */

numer:true;

/* выводить числа в действительном виде */

fpprintprec:5;

/* в числах осталять только 5 цифр */

y0:matrix([1],[4]);

Y:copy(y0);

y1:matrix([5],[9]);

y2:matrix([6],[3]); Y:addcol(y1,Y); Y:addcol(Y,y2); r:[7,2,3];

Y:addrow(Y,r);

print("определитель = ",determinant(Y)); m:invert(Y);

mt:transpose(Y);

Z:zeromatrix(2,2);

E:ident(2);

f[i,j]:=random(2.0); /* функция-шаблон – генерирует случайное число из диапозона

[0,2] */

print(“сгенерированная случайная матрица:”); G:genmatrix(f,2,2);

a:matrix([1,2,0,0,0,0],[4,5,0,0,0,0],[3,4,5,0,0,0],[2,3,4,0,0,0],[3,4,2,1,2,1],[6,5,4,3,2,1]); eigenvalues(a); /* собственные значения матрицы и их кратность */

Результат.

236

Исходная матрица и списки ее собственных значений и их кратность:

-

Другие функции:

block([л1,.,лn],команда1,.,командаm) – определение тела подпрограммы, где л1,.,лn – локальные переменные, команда1,.,командаm – команды, выполняемые подпрограммой;

return(a) – выход из подпрограммы с передачей значения a; create_list(f(i,j),i,ib,ie,j,jb,je) – формирование списка из значений

функции f(i,j) для i=ib,ie; j=jb,je;

237

append(L1,L2) – добавление справа к списку L1 списка L2; length(m) – длина списка, размерность матрицы;

lmax(L), lmin(L) – определение максимального и минимального элемента списка L:

abs(n) – абсолютное значение числа n;

floor(n) – возвращение целой части действительного числа; round(n) – округление действительного числа до ближайшего

целого;

mod(n,m) – возвращение остатка от деления n на m; sqrt(x) – корень от числа x;

signum(n) – возвращение: 1 при n>0, –1 при n<0, 0 при n=0; random(n) – генерация псевдослучайного числа из интервала

(0,n);

sum(f(i),i,ib,ie) – суммирование значений функциидля i=ib,ie; integrate(f(x),x,a,b) – вычисление определенного интеграла от

функции f(x) на отрезке [a,b];

it:quad_qags(f(t),t,a,b)[1] – возвращение значения определенного интеграла от функции f(x) на отрезке [a,b], если для функции интеграл не имеет аналитического представления;

factorial(n) – n!; prodact(f(i),i,n1,n2) .

Пример.

Код программы.

mul_matr(A,B):=block /* подпрограмма перемножант матрицы A и B */

(

[n,buf,i,j,k],

n:length(A),

AB:zeromatrix(n,n), /* глобальная переменная */ for i thru n do

for j thru n do

for k thru n do AB[i,j]:AB[i,j]+A[i,k]*B[k,j]

);

A:matrix([1,2,3],[4,5,6],[8,9,7]);

n:length(A);

/* вводим функцию для расчета кубической норма матрицы M*/ nrm(M):=lmax(create_list(sum(abs(M[i,j]),j,1,length(M)),i,1,length(M))); normKub:nrm(A);

A_1:invert(A);

mul_matr(A,A_1); /* умнажаем обратную матрицу на исходную */ AB;

238

/* тестирование встроенных функций */

a:floor(5.1); b:floor(5.8); c:round(6.4); d:round(6.7); e:mod(5.1,2);

Результат ее работы:

Команды, связанные с решением обыкновенных уравнений: solve([eq1,.,eqn],[x1,.,xn]) – нахождение решения системы урав-

нений eq1,.,eqn, относительно переменных x1,.,xn; globalsolve:true – значения решения системы уравнений непо-

средственно присваиваются указанным в команде переменным x1,.,xn;

to_poly_solve([pol(x)=0],[x]) – нахождение корней полинома pol(x);

realpart(cn) – выделение действительной части rp комплексного числа cn=rp+%i*imp;

239

imagpart(cn) – выделение мнимой части imp комплексного чис-

ла cn=rp+%i*imp;

ev(x,s[i]) – возвращение значения i-го корня полинома из именного списка решения, который строит команда s:solve([p(x)=0],[x]).

Пример.

Код программы.

cn:1+%i*2;

realpart(cn); imagpart(cn); globalsolve:true;

solve([x1+2*x2+3*x3=1,3*x1+5*x2-7*x3=2,2*x1-7*x2+3*x3=3],[x1,x2,x3]);

print(" Компоненты вектора невязки для решения = ",x1+2*x2+3*x3-1, ",",3*x1+5*x2- 7*x3-2,",", 2*x1-7*x2+3*x3-3);

pol(z):=z^4+2*z^3+3*z^2+4*z-5; s:solve([pol(x)=0],[x]); cr:ev(x,s[3]);

print(" Действительная и мнимая части третьего корня = ", realpart(cr), ",", imagpart(cr));

listR:makelist(ev(x,s[i]),i,1,4);

print(" Список корней полинома = ", listR); listR[2];

Результат.

Некоторые графические команды:

wxplot2d(исходные данные и опции) / plot2d(..) и wxplot3d(..) / plot3d(..) – первая форма команды, которая выводит двумерный или трехмерный график в основное окно, а вторая форма – в дополнительное. Во втором случае трехмерный график можно вращать.

240