Построить поверхности уровня функции. Функции нескольких переменных

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

Предлагается простой класс для построения линий уровня (изолиний) функции: Z=F(X,Y) в виде линий на плоскости X-Y, удовлетворяющих уравнениям Z=const (где const - набор заданных значений).

Предполагается, что функция Z задана в виде массива z на произвольной сетке с четырехугольными ячейками. Сетка задается двумя массивами x, y, где J и K размеры сетки.

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

Исходный текст снабжен подробными комментариями.

Файл LinesLevels.cs:

Using System.Collections.Generic; using System.Linq; using System.Windows; namespace WpfLinesLevels { public class LinesOfLevels { private int J, K; private double[,] X; private double[,] Y; private double[,] Z; // Список изолиний public List Lines { get; set; } ///

/// Подготовка /// /// Массив уровней /// Координаты X области /// Координаты Y области /// Сеточная функция public LinesOfLevels(double _levels, double[,] _x, double[,] _y, double[,] _z) { Lines = new List(_levels.Count()); foreach (double l in _levels) { Lines.Add(new LineLevel(l)); } X = _x; Y = _y; Z = _z; J = X.GetLength(0); K = X.GetLength(1); } /// /// Расчет изолиний. /// public void Calculate() { for (int j = 0; j < J - 1; j++) for (int k = 0; k < K - 1; k++) { Ceil ir = new Ceil(j, k, X, Y, Z); for (int l = 0; l < Lines.Count(); l++) ir.AddIntoLineLevel(Lines[l]); } } } /// /// Одна изолиния /// public class LineLevel { // Список точек изолинии в виде пар точек // принадлежащих одной четырехугольной ячеейке public ListPairs { get; set; } // Уровень изолинии public double Level { get; set; } public LineLevel(double _level) { Level = _level; Pairs = new List(); } } /// /// Пара точек изолинии, принадлежащая одной ячейке /// public class PairOfPoints { public ListPoints { get; set; } public PairOfPoints() { Points = new List(); } } /// /// Угол ячейки. /// Индексы для определения одного угла четырехугольной ячейки /// internal struct Dot { internal int j { get; set; } internal int k { get; set; } internal Dot(int _j, int _k) { j = _j; k = _k; } } /// /// Четырехугольная ячейка сетки. Определяет текущую ячейку. /// Рассчитывает отрезки изолиний в ячейке /// internal class Ceil { // Углы ячейки private Dot d = new Dot; // Координатные точки углов private Point r = new Point; // Массивы координат всей области private double[,] X; private double[,] Y; // Массив сеточной функции private double[,] Z; /// /// Определение ячейки /// Определяется левым нижним углом. Циклы перебора индексов должны быть на 1 меньше размерностей J,K массивов /// /// j - индекс левого нижнего угла /// k - индекс левого нижнего угла /// Массив X /// Массив Y /// Массив сеточной функции Z internal Ceil(int _j, int _k, double[,] _x, double[,] _y, double[,] _z) { d = new Dot(_j, _k); d = new Dot(_j + 1, _k); d = new Dot(_j + 1, _k + 1); d = new Dot(_j, _k + 1); X = _x; Y = _y; Z = _z; r = dotPoint(d); r = dotPoint(d); r = dotPoint(d); r = dotPoint(d); } /// /// Определение координатной точки Point угла /// /// Угол, заданный стуктурой Dot /// private Point dotPoint(Dot _d) { return new Point(X[_d.j, _d.k], Y[_d.j, _d.k]); } /// /// Определение функции в заданном углу /// /// Угол, заданный стуктурой Dot /// private double dotZ(Dot _d) { return Z[_d.j, _d.k]; } /// /// Определение пары точек, через которые проходит линия уровня /// Точки на границах ячейки определяются линейной интераоляцией. /// /// Значение уровня функции /// private PairOfPoints ByLevel(double _l) { PairOfPoints p = new PairOfPoints(); // Ребро 0 if ((dotZ(d) >= _l && dotZ(d) < _l) || (dotZ(d) > _l && dotZ(d) <= _l)) { double t = (_l - dotZ(d)) / (dotZ(d) - dotZ(d)); double x = r.X * t + r.X * (1 - t); double y = r.Y * t + r.Y * (1 - t); p.Points.Add(new Point(x, y)); } // Ребро 1 if ((dotZ(d) >= _l && dotZ(d) < _l) || (dotZ(d) > _l && dotZ(d) <= _l)) { double t = (_l - dotZ(d)) / (dotZ(d) - dotZ(d)); double x = r.X * t + r.X * (1 - t); double y = r.Y * t + r.Y * (1 - t); p.Points.Add(new Point(x, y)); if (p.Points.Count == 2) return p; } // Ребро 2 if ((dotZ(d) >= _l && dotZ(d) < _l) || (dotZ(d) > _l && dotZ(d) <= _l)) { double t = (_l - dotZ(d)) / (dotZ(d) - dotZ(d)); double x = r.X * t + r.X * (1 - t); double y = r.Y * t + r.Y * (1 - t); p.Points.Add(new Point(x, y)); if (p.Points.Count == 2) return p; } // Ребро 3 if ((dotZ(d) >= _l && dotZ(d) < _l) || (dotZ(d) > _l && dotZ(d) <= _l)) { double t = (_l - dotZ(d)) / (dotZ(d) - dotZ(d)); double x = r.X * t + r.X * (1 - t); double y = r.Y * t + r.Y * (1 - t); p.Points.Add(new Point(x, y)); } return p; } /// /// Добавление пары точек в линию уравня /// /// Линия уровня internal void AddIntoLineLevel(LineLevel _lL) { PairOfPoints lp = ByLevel(_lL.Level); if (lp.Points.Count > 0) _lL.Pairs.Add(lp); } } }
Для демонстрации работы класса предлагается небольшое тестовое приложение WPF, которое строит линии уровня для функции вида: z = x^2 + y^2 на сетке 10 на 10.

Файл MainWindow.xaml:


И файл кода MainWindow.xaml.cs:

Using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Shapes; namespace WpfLinesLevels { ///

/// Логика взаимодействия для MainWindow.xaml /// public partial class MainWindow: Window { private double Xmax; private double Xmin; private double Ymax; private double Ymin; private double xSt; private double ySt; public MainWindow() { InitializeComponent(); // Определение уровней, которые будут отображаться double levels = { 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }; double[,] X = new double; double[,] Y = new double; double[,] Z = new double; // Переменные для пересчета физических координат в экранные Xmax = 10; Xmin = 0; Ymax = 10; Ymin = 0; xSt = 525 / (Xmax - Xmin); ySt = 525 / (Ymax - Ymin); // Определение массивов координат и функции for (int k = 0; k < 10; k++) for (int j = 0; j < 10; j++) { X = j; Y = k; Z = j * j + k * k; } // Создание изолиний LinesOfLevels lol = new LinesOfLevels(levels, X, Y, Z); // Их расчет lol.Calculate(); // Построение DrowLevelLine(lol, X, Y); } /// /// Метод построения изолиний /// /// Расчитанный объект с изолиниями /// массив X координат /// массив Y координат private void DrowLevelLine(LinesOfLevels lL, double[,] x, double[,] y) { Canvas can = new Canvas(); foreach (LineLevel l in lL.Lines) { foreach (PairOfPoints pp in l.Pairs) { if (pp.Points.Count() == 2) { Line pl = new Line(); pl.Stroke = new SolidColorBrush(Colors.BlueViolet); pl.X1 = xCalc(pp.Points.X); pl.X2 = xCalc(pp.Points.X); pl.Y1 = yCalc(pp.Points.Y); pl.Y2 = yCalc(pp.Points.Y); can.Children.Add(pl); } } } can.Margin = new Thickness(10, 10, 10, 10); can.VerticalAlignment = VerticalAlignment.Stretch; can.HorizontalAlignment = HorizontalAlignment.Stretch; grid1.Children.Add(can); } /// /// Пересчет физической координаты X в экранную /// /// Физическая кордината X /// Экранная координата X private double xCalc(double _x) { return xSt * (_x - Xmin); } /// /// Пересчет физической координаты Y в экранную /// /// Физическая кордината Y /// Экранная координата Y private double yCalc(double _y) { return ySt * (Ymax - _y); } } }
Результат работы тестового примера представлен на рисунке.

Функция нескольких переменных. Общие свойства. Непрерывность функции. Линии уровня, поверхности уровня.Семинар 21

Определение 1
Если каждой паре (x,y) значений двух независимых друг от друга переменных
величин x,y из некоторой области их изменения D соответствует
определенное значение величины z, то z есть функция двух независимых
переменных x,y, определенных в области D.
Обозначение: z=f(x,y), z=F(x,y), и так далее.
Способы задания функции: аналитический, табличный, графический.
Определение 2
Совокупность пар (x,y) значений x,y, при которых определена функция
z=f(x,y), называется областью определения или областью существования этой
функции.
Пусть дана функция z=f(x,y), определенная в некоторой области G плоскости
OXY. Рассмотрим некоторую определенную точку
, лежащую в
области G или на ее границе.
Определение 3
Число А называется пределом функции f(x,y) при стремлении точки M(x,y) к
точке
, если для каждого числа
найдется такое число r>0, что
для всех точек M(x,y), для которых выполняется неравенство
имеет
место неравенство

Определение 4
Пусть точка
принадлежит области определения функции f(x,y).
Функция z=f(x,y) называется непрерывной в точке
, если имеет место
равенство
(1)
Причем точка M(x,y) стремится к точке
произвольным образом,
оставаясь в области определения функции.
Функция, непрерывная в каждой точке некоторой области, называется
непрерывной в этой области.
Если в некоторой точке
не выполняется условие (1), то точка
называется точкой разрыва функции z=f(x,y). Условие (1) может не
выполняться, например, в следующих случаях:
1) z=f(x,y) определена во всех точках некоторой окрестности точки
,
за исключением самой точки
.
2) z=f(x,y) определена во всех точках окрестности точки
, но не
существует
3) z=f(x,y) определена во всех точках окрестности точки
и
существует
, но
Определение 5
Линией уровня функции z=f(x,y) называется линия z=f(x,y)=с на плоскости
OXY, в точках которой функция сохраняет постоянное значение z=c.

Определение 6
Поверхностью уровня функции u=f(x,y,z) называется поверхность u=f(x,y,z)=с
плоскости, в точках которой функция сохраняет постоянное значение u=c.
Примеры с решениями
1. Найти область определения функции
.
Решение.
Функция принимает действительные значения при условии
или
, т. е. областью определения данной функции является круг радиуса
а с центром в начале координат, включая граничную окружность.
2. Найти область определения функции
.
Решение.
Функция определена, если
Областью определения
функции является плоскости, заключенная между двумя параболами
, за исключением точки О(0,0).
3. Найти область определения функции
.
Решение.
Данная функция зависит от трех переменных и принимает действительные
значения при
, т. е. область определения –
часть пространства, заключенная внутри полостей двуполостного
гиперболоида.

4. Найти линии уровня функции
Решение.
Уравнение семейства линий уровня имеет вид
.
Придавая С различные действительные значения, получим концентрические
окружности с центром в начале координат.
5. Найти поверхности уровня функции
Решение.
Уравнение семейства поверхностей имеет вид
.
Если С=0, то получаем
- конус.
Если С>0, то получаем
- семейство однополостных
гиперболоидов;
Если С<0, то получаем
- семейство двуполостных гиперболоидов;
Примеры для самостоятельного решения
1. Найти области определения функции
2. Найти линии уровня функций:

Если каждой точке X = (х 1 , х 2 , …х n) из множества {X} точек n–мерного пространства ставится в соответствие одно вполне определенное значение переменной величины z, то говорят, что задана функция n переменных z = f(х 1 , х 2 , …х n) = f (X).

При этом переменные х 1 , х 2 , …х n называют независимыми переменными или аргументами функции, z - зависимой переменной , а символ f обозначает закон соответствия . Множество {X} называют областью определения функции (это некое подмножество n-мерного пространства).

Например, функция z = 1/(х 1 х 2) представляет собой функцию двух переменных. Ее аргументы – переменные х 1 и х 2 , а z – зависимая переменная. Область определения – вся координатная плоскость, за исключением прямых х 1 = 0 и х 2 = 0, т.е. без осей абсцисс и ординат. Подставив в функцию любую точку из области определения, по закону соответствия получим определенное число. Например, взяв точку (2; 5), т.е. х 1 = 2, х 2 = 5, получим
z = 1/(2*5) = 0,1 (т.е. z(2; 5) = 0,1).

Функция вида z = а 1 х 1 + а 2 х 2 + … + а n х n + b, где а 1 , а 2 ,…, а n , b - по стоянные числа, называют линейной . Ее можно рассматривать как сумму n линейных функций от переменных х 1 , х 2 , …х n . Все остальные функции называют нелинейными .

Например, функция z = 1/(х 1 х 2) – нелинейная, а функция z =
= х 1 + 7х 2 - 5 – линейная.

Любой функции z = f (X) = f(х 1 , х 2 , …х n) можно поставить в соответствие n функций одной переменной, если зафиксировать значения всех переменных, кроме одной.

Например, функции трех переменных z = 1/(х 1 х 2 х 3) можно поставить в соответствие три функции одной переменной. Если зафиксировать х 2 = а и х 3 = b то функция примет вид z = 1/(аbх 1); если зафиксировать х 1 = а и х 3 = b, то она примет вид z = 1/(аbх 2); если зафиксировать х 1 = а и х 2 = b, то она примет вид z = 1/(аbх 3). В данном случае все три функции имеют одинаковый вид. Это не всегда так. Например, если для функции двух переменных зафиксировать х 2 = а, то она примет вид z = 5х 1 а, т.е. степенной функции, а если зафиксировать х 1 = а, то она примет вид , т.е. показательной функции.

Графиком функции двух переменных z = f(x, у) называется множество точек трёхмерного пространства (х, у, z), аппликата z которых связана с абсциссой х и ординатой у функциональным соотношением
z = f (x, у). Этот график представляет собой некоторую поверхность в трехмерном пространстве (например, как на рисунке 5.3).

Можно доказать, что если функция – линейная (т.е. z = ax + by + c), то ее график представляет собой плоскость в трехмерном пространстве. Другие примеры трехмерных графиков рекомендуется изучить самостоятельно по учебнику Кремера (стр. 405-406).

Если переменных больше двух (n переменных), то график функции представляет собой множество точек (n+1)-мерного пространства, для которых координата х n+1 вычисляется в соответствии с заданным функциональным законом. Такой график называют гиперповерхностью (для линейной функции – гиперплоскостью ), и он также представляет собой научную абстракцию (изобразить его невозможно).

Рисунок 5.3 – График функции двух переменных в трехмерном пространстве

Поверхностью уровня функции n переменных называется множество точек в n–мерном пространстве, таких, что во всех этих точках значение функции одно и то же и равно С. Само число С в этом случае называется уровнем .

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

Для функции двух переменных поверхность уровня принимает вид линии уровня .

Например, рассмотрим z = 1/(х 1 х 2). Возьмем С = 10, т.е. 1/(х 1 х 2) = 10. Тогда х 2 = 1/(10х 1), т.е. на плоскости линия уровня примет вид, представленный на рисунке 5.4 сплошной линией. Взяв другой уровень, например, С = 5, получим линию уровня в виде графика функции х 2 = 1/(5х 1) (на рисунке 5.4 показана пунктиром).

Рисунок 5.4 - Линии уровня функции z = 1/(х 1 х 2)

Рассмотрим еще один пример. Пусть z = 2х 1 + х 2 . Возьмем С = 2, т.е. 2х 1 + х 2 = 2. Тогда х 2 = 2 - 2х 1 , т.е. на плоскости линия уровня примет вид прямой, представленный на рисунке 5.5 сплошной линией. Взяв другой уровень, например, С = 4, получим линию уровня в виде прямой х 2 = 4 - 2х 1 (на рисунке 5.5 показана пунктиром). Линия уровня для 2х 1 + х 2 = 3 показана на рисунке 5.5 точечной линией.

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

Рисунок 5.5 - Линии уровня функции z = 2х 1 + х 2

Определение функции нескольких переменных

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

Пример 1. Площадь S прямоугольника со сторонами, длины которых равны х и у , выражается формулой S = ху . Каждой паре значений х и у соответствует определенное значение площади S ; S есть функция двух переменных.

Пример 2. Объем V прямоугольного параллелепипеда с ребрами, длины которых равны х , у , z , выражается формулой V = xyz . Здесь V есть функция трех переменных х , у , z .

Пример 3. Дальность R полета снаряды, выпущенного с начальной скоростью v 0 из орудия, ствол которого наклонен к горизонту под углом , выражается формулой
(если пренебречь сопротивлением воздуха). Здесьg – ускорение силы тяжести. Для каждой пары значений v 0 и  эта формула дает определенное значение R , т.е. R является функцией двух переменных v 0 и .

Пример 4.
. Здесьи есть функция четырех переменных х , у , z , t .

Определение 1. Если каждой паре (х , у ) значений двух независимых друг от друга переменных величин х и у из некоторой области их изменения D , соответствует определенное значение величины z , то мы говорим, что z есть функция двух независимых переменных х и у , определенная в области D .

Символически функция двух переменных обозначается так:

z = f (x , y ), z = F (x , y ) и т.д.

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

S = ху

В этой таблице на пересечении строки и столбца, соответствующих определенным значениям х и у , проставлено соответствующее значение функции S . Если функциональная зависимость z = f (x , y ) получается в результате измерений величины z при экспериментальном изучении какого-либо явления, то сразу получается таблица, определяющая z как функцию двух переменных. В этом случае функция задается только таблицей.

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

Определение 2. Совокупность пар (х , у ) значений х и у , при которых определяется функция z = f (x , y ), называется областью определения или областью существования этой функции.

Область определения функции наглядно иллюстрируется геометрически. Если каждую пару значений х и у мы будем изображать точкой М (х , у ) в плоскости Оху , то область определения функции изобразится в виде некоторой совокупности точек на плоскости. Эту совокупность точек будем также называть областью определения функции. В частности, областью определения может быть и вся плоскость. В дальнейшем мы будем главным образом иметь дело с такими областями, которые представляют собой части плоскости , ограниченные линиями . Линию, ограничивающую данную область, будем называть границей области. Точки области, не лежащие на границе, будем называть внутренними точками области. Область, состоящая из одних внутренних точек, называется открытой или незамкнутой . Если же к области относятся и точки границы, то область называется замкнутой . Область называется ограниченной, если существует такая постоянная С , что расстояние любой точки М области от начала координат О меньше С , т.е. |OM | < С .

Пример 5. Определить естественную область определения функции

z = 2х у .

Аналитическое выражение 2х у имеет смысл при любых значениях х и у . Следовательно, естественной областью определения функции является вся плоскость Оху .

Пример 6.
.

Для того чтобы z имело действительное значение, нужно, чтобы под корнем стояло неотрицательное число, т.е. х и у должны удовлетворять неравенству 1 – х 2 – у 2  0, или х 2 + у 2  1.

Все точки М (х , у ), координаты которых удовлетворяют указанному неравенству, лежат в круге радиуса 1 с центром в начале координат и на границе этого круга.

Пример 7.
.

Так как логарифмы определены только для положительных чисел, то должно удовлетворяться неравенство х + у > 0, или у >  х .

Это значит, что областью определения функции z является половина плоскости, расположенная над прямой у =  х , не включая самой прямой.

Пример 8. Площадь треугольника S представляет собой функцию основания х и высоты у : S = xy /2.

Областью определения этой функции является область х  0, у  0 (так как основание треугольника и его высота не могут быть ни отрицательны, ни нулем). Заметим, что область определения рассматриваемой функции не совпадает с естественной областью определения того аналитического выражения, с помощью которого задается функция, так как естественной областью определения выражения ху/ 2 является, очевидно, вся плоскость Оху .

Определение функции двух переменных легко обобщить на случай трех или более переменных.

Определение 3. Если каждой рассматриваемой совокупности значений переменных х , у , z , …, u , t соответствует определенное значение переменной w , то будем называть w функцией независимых переменных х , у , z , …, u , t и писать w = F (х , у , z , …, u , t ) или w = f (х , у , z , …, u , t ) и т.п.

Так же как и для функции двух переменных, можно говорить об области определения функции трех, четырех и более переменных.

Так, например, для функции трех переменных областью определения является некоторая совокупность троек чисел (х , у , z ). Заметим тут же, что каждая тройка чисел задает некоторую точку М (х , у , z ) в пространстве Оху z . Следовательно, областью определения функции трех переменных является некоторая совокупность точек пространства.

Аналогично этому можно говорить об области определения функции четырех переменных u = f (x , y , z , t ) как о некоторой совокупности четверок чисел (x , y , z , t ). Однако область определения функции четырех или большего числа переменных уже не допускает простого геометрического истолкования.

В примере 2 приведена функция трех переменных, определенная при всех значениях х , у , z .

В примере 4 приведена функция четырех переменных.

Пример 9. .

Здесь w – функция четырех переменных х , у , z , и , определенная при значениях переменных, удовлетворяющих соотношению:

Понятие функции нескольких переменных

Введем понятие функции нескольких переменных.

Определение 1. Пусть каждой точке М из множества точек {М } евклидова пространства E m по какому-либо закону ста­вится в соответствие некоторое число и из числового множес­тва U. Тогда будем говорить, что на множестве {М } задана функция и = f(M). При этом множества {М } и U называют­ся соответственно областью определения (задания) и областью изменения функции f(M).

Как известно, функция одной переменной у = f (x ) изобра­жается на плоскости в виде линии. В случае двух переменных область определения {М п } функции z = f(x, y) представляет собой некоторое множество точек на координатной плоскости Оху (рис. 8.1). Координата z называется аппликатой, и тогда сама функция изображается в виде некоторой поверхности в пространстве E 3 . Аналогичным образом функция от т пере­менных

определенная на множестве {М } евклидова пространства Е m , представляет собой гиперповерхность в евклидовом простран­стве Е m+1 .

Некоторые виды функций нескольких переменных

Рассмотрим примеры функций нескольких переменных и найдем их области определения.

Е 3 . Областью определения этой функции является все множест­во точек плоскости Оху. Область значений этой функции - промежуток }