Файл: Mathematica для математиков. Часть Реализация основных понятий математического анализа.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.10.2023
Просмотров: 283
Скачиваний: 7
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
140
При выводе функции InterpolatingFunction[{{1,6}},"<>"] показан диапазон интерполяции {1,6}. Именно его мы использовали в качестве диапазона при построении графика функции f[x]. Попробуйте использовать более широкий диапазон Plot[f[x],{x,0,7},... и вы получите предупреждающее сообщение, хотя график будет построен.
Если нужно вычислить значение интерполяционной функции в точке, то можно использовать следующий формат Interpolation[data,x
точки
].
????????????????????????????????????????????????????[????????????????, ????. ????]
2.25
В формате вызова Interpolation[{{x
1
,y
1
},{x
2
,y
2
},...}] задаются обе координаты точек.
???????????? = ????, ???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? ;
???? = ???????????????????????????????????????????????????? ????????????
???? ????. ????
????????????????[????[????], {????, ????, ????}, ???????????????????????????????????? → {????????????????????, ????????????????????????????????????[????. ????????????]},
????????????????????????−> {????????????, ????????????????????????????????????[????. ????????], ????????????????????/@????????????}]
InterpolatingFunction[{{0,6}}, " <> "]
4.59375
Обратите внимание, что абсциссы точек не обязаны следовать в возрастающем порядке.
На участках между исходными точками интерполяционная функция представляется полиномами, степень которых можно задавать с помощью опции InterpolationOrder. В следующем коде на одном наборе точек мы создаем четыре функции с порядком интерполяции 0, 1, 2, 3 и строим их графики.
???????????? = {{????, ????}, {????, ????}, {????, ????}, {????, ????}, {????, ????}, {????, ????}};
????????????????????[????????????????????????????????????????????????["????" <> ????????????????????????????????[????]][????_] =
????????????????????????????????????????????????????[????????????, ???????????????????????????????????????????????????????????????????????? → ????][????], {????, ????, ????}];
????????????????[{????????[????], ????????[????], ????????[????], ????????[????]}, {????, ????, ????},
???????????????????????????????????? → {{????????????, ????????????????????????????????????[????. ????????]}, {????????????????, ????????????????????????????????????[????. ????????]},
{????????????????????, ????????????????????????????????????[????. ????????]}, {????????????????????, ????????????????????????????????????[????. ????????]}},
????????????????????????−> {????????????, ????????????????????????????????????[????. ????????], ????????????????????/@????????????}]
Нулевой порядок создает кусочно – постоянную интерполяционную функцию, первый – непрерывную кусочно – линейную и т.д. Однако это не сплайн – интерполяция. Это видно из графиков производных.
141
{????????????????[????????????????????????????????[????[????????[????], ????]], {????, ????, ????}, ???????????????????????????????????? → {????????????????????, ????????????????????????????????????[????. ????????]}],
???????????????? ???????????????????????????????? ???? ???????? ???? , ???? , ????, ????, ???? , ???????????????????????????????????? → ????????????????????, ???????????????????????????????????? ????. ???????? ,
????????????????[????????????????????????????????[????[????????[????], ????]], {????, ????, ????}, ???????????????????????????????????? → {????????????????????, ????????????????????????????????????[????. ????????]}]}
Обычно при сплайн – интерполяции n
– го порядка в точках стыка сегментов кусочного полинома выполняется непрерывность производных до порядка n
-1 включительно. Из графиков видно, что уже первая производная интерполяционных функций имеет разрывы в точках стыка. Ниже мы узнаем, что по умолчанию выполняется интерполяция Эрмита.
В связи со сказанным, имеется формат вызова функции
Interpolation
, в котором можно задавать значения производных в узловых точках. Этот формат имеет вид
Interpolation[{{{x
1
},y
1
,y
1
’,...},{{x
2
},y
2
,y
2
’,...},...}], где x i
– абсцисса i-ой точки, y i
– ордината этой точки, y i
’
– значение первой производной и т.д.
В следующем примере мы строим три интерполяционные функции 3 – го порядка на одном и том же наборе точек {x i
,y i
}. Для функции f3 мы не задаем значение производных, для функции g3 – задаем значения первых производных, для функции h3 – задаем значения первых и вторых производных в узловых точках.
???????????????? = ????, ???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? ;
???????????????? = ???? , ????, ???? , ???? , ????, ???? , ???? , ????, −???? , ???? , ????, ???? , ???? , ????, ???? , ???? , ????, ???? ;
???????????????? = {{{????}, ????, ????, ????}, {{????}, ????, ????, ????}, {{????}, ????, −????, ????}, {{????}, ????, ????, ????},
{{????}, ????, ????, ????}, {{????}, ????, ????, ????}};
???????? = ???????????????????????????????????????????????????? ????????????????, ???????????????????????????????????????????????????????????????????????? → ????
???????? = ???????????????????????????????????????????????????? ????????????????, ???????????????????????????????????????????????????????????????????????? → ????
???????? = ???????????????????????????????????????????????????? ????????????????, ???????????????????????????????????????????????????????????????????????? → ????
????????????????[{????????[????], ????????[????], ????????[????]}, {????, ????, ????}, ???????????????????????????????????? → {{????????????, ????????????????????????????????????[????. ????????]},
{????????????????, ????????????????????????????????????[????. ????????]}, {????????????????????, ????????????????????????????????????[????. ????????]}},
????????????????????????−> {????????????, ????????????????????????????????????[????. ????????], ????????????????????/@????????????}]
Как видим, кривые не очень отличаются. Однако, если построить графики первых производных этих функций, то различие существенное.
{????????????????[????????????????????????????????[????[????????[????], ????]], {????, ????, ????}, ???????????????????????????????????? → {????????????????????, ????????????????????????????????????[????. ????????]}],
???????????????? ???????????????????????????????? ???? ???????? ???? , ???? , ????, ????, ???? , ???????????????????????????????????? → ????????????????????, ???????????????????????????????????? ????. ???????? ,
????????????????[????????????????????????????????[????[????????[????], ????]], {????, ????, ????}, ???????????????????????????????????? → {????????????????????, ????????????????????????????????????[????. ????????]}]}
142
Как видно, производная функции f3 имеет разрыв, функция g3’ непрерывна, но имеет резкие изломы, функция h3' уже гладкая.
Проверим качество интерполяции следующим примером, задав узлы на синусоиде.
???????? = ???????????????? ???????????????????? ????, ???????????? ???????? , ????, −????, ????, ????. ????
???? = ???????????????????????????????????????????????????? ???????? ;
????????????????[{????????????[????????], ????[????]}, {????, −????, ????},
???????????????????????????????????? → ????????????, ???????????????????????????????????? ????. ???????? , ????????????????, ???????????????????????????????????? ????. ???????? ,
????????????????????????−> {????????????????????, ????????????????????????????????????[????. ????????], ????????????????????/@????????}]
{{−1. ,0}, {−0.5, −1. }, {0,0}, {0.5,1. }, {1. ,0}}
Если в этом примере шаг точек уменьшить, то графики будут сливаться.
Можно приближать многомерные данные. Например в двумерном случае формат вызова может быть следующим
Interpolation[{{{x
1
,y
1
},z
1
},{{x
2
,y
2
},z
2
}},...}], где {x i
,y i
} – координаты точки на плоскости, а z i
– значение функции в этой точке.
???????????????? = ???????????????????????????? ???????????????????? ????, ???? , ???? − ????
????
− ????
????
, ????, −????, ????, ???? , ????, −????, ????, ???? , ???? ;
???????????????? = ????????????????????????????????????????????????????[????????????????, ???????????????????????????????????????????????????????????????????????? → ????]
????????????????[????????????????????????[????????????????[????, ????], {????, −????, ????}, {????, −????, ????}, ???????????????????????????????????? → ????????????????????????????[. ????]],
????????????????????????????????????????[{????????????, ????????????????????????????????????[????. ????????],
????????????[????????????????????, ????????????????????????????????????[????????????????????????????[????????????????], ????]]}]]
В многомерном случае, кроме значения функции в узлах можно задавать обе частные производные (т.е. в узле задавать градиент).
????[????_, ????_] = ???? − ????
????
− ????
????
;
???????????????? = ????????????????????????????[????????????????????[????????????????????????????????[{{????, ????}, ????[????, ????], ????[????[????, ????], {{????, ????}}]}],
{????, −????, ????, ????. ????}, {????, −????, ????, ????. ????}], ????]
{{{-1.,-1.},-1.,{2.,2.}},{{-1.,-0.5},-0.25,{2.,1.}},...
???? = ????????????????????????????????????????????????????[????????????????]
????????????????????????????????????????????[????[????, ????], {????, −????, ????}, {????, −????, ????}]
143
У функции Interpolation есть опция Method, которая задает метод полиномиальной интерполяции. Это может быть сплайн – интерполяция или интерполяция Эрмита. В следующем примере мы строим интерполяционные функции, используя оба метода, причем строим сплайны 2 – го и 3 – го порядков.
???????????????? = ????, ???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? ;
???????? = ???????????????????????????????????????????????????? ????????????????, ???????????????????????? → "Hermite" ;
???????????? = ????????????????????????????????????????????????????[????????????????, ???????????????????????? → "????????????????????????", ???????????????????????????????????????????????????????????????????????? → ????];
???????????? = ????????????????????????????????????????????????????[????????????????, ???????????????????????? → "????????????????????????", ???????????????????????????????????????????????????????????????????????? → ????];
{????????????????[{????????[????], ????????????[????], ????????????[????]}, {????, ????, ????}, ???????????????????????????????????? → {????????????, ????????????????, ????????????????????},
???????????????????????? → {????????????????????, ????????????????????????????????????[????. ????????], ????????????????????/@????????????????}],
????????????????[????????????????????????????????[{????[????????[????], ????], ????[????????????[????], ????], ????[????????????[????], ????]}], {????, ????, ????},
???????????????????????????????????? → {????????????, ????????????????, ????????????????????}]}
Здесь на графике слева показаны интерполяционные кривые, а справа – их производные. Из правого графика видно, что интерполяционная функция
Эрмита FH имеет разрыв производной. Производная сплайна 2 – го порядка
FS2 непрерывна, но имеет изломы. Гладкость производной сплайна 3 – го порядка FS3 говорит о том, что у него непрерывна 2 – я производная.
Использование сплайн интерполяции невозможно, когда в узлах задаются значения производных. Например следующий код выводит сообщение о том, что сплайн – интерполяция невозможна. После этого автоматически выполняется интерполяция Эрмита.
???????????????? = ???? , ????, ???? , ???? , ????, ???? , ???? , ????, −???? , ???? , ????, ???? , ???? , ????, ???? , ???? , ????, ???? ;
???????? = ???????????????????????????????????????????????????? ????????????????, ???????????????????????? → Spline ;
????????[????. ????]
Interpolation::mspl: The Spline method could not be used because the data could not be coerced to machine real numbers
4.3125
Имеется еще опция PeriodicInterpolation. Если она принимает значение
True
, то строится периодическая интерполирующая функция.
???????????????? = {{????, ????}, {????, ????}, {????, ????}, {????, ????}, {????, ????}, {????, ????}};
???? = ???????????????????????????????????????????????????? ????????????????, ???????????????????????????????????????????????????????????????????????????????????? → ???????????????? ;
????????????????[????[????], {????, −????, ????????}, ???????????????????????????????????? → {????????????????????, ????????????????????????????????????[????. ????????]},
????????????????????????−> {????????????, ????????????????????????????????????[????. ????????], ????????????????????/@????????????????}]
144
При использовании этой опции следует помнить, что значения в первом и последнем узле должны задаваться одинаковыми.
Можно интегрировать интерполяционную функцию. В следующем коде мы строим графики интерполяционной кривой и ее первообразной.
???????????????? = ????, ???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? ;
???? = ???????????????????????????????????????????????????? ???????????????? ;
???? ????_ = ???????????????????????????????????? ???? ???? , ????
????????????????[{????[????], ????[????]}, {????, ????, ????}, ???????????????????????????????????? → ????????????????????????????????????[????. ????????]]
Сделаем еще несколько замечаний о функции Interpolation.
Когда порядок интерполяции задан по умолчанию, нужно передавать не менее 4 – х узлов.
????????????????????????????????????????????????????[{{????, ????}, {????, ????}, {????, ????}}];
Interpolation::inhr: Requested order is too high; order has been reduced to {2}.
Интерполяционная функция всегда создается непрерывной, но необязательно дифференцируемой.
Значения функции можно задавать комплексными, но координаты точек должны быть вещественными.
Элементы структуры объекта InterpolatingFunction[{{1,6}},"<>"] можно проанализировать с помощью индексации. Эти элементы обычно не отображаются в выводе, но они всегда присутствуют.
???????????????? = ????, ???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? , ????, ???? ;
???? = ???????????????????????????????????????????????????? ????????????????, ???????????????????????????????????????????????????????????????????????? → ???? ;
{????[[????]], ????[[????]], ????[[????]], ????[[????]], ????[[????]], ????[[????]]}
InterpolatingFunction[{{0,6}},<>]
{InterpolatingFunction,{{0,6}},
{4,3,0,{6},{3},0,0,0,0,Automatic},
{{0,1,3,4,5,6}},{{1},{2},{5},{4},{0},{1}},{Automatic}}
Элемент f[[1]] содержит диапазон {{0,6}}, на котором построена интерполяционная функция. Элемент f[[3]] содержит абсциссы узлов, а элемент f[[4]] содержит их ординаты (при интерполяции по Эрмиту). Меняя данные и значения опций, можно сделать вывод, что элемент f[[2,4]] хранит количество узлов, элемент f[[2,5]] на единицу больше порядка интерполяции InterpolationOrder.
145
3.7.3
Аппроксимация
В Mathematica имеются функции, которые решают близкие к интерполяции по смыслу задачи.
Функция Fit выполняет приближение методом наименьших квадратов набора данных с помощью линейной комбинации заданного набора функций.
Например, пусть заданы точки и требуется приблизить их линейной функцией. Это можно сделать следующим образом.
???????????????? = {{????, ????}, {????, ????}, {????, ????}, {????, ????}, {????, ????}, {????, ????}};
???????????????? = ???????????????? = ????????????[????????????????, {????, ????}, ????]
0.28571429 + 0.48571429 ????
????????????????[????????????????[????????????????, {????, −????, ????}, ???????????????????????????????????? → {????????????????????, ????????????????????????????????????[????. ????????]}],
????????????????????????????????[{????????????, ????????????????????????????????????[????. ????????], ????????????????????[????????????????]}]]
Здесь для приближения мы использовали две функции: 1 (единица) и x. Для приближения тех же данных можно использовать другие функции или больший набор «пробных» функций. В следующем примере мы используем четыре функции: 1 (единица), x,
x
sin и
x
e
???????????????? = ???????????? ????????????????, ????, ????, ???????????? ???? , ???????????? −???? , ????
????????????????[????????????????[????????????????, {????, −????, ????}, ???????????????????????????????????? → {????????????????????, ????????????????????????????????????[????. ????????]}],
???????????????????????????????? ????????????, ???????????????????????????????????? ????. ???????? , ???????????????????? ???????????????? ,
???????????????????????????????????????? → {????, ????}, ???????????????????????????????????? → ????????????]
-2.2151282+3.0802025
-x
+1.1566815 x+0.45308887 Sin[x]
В следующем примере мы выбираем дискретный набор точек на кривой
x
x
cos
2 1
sin
и аппроксимируем его функциями
x
sin и
x
cos .
???????????????? = ????????????????????[{????, ????????????[????] +
????
????
????????????[????]}, {????, ????, ????????, ????/????}]
???????????????? = ????????????????[???????????? ????????????????, ????, ????, ???????????? ???? , ???????????? ???? , ???? ]
????????????????[????????????????[????????????????, {????, −????, ????}, ???????????????????????????????????? → {????????????????????, ????????????????????????????????????[????. ????????]}],
???????????????????????????????? ????????????, ???????????????????????????????????? ????. ???????? , ???????????????????? ???????????????? ,
???????????????????????????????????????? → {????, ????}, ???????????????????????????????????? → ????????????]
0.5 Cos[x]+1.0 Sin[x]
146
После отбрасывания погрешностей вычислений функцией Chop мы получили исходное выражение. Как видим, приближение очень хорошее.
Можно приближать множества точек в пространстве с помощью функций
2 – х переменных.
???????????????? = ????????????????????????????[????????????????????[{????, ????, ???? − ????
????
− ????
????
}, {????, −????, ????, ????}, {????, −????, ????, ????}], ????]
???????????????? = ????????????????[????????????[????????????????, {????, ????, ????, ????
????
, ????
????
, ????????}, {????, ????}]]
{{−1, −1, −1}, {−1,0,0}, {−1,1, −1}, {0, −1,0},
{0,0,1}, {0,1,0}, {1, −1, −1}, {1,0,0}, {1,1, −1}}
1.-1.0 x
2
-1.0 y
2
????????????????[????????????????????????[????????????????, {????, −????, ????}, {????, −????, ????}, ???????????????????????????????????? → ????????????????????????????[. ????]],
????????????????????????????????????????[{????????????, ????????????????????????????????????[????. ????????], ????????????[????????????????????, ????????????????]}]]
С другими функциями системы близкими к рассмотренным по смыслу, вы можете познакомиться по справочной системе.
1 ... 11 12 13 14 15 16 17 18 19
3.8
Решение прикладных задач.
Приложения математического анализа неисчислимы. Здесь мы выбрали несколько тем, которые демонстрируют возможности описанных в данной главе функций системы.
3.8.1
Физические приложения кратных интегралов.
Центр тяжести тела. Пусть
y
x,
представляет плотность материала двумерного тела (масса единицы площади в точке x,y). Тогда масса тела, занимающего область D на плоскости, вычисляется по формуле
D
y
d
x
d
y
x
M
,
(1)
Положение
c
c
y
x ,
центра тяжести тела определяется по формулам
D
c
y
d
x
d
y
x
x
M
x
,
1
,
D
c
y
d
x
d
y
x
y
M
y
,
1
(2)
Когда говорят о центре тяжести фигуры, то подразумевают, что плотность
1
,
y
x
Пример. Найти центр тяжести первого квадранта эллипса. Имеем
????????????????????[????, ????];
???????????? = ????????????????????????????????[{????, ????, ????}, {????, ????, ????}, ????????????????????????????????????????????−> ???? > 0 && ???? > 0];
???????? =
????
????
????
????
+
????
????
????
????
≤ ???? && ???? ≥ ???? && ???? ≥ ????;
???? = ????????????????????????????????????[????????????????????[????????], ????????????];
147
???????? = ????????????????????????????????????[???? ????????????????????[????????], ????????????];
???????? = ????????????????????????????????????[???? ????????????????????[????????], ????????????];
{????????, ????????} = {????????, ????????}/????
4????
3????
,
4????
3????
???? = ????; ???? = ????;
???????? = ????????????????????????????????????????[????????, {????, ????, ????}, {????, ????, ????}, ???????????????????????????????????????????? → ????????????????????????????????????];
???????? = ????????????????????????????????[{????????????, ????????????????????????????????????[????. ????????], ????????????????????[{????????, ????????}]}];
????????????????[????????, ????????]
□
Пример. Найти центр тяжести фигуры, ограниченной ветвью циклоиды
t
a
y
t
t
a
x
cos
1
,
sin
и осью x.
В формуле
Грина
L
D
y
d
Q
x
d
P
y
d
x
d
y
P
x
Q
положим
0
,
2
/
2
P
x
Q
. Тогда она принимает вид
L
D
y
d
x
y
d
x
d
x
2 2
, где L – контур, составленный из циклоиды и отрезка
2
,
0
оси Ox, на котором
0
y
d
Поэтому под контуром L можно понимать только дугу циклоиды. Аналогично, полагая
2
/
,
0 2
y
P
Q
, получаем
L
D
x
d
y
y
d
x
d
y
2 2
, где L – контур, составленный из циклоиды и отрезка
2
,
0
оси Ox, на котором
0
y
и, поэтому под контуром L можно понимать только одну дугу циклоиды. В результате формулы (2) принимают вид
L
c
y
d
x
M
x
2 2
1
и
L
c
x
d
y
M
y
2 2
1
, где M определяется как и раньше по (1). Заменяя x и y их параметрическим представлением, приходим к необходимым формулам вычисления центра тяжести нашей фигуры.
???? =. ; ???? = ????(???? − ????????????[????]); ???? = ????(???? − ????????????[????]);
???? = −????????????????????????????????????[????????[????, ????], {????, ????, ????????}];
???????? = −????????????????????????????????????[????
????
????[????, ????], {????, ????, ????????}]/????;
???????? = −????????????????????????????????????[−????
????
????[????, ????], {????, ????, ????????}]/????;
{????????, ????????} = {????????, ????????}/????
{???? ????,
5????
6
}
Обратите внимание на минусы, которые необходимо поставить перед выражениями для M, Mx и My, поскольку циклоида обходит область в направлении по часовой стрелки, т.е. в отрицательном направлении.