Методы аналитических вычислений
.pdf> f := x -> x^2;
Первая строка определяет f как сокращенное обозначение выражения x2; вторая строка определяет f как функцию от x. После определения f таким образом, f(x) действует так, как и надлежит:
> f(3), f(10), f(x), f(y), f(a + b);
Предупреждение: Команда f(x) := x^2 делает четыре символа слева сокращенным обозначением для трех символов справа; такая команда не определяет функцию!
Авот пример векторно-значной функции двух переменных:
>h := (x,y) -> linalg[vector] ([x^2-y^2,2*x*y]): h(u,v);
[u2 – v2, 2 u v]
Функции часто оказываются более полезными, чем выражения. Однако, многие команды Maple (например, diff) предполагают, что на их входе будет выражение.
Если ввести
> f:= x -> x^2, diff(f,x);
то такая команда не сработает; однако,
> diff(f(x),x);
будет работать, поскольку результатом f(x) является x2; работает также
> diff(f(y),y);
выдавая 2y . [Между прочим, имеется вариант дифференцирования для "функции"; введите
?D для получения дополнительной информации].
Когда функция "прилагается" ("applied") к переменной, то в результате получается выражение. Чтобы превратить выражение в функцию, воспользуйтесь командой unapply:
> f := unapply(x^3, x); f(3);
Эта команда часто используется в связи с solve, например:
> soln := solve( y = x^2 - a, x);
Имеются два решения, к которым можно обратиться как к soln[1] и soln[2] (обратите внимание на квадратные скобки). Предположим, что вы хотите использовать второе из этих выражений, чтобы определить функцию; это делается следующим образом:
21
>g := unapply(soln[2], a);
>g(x); g(4);
УПРАЖНЕНИЯ:
*Поэкспериментируйте со "стрелочным обозначением" для создания функций.
*Поэкспериментируйте с выражениями и командой unapply для создания функций.
Процедуры
Функции являются частным случаем процедур. Процедура - это совокупность команд, подобная "подпрограмме" в некоторых компьютерных языках.
Функция, определенная выше как f := x -> x^2; это то же, что и
> f := proc(x) x^2 end;
Процедуры полезны для более сложных работ, которые могут охватывать много строк, учитывать выбор из многих различных случаев, или выполнять много действий. Рассмотрим еще один короткий пример процедуры:
> sqroot := proc(x)
#Вычисляет квадратный корень по методу Ньютона local xstart, xnew, i;
xstart := 1.;
for i from 1 to 100 do
xnew := ( xstart + x/xstart )/2;
print(xnew);
if abs(xnew - xstart)/xnew < 10^(-4) then RETURN() fi; xstart := xnew;
od;
end:
Заметим, что для получения нескольких строк после одного приглашения к вводу ">" следует воспользоваться Shift+Enter.
22
После создания этой процедуры, она дает:
> sqroot(2);
1.500000000
1.416666667
1.414215687
1.414213563
УПРАЖНЕНИЯ:
*Напишите процедуру bigger, такую, чтобы команда bigger(n,m); печатала true если n больше чем m, и false, если n меньше чем m.
*Напишите процедуру squaresum, вычисляющую сумму квадратов первых 100 натураль-
ных чисел (т.е., 1+4+9+...+10000).
*Сравните вашу squaresum(100) с sum(n^2, n=1 .. 100).
*Видоизмените вашу процедуру squaresum так, чтобы вычислять сумму первых N квадратов, где N это любое натуральное число.
8. ПОИСК И УСТРАНЕНИЕ ОШИБОК
Хотя на первых порах ошибки в работе с Maple могут очень вас смущать, вы быстро приобретете опыт, необходимый для того, чтобы понимать и исправлять их. Приведем список наиболее распространенных ошибок и способов их устранения.
1.Оканчивается ли оператор точкой с запятой или двоеточием?
2.Сбалансированы ли круглые скобки, фигурные скобки, квадратные скобки и т.д.? Набор символов наподобие {x, y} хорош, но x, y} может привести к ошибке.
3.Не пытаетесь ли вы использовать что-либо в качестве переменной, которой вы уже присвоили значение? Чтобы "очистить" переменную x, скажите unassign('x') или x:='x'. Вы можете очистить сразу несколько переменных, например, unassign('x', 'y'). Вам не придется перезагружать какие-либо пакеты. Помните, что переменная, которой присвоено значение, не может более работать как переменная. Чтобы отобразить значение простой переменной, введите ее имя с последующей точкой с запятой, например, > x;
4.Если дело кажется безнадежно запутанным, дайте команду > restart; После этого вам придется перезагрузить все необходимые пакеты.
5.Не используете ли вы функцию, когда было вызвано выражение, или наоборот? Помните, ff:=x^2+y^2 определяет выражение, тогда как f:=(x,y)->x^2+y^2 определяет функцию. Имеет смысл сказать f(1,3), но нет никакого смысла говорить ff(1,3).
23
6.Не используете ли вы = когда требуется := ? Помните, что первое это проверка на равенство, в то время как второе присваивает значение переменной.
7.Различаете ли вы три вида кавычек? Это: " (двойная кавычка), ' (одинарная кавычка – апостроф), и ` (обратная кавычка).
8.В операторах цикла, do должно быть сбалансировано последующим od. В условных операторах, if должно быть сбалансировано последующим fi.
9. Определение процедуры, которое начинается с |
proc(…), должно завершаться |
последующим end. После proc(…) точка с запятой не ставится!
10.Если вы используете функцию из пакета, загрузите сначала пакет. Так, чтобы использовать matrix, загрузите linalg; чтобы использовать display, загрузите plots. Вы загрузите linalg командой with(linalg).
11.Не путайте unassign с unapply.
12.Не забывайте использовать ? для получения подробной справки о функции Maple, например, ?plot для получения информации о plot, или просто ? для получения общей информации.
9. ЗАДАНИЯ И УПРАЖНЕНИЯ
1. |
Упростите выражение |
4 + 2 3 . |
|
1 |
−17 1 − x9 )dx . |
2. |
Вычислите ∫(9 1 − x17 |
|
|
0 |
|
3.Вычислите первую и вторую производные от sin x cos x по x.
4.Дан многочлен: y(x) = x3 - 4x2 + 4x - 1 . Найдите корни этого многочлена и все его локальные минимумы и максимумы. Проконтролируйте это решение, построив график функции y(x).
5.Дано f = x2 - 4. Вычислите интегралы от f и 1/f по x. Проверьте правильность результа-
тов путем их дифференцирования.
6. |
Вычислите следующие интегралы: ∫ |
∞ e−t dt |
и |
|
∫∞ e−t2 dt . |
||
|
|
0 |
|
|
0 |
||
|
|
1000 |
|
∞ |
|
1 |
|
7. |
Вычислите следующие суммы: |
∑k |
и |
∑ |
|
. |
|
|
2 |
||||||
|
|
k =1 |
|
k =1 |
k |
8. Получите формулу для суммы первых n натуральных чисел, а также для суммы квадра-
n |
n |
тов первых n натуральных чисел, т.е. вычислите и упростите суммы: ∑k |
и ∑k 2 . |
k =1 |
k =1 |
24
9. |
Дана функция h(x) =1 − x +sin x. Определите эту функцию в Maple и вычислите значе- |
|||
ние функции h при x = 2.0; затем постройте график этой функции в области [-5,5]. |
||||
10. |
Введите в Maple следующую матрицу A: |
|
|
|
|
|
a |
0 |
|
|
|
5 |
||
|
A = |
1 |
1 |
1 . |
|
|
− a |
0 |
|
|
|
0 |
||
|
1. Вычислите характеристический многочлен для A. |
|||
|
Указание: Воспользуйтесь командами charmat и det в пакете линейной алгебры |
|||
|
linalg. |
|
|
|
|
2. Вычислите собственные значения матрицы A. |
|||
|
Указание: Воспользуйтесь командами solve |
и factor, чтобы найти корни характе- |
ристического многочлена.
11. Воспользуйтесь командой solve для решения линейной системы:
4x −5y =11,
2x + y = 9.
12. Найдите разложение функции sin(x) в ряд Тейлора до членов порядка 6 в точке x = 0, используя команду taylor. Затем с помощью команды convert преобразуйте полученное выражение в многочлен (без остаточного члена). Для наглядного представления о точности такой аппроксимации постройте одновременно графики sin(x) и полученного многочлена 6-
й степени при x [0,4].
12a. Повторите такие же операции для разложения sin(x) в ряд Тейлора до членов порядка 10.
13.Решите задачи NN 12, 12a, но с использованием команды series (и стандартной переменной Order, определяющей порядок разложения.
14.Используйте команду limit, чтобы найти пределы функции:
a) |
f (x) = |
x2 − 2x +1 |
, |
при x→ 1. |
x4 +3x3 − 7x2 + x + 2 |
||||
|
f (x) = |
2x + 3 |
|
|
b) |
7x +5 , при x→ ∞. |
|
Теперь рассмотрим задания, связанные с дифференциальными уравнениями. Для решения дифференциальных уравнений можно, в частности, использовать команду дифференцирования diff и команду – "решатель ОДУ" dsolve.
25
15. Решите систему ОДУ:
x'(t) = −x(t) + ay(t ), y'(t ) = bx(t ) − y(t ).
при начальных условиях x(0) = 1, y'(0) = 0. 16. Решите ОДУ 2-го порядка:
a)y(x) + y"(x) = ex
при начальных условиях y(0) = 1, y'(0) = 0.
б) y"(t) + 5 y'(t) + 6 y(t) = 0
при начальных условиях y(0) = 0, y'(0) = 1.
Примечание: Команда дифференцирования для функции имеет вид D, для выражений эта команда имеет вид diff.
17. Решите ОДУ 4-го порядка: 106 yIV(x) = δ(x-2) - δ(x-4)
при граничных условиях на y(x) и y"(x):
y(0) = 0, |
y"(0) = 0, |
y(5) = 0, |
y"(5) = 0. |
Дельта-функция Дирака δ(x) в Maple записывается как Dirac(x).
Решение этой краевой задачи сохраните под именем "soln", а затем постройте график найденной функции для x = 0..5.
18.Решите систему двух ДУ 2-го порядка: y"(x) = z(x),
z"(x) = y(x),
не вводя дополнительных условий. Maple создаст соответствующие константы C1,...,C4.
Общие указания к NN 15-18:
1.Проверьте правильность найденных вами решений дифференциальных уравнений путем их подстановки в уравнения.
2.Попробуйте поработать с пакетом "DEtools"
26
ПРИЛОЖЕНИЕ 1.
Maple V Release 5: КРАТКАЯ СПРАВКА
Символы и сокращения
|
|
Символ |
Описание |
Пример |
|
:= |
присваивание |
f := x^2/y^3; |
|
|
; |
|
завершение команды; результат отобра- |
int := ( x^2, x ); |
|
|
|
жается |
|
|
: |
|
завершение команды: результат не ото- |
int := ( x^2, x ): |
|
|
|
бражается |
|
|
.. |
|
определение диапазона или интервала |
plot ( t*exp(-2*t), t=0..3 ); |
|
|
|
|
|
|
{ |
} |
ограничитель множества (множество это |
{ y, x, y }; |
|
|
|
неупорядоченный список) |
|
|
[ |
] |
ограничитель списка (списки упорядо- |
{ y, x, y }; |
|
|
|
чены) |
|
|
% |
ссылка на предыдущий результат (знак |
Int( exp(x^2), x=0..1 ): |
|
|
|
|
процента) |
% = evalf( % ); |
|
|
|
Примечание: В предыдущих версиях это |
|
|
|
|
был знак " (кавычки) |
|
|
|
|
|
|
|
" |
" |
ограничитель строки (двойные кавычки) |
plot( sin(10*x) + 3*sin(x), x=0..2*Pi, |
|
(см. ?strings) |
Примечание: Появился в Release 5 |
title="An interesting plot" |
|
|
` ` |
ограничитель имени (обратные апост- |
`A name` := `This is a name`; |
|
|
(см. ?names) |
рофы) |
|
|
|
' |
' |
отмена присваивания (апострофы) |
x := 'x'; |
|
(см. ?uneval) |
|
|
|
|
-> |
определение отображения (функции) |
f := ( x, y ) -> x^2*sin(x-y); |
|
|
|
|
|
f( Pi/2,0 ); |
|
@ |
оператор композиции |
( cos@arcsin )(x); |
|
|
@@ |
повторный оператор композиции |
( D@@2 ) ( ln ); |
|
|
$ |
|
формирование последовательности вы- |
( i^2+1 ) $ i=1..5; |
|
|
|
ражений |
diff( exp(a*x), x$4 ); |
Математические операции, функции и константы |
|
|||
|
|
|
|
|
|
|
Символ |
Описание |
Пример |
|
+, -, *, /, ^ |
сложение, вычитание, умножение, деле- |
3*x(-4) + x/Pi; |
|
|
|
|
ние, возведение в степень |
|
|
sin, cos, tan, |
тригонометрические функции |
sin( theta-Pi/6 ) – sec( theta^2 ); |
|
|
cot, sec, csc |
|
|
|
|
arcsin, arccos, |
обратные тригонометрические функции |
arctan( 2*x ); |
|
|
arctan, arccot, |
|
|
|
|
arcsec, arccsc |
|
|
|
|
exp |
экспоненциальная функция |
exp( 2*x ); |
|
|
ln |
натуральный логарифм |
ln( x*y/2 ); |
|
|
log10 |
обычный логарифм (по основанию 10) |
log10( 1000 ); |
|
|
abs |
абсолютное значение |
abs( (-3)^5 ); |
|
|
sqrt |
квадратный корень |
sqrt( 24 ); |
|
|
! |
|
факториал |
k!; |
|
=, <>, <, <=, >, |
равенства и неравенства |
diff( y(x), x ) + x*y(x) = F(x); |
|
|
>= |
Примечание: E больше не существует, |
exp(Pi) > Pi^exp(1); |
|
|
|
|
пользуйтесь exp(1) |
|
|
Pi, I |
π, i (математические константы) |
Exp( Pi*I ); |
|
|
|
|
Примечание: Maple чувствителен к ре- |
|
|
|
|
гистру клавиатуры |
|
|
infinity |
Бесконечность ( ∞ ) |
Int( x^(-2), x=1..infinity ); |
27
Команды
Команда |
Описание |
Пример |
restart |
отмена всех определений Maple |
restart; |
with |
загрузка пакета Maple |
with( Detools ); with( plots ); |
help |
отображение интерактивной справки |
?DEplot |
|
Maple |
|
limit |
вычисление предела |
limit( sin(a*x)/x, x=0 ); |
diff |
вычисление производной выражения |
diff( a*x*exp(b*x^2)*cos(c*y), x ); |
int |
определенное или неопределенное |
int( sqrt(x), x=0..Pi ); |
|
интегрирование |
|
Limit |
инертная (отложенная) форма limit |
Limit( sin(a*x)/x, x=0 ); |
Diff |
инертная (отложенная) форма diff |
Diff( a*x*exp(b*x^2)*cos(c*y), x ); |
Int |
инертная (отложенная) форма int |
Int( sqrt(x), x=0..Pi ); |
value |
вычисление инертного выражения |
G := Int( exp(–x^2), x ); |
|
(обычно используется с Limit, Diff или |
value( G ); |
|
Int) |
|
plot |
создание 2-мерного графика функций |
plot( u^3, u=0..1, title="cubic" ); |
|
|
plot( [sin(x), cos(x)], x=0..Pi ); |
plot3d |
создание 3-мерного графика функций |
plot3d(sin(x)*cos(y),x=0..4*Pi,y=0..Pi); |
display |
отображение графических структур |
with( plots ): |
|
(в пакете plots) |
F:=plot( exp(x), x=0..3, style=line ); |
|
|
G:=plot( 1/x, x=0..3, style=point ); |
|
|
display( [F,G], title=”2 curves” ); |
solve |
решение уравнений или неравенств |
solve( x^4 – 5*x^2 + 6*x = 2, { x } ); |
fsolve |
решение с использованием арифметики с |
fsolve( t/10 + t*exp(-2*t) = 1, t ); |
|
плавающей запятой |
|
dsolve |
решение обыкновенных дифференци- |
dsolve( diff(y(x),x)-y(x)=1, y(x) ); |
|
альных уравнений; список возможных |
|
|
опций см. в ?dsolve |
|
odeplot |
создание 2D и 3D графиков из решений, |
with( plots ): |
|
полученных при помощи dsolve (с |
S:=diff(x(t),t)=-y(t),diff(y(t),t)=x(t): |
|
type=numeric); другие опции см. в |
IC:=x(0)=1,y(0)=1: |
|
?odeplot (в пакете plots) |
P:=dsolve({S,IC}, {x(t),y(t)}, numeric): |
|
|
odeplot(P, [ [t,x(t)], [t,y(t)] ], 0..Pi); |
|
|
odeplot(P, [x(t),y(t)], 0..Pi); |
DEplot |
создание графика, связанного с ОДУ или |
ODE := diff( y(x),x ) = 2*x*y(x); |
|
системой ОДУ; дополнительная инфор- |
DEplot( ODE, [y(x)], x=-2..2, |
|
мация в ?Deplot (в пакете DEtools) |
y=-1..1, arrows=SMALL ); |
D |
дифференциальный оператор (часто ис- |
ODE := diff(y(x),x$2) + y(x) = 1; |
|
пользуется при записи производных в |
IC := y(0)=1, D(y)(0)=1; |
|
начальных условиях для dsolve) |
dsolve( { ODE, IC }, y(x) ); |
subs |
подстановка значений в выражение |
subs( x=r^(1/3), 3*x*ln(x^3) ); |
simplify |
применение правил упрощения для вы- |
simplify( exp( a+ln(b*exp(c)) ) ); |
|
ражений |
|
factor |
разложение многочлена на множители |
factor( (x^3-y^3) / (x^4-y^4) ); |
convert |
преобразует выражение к другому виду |
convert( x^3 / (x^2-1), parfrac, x ); |
collect |
собирает коэффициенты при |
collect( (x+1)^3*(x+2)^2, x ); |
|
одинаковых степенях |
|
rhs |
правая часть уравнения |
rhs( y = a*x^2 + b ); |
lhs |
левая часть уравнения |
lhs( y = a*x^2 + b ); |
numer |
извлекает числитель выражения |
numer( (x+1)^3 / (x+2)^2 ); |
denom |
извлекает знаменатель выражения |
denom( (x+1)^3 / (x+2)^2 ); |
evalf |
вычисляет значение с использованием |
evalf( exp( Pi^2 ) ); |
|
арифметики с плавающей запятой |
|
evalc |
вычисляет значение комплексного |
evalc( exp( alpha+I*omega ) ); |
|
выражения (возвращает значение в виде |
|
|
a+I*b) |
|
28
evalb |
вычисляет значение логического выра- |
evalb( evalf( exp(Pi) > Pi^exp(1) ) ); |
|
жения (возвращает true или false) |
|
assign |
выполняет присваивания (часто исполь- |
S:=solve( {x+y=1, 2*x+y=3}, {x,y} ); |
|
зуется с solve или dsolve) |
assign( S ); x; y; |
seq |
создает последовательность |
sec( [0,i], i=-3..3 ); |
for … while … |
оператор повторения; см. синтаксис |
tot := 0; |
do … od |
do for |
for i from 11 by 2 while i < 100 do |
|
|
tot := tot + i^2 |
|
|
od; |
assume |
информирует Maple о дополнительных |
assume( t > 0 ); |
|
свойствах объектов |
|
about |
проверяет предположения об объектах |
about( t ); |
|
Maple |
|
ПРИЛОЖЕНИЕ 2.
ПОСТРОЕНИЕ СПЛАЙН-ПОВЕРХНОСТИ СРЕДСТВАМИ Maple V
В качестве примера, иллюстрирующего возможность использования системы Maple V при решении сложных содержательных проблем, рассмотрим задачу построения и визуализации сплайн-поверхности, восстанавливающей функцию двух переменных по ее значениям в конечном числе произвольных точек плоскости (см., например: Сплайн-поверхности: Методическая разработка. Сост. В.О. Ашкеназы. - Тверь: Тверской гос. ун-т, 1993).
Если функция двух переменных f (x, y) задана своими значениями в конечном числе то-
чек:
{(xi , yi ), fi = f (xi , yi ); i =1, N },
то ее можно интерполировать сплайн-поверхностью Sp (x, y) , которая является решением вариационной задачи
∞ |
∞ |
|
∂2Sp |
2 |
|
∂2Sp |
|
2 |
|
∂2Sp |
2 |
|
|
||||||
J 2 (Sp)= ∫ |
∫ |
|
|
|
|
|
|
||||||||||||
|
|
|
2 |
|
|
|
|
|
|
|
|
2 |
|
|
|
||||
|
|
∂ x |
|
|
+ 2 |
|
|
|
+ |
∂ y |
|
|
|
dx dy → min, |
|||||
|
|
|
|
|
|
|
∂ x ∂ y |
|
|
|
|
|
|
||||||
−∞ −∞ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Sp (xi , yi )= fi , i =1, N. |
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
Это решение имеет достаточно простой вид:
|
|
|
|
N |
|
|
(x, y)ln ri2 (x, y)+ kN +1 + kN +2 x + kN +3 y , |
||||
|
Sp (x, y)= ∑ki ri2 |
||||||||||
|
|
|
|
i =1 |
|
|
|
|
|
|
|
где r2 (x, y)= (x − x |
)2 |
+ (y − y |
)2 . |
|
|
|
|
|
|||
i |
i |
|
|
i |
|
|
|
|
|
|
|
Коэффициенты |
ki , |
i = |
|
|
значения |
которых и |
определяют сплайн-поверхность |
||||
1, N + 3, |
|||||||||||
Sp (x, y), находятся из решения системы N`+3 линейных алгебраических уравнений: |
|||||||||||
|
|
|
|
Sp (x j , y j )= f j , |
j = |
|
; |
|
|||
|
|
|
|
1, N |
|||||||
|
|
|
|
N |
|
|
N |
|
N |
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
∑ki = 0; ∑xi ki = 0; ∑yi ki |
= 0; |
||||||
|
|
|
|
i=1 |
|
|
i=1 |
|
i=1 |
|
29
Решение существует и является единственным, если N ≥ 3 и среди N точек (xi , yi ) най-
дутся три точки, не лежащие на одной прямой. |
|
|
|
|
|
|||||||||||||||||||
Погрешности восполнения функции |
f (x, y) сплайн-поверхностью Sp (x, y) можно оце- |
|||||||||||||||||||||||
нить нормами: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
δ2 = |
|
|
|
ϕ −f |
|
|
|
|
L 2(Ω) |
= |
1 |
|
|
∫∫ |
(f (x, y)−ϕ(x, y))2 dxdy |
|||||||||
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
Ω |
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ω |
|
|
|
|
|
средняя квадратическая погрешность; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
δ∞ = |
|
|
|
ϕ −f |
|
|
|
|
C (Ω) = |
sup |
|
f (x, y)−ϕ(x, y) |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
(x, y ) Ω |
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
максимальная абсолютная погрешность.
А теперь запишем соответствующую программу на языке Maple V Release 5.
Построение сплайн-поверхности*
Начнем с того, что зададим некоторую тестовую функцию:
>restart;
>f: = (x,y) -> x^2 + y^2;
Вызовем необходимые для дальнейшей работы пакеты linalg и plots :
> with (linalg): with (plots):
Warning, new definition for norm Warning, new definition for trace
Опишем процедуру ввода случайной последовательности N точек в квадрате −1 < x, y ≤1 :
> Vv := proc (N) local p,pt,i; p := rand (-100..100);
pt := [seq (p(i)/100., i = 1..2*N)]; matrix (N, 2, pt);
end:
Теперь зададим N=10 и получим соответствующий двумерный массив T, содержащий координаты десяти узлов интерполяции:
>N := 10:
>T := Vv(N):
Сформируем матрицу MM системы линейных алгебраических уравнений для вычисления коэффициентов сплайн-поверхности:
> Ro := proc (x1,x2,y1,y2) local r; r := (x1-x2)^2 + (y1-y2)^2;
if r = 0 then 0 else r*ln(r) fi end:
>M := matrix (N, N, []):
>i := 1:
>while i <= N do M [i, i] := 0;
* Первоначальный вариант этой Maple-программы был разработан Соколовой Н.А. в 1998 г.
30