Задания
Задание 1.1
Задана поверхность:
1.1а.
1.1б. .
1.1в. .
1.1г. .
1.1д. .
1.1е. .
1.1ж. .
Найти аналитически и вычислить его в точке (x=0, y=0). Далее, используя MATLAB, построить профиль этой поверхности, контура равных значений функции z (линии уровня) и начертить поле . Графическое построение проводить в интервалах , с шагом по осям x и y равным 0.2. Графики выводятся в одном окне.
Решение 1.1а (стр.40, пример 1.13)
; в точке (x=0, y=0).
Используем MATLAB. Для создания рисунков используются функции “contour” и “quiver” .
% Очистка памяти от переменных
clear;
% Очистка фигуры
clf;
% Интервал построения поверхности, поля и линий уровня
surf_min = -2;
surf_max = 2;
% Шаг построения поверхности
surf_step = 0.2;
% Шаг построения градиента
gradient_step = 0.2;
% Сетка для построения поверхности
[x, y] = meshgrid(surf_min: surf_step: surf_max, ...
surf_min: surf_step: surf_max);
% Сетка для построения градиента
[xx, yy] = meshgrid(surf_min: gradient_step: surf_max,...
surf_min: gradient_step: surf_max);
z = exp (-x .^ 2 - y .^ 2);
zz = exp (-xx .^ 2 - yy .^ 2);
[u, v] = gradient (zz, gradient_step);
% Оформление графиков
whitebg ('white')
% Вывод поверхности
subplot (2, 1, 1)
surf (x, y, z)
axis equal
axis off
view (-30, 20)
text (-4.5, -2, 3, '(a)', 'fontsize', 18)
% Вывод градиента
subplot (2, 1, 2)
contour (x, y, z, 5)
hold on
axis square
quiver (xx , yy, u, v)
axis equal
axis off
hold off
text (-4, 0, '(b)', 'fontsize', 18)
% Тестирование
% Точка, в которой проверяем значение градиента
test_indexes = [7, 8];
test_x = xx(test_indexes(1), test_indexes(2));
test_y = yy(test_indexes(1), test_indexes(2));
% Значение градиента, рассчитанное с помощью функции gradient
gradient_x = u(test_indexes(1), test_indexes(2));
gradient_y = v(test_indexes(1), test_indexes(2));
% Значение градиента, рассчитанное аналитически
analytical_x = -2 * test_x * exp (-(test_x ^ 2 + test_y ^ 2) );
analytical_y = -2 * test_y * exp (-(test_x ^ 2 + test_y ^ 2) );
fprintf ('x = %.10f y = %.10f\n', test_x, test_y );
fprintf ('analytical_x = %.10f analytical_y = %.10f\n', ...
analytical_x, analytical_y );
fprintf ('gradient_x = %.10f gradient_y = %.10f\n', ...
gradient_x, gradient_y );
Длина стрелок и их ориентация соответствуют распределению поля в пространстве.
Задание 1.2
Задано векторное поле в цилиндрической системе координат:
1.2а. , ;
1.2б. , ;
1.2в. , ;
1.2г. , .
1.2д. , ;
1.2е. , ;
1.2ж. , .
Найти аналитически и, используя MATLAB, дивергенцию ; построить векторное поле a и контура равных значений дивергенции . Графическое построение проводить в интервалах , с шагом по осям x и y равным 0.5. Графики выводятся в одном окне.
Решение 1.2а. (стр.44, пример 1.15)
В цилиндрической системе координат: .
Для рис. 1.1 а) - г) имеем
= .
Используем MATLAB. Для вычисления дивергенцию использовать команду “divergence” (при этом необходимо перейти в декартову систему координат, учитывая, что ), а для создания рисунков – команды “quiver” и “contour”.
% Очистка памяти и фигуры
clear;
clf;
% Константа из задания
alpha = 3;
% Интервал построения графиков и шаг
mesh_min = -2;
mesh_max = 2;
mesh_step = 0.2;
% Создать двумерную сетку в заданных интервалах
[x,y] = meshgrid (mesh_min : mesh_step : mesh_max, ...
mesh_min : mesh_step : mesh_max);
% Расчет заданной функции
r2 = x .^ 2 + y .^ 2;
Ax = exp(-r2 ./ alpha .^ 2) .* x;
Ay = exp(-r2 ./ alpha .^ 2) .* y;
% Расчет дивергенции средствами MATLAB
D = divergence(x, y, Ax, Ay);
subplot (2, 1, 1)
quiver(x, y, Ax, Ay)
axis equal
axis off
text(-4, 0, '(a)','fontsize', 18)
subplot (2, 1, 2)
hold on
axis square
contour (x, y, D, 5)
axis equal
hold off
text(-4, 0, '(b)','fontsize', 18)
set(gca,'fontsize', 18)
% Тестирование
% Точка, в которой проверяем значение дивергенции
test_indexes = [7, 8];
test_x = x(test_indexes(1), test_indexes(2));
test_y = y(test_indexes(1), test_indexes(2));
test_r2 = test_x ^ 2 + test_y ^ 2;
% Значение дивергенции, рассчитанное с помощью функции divergence
test_div = D(test_indexes(1), test_indexes(2));
% Значение дивергенции, рассчитанное аналитически
analytical_div = 2 * exp (-test_r2 / (alpha ^ 2)) * ...
(1 - test_r2 / (alpha ^ 2) );
fprintf ('x = %.10f y = %.10f\n', test_x, test_y );
fprintf ('analytical_div = %.10f\n', ...
analytical_div);
fprintf ('test_div = %.10f\n', ...
test_div);
Длина стрелок и их ориентация соответствуют распределению векторного поля a в пространстве.
Задание 1.3
Задано векторное поле в цилиндрической системе координат:
1.3а. , ;
1.3б. , ;
1.3в. , ;
1.3г. , ;
1.3д. , ;
1.3е. , ;
1.3ж. , ;
Найти аналитически и, используя MATLAB (при этом необходимо перейти в декартову систему координат, учитывая, что ) ротор ; построить векторное поле ; и контура равных значений z-компоненты ротора . Графическое построение проводить в интервалах , с шагом по осям x и y равным 0.2. Графики выводятся в одном окне.
Решение 1.3а. (стр.48, пример 1.17)
В цилиндрической системе координат:
Используем MATLAB. Для вычисления ротора использовать команду “curl”, а для
clear;
clf;
alpha = 3;
beta = 1;
mesh_min = -2;
mesh_max = 2;
mesh_step = 0.2;
[x,y] = meshgrid (mesh_min : mesh_step : mesh_max, ...
mesh_min : mesh_step : mesh_max);
r2 = x .^ 2 + y .^ 2;
Ax = -exp(-r2 / alpha .^ 2) .* y * beta;
Ay = exp(-r2 / alpha .^ 2) .* x * beta;
C = curl(x, y, Ax, Ay);
subplot(2, 1, 1)
quiver(x, y, Ax, Ay)
axis equal
axis off
text(-4, 0, '(a)', 'fontsize', 18)
subplot(2, 1, 2)
hold on
axis square
contour(x, y, C, 5)
axis equal
hold off
text(-4, 0, '(b)', 'fontsize', 18)
% Тестирование
% Точка, в которой проверяем значение ротора
test_indexes = [7, 8];
test_x = x(test_indexes(1), test_indexes(2));
test_y = y(test_indexes(1), test_indexes(2));
test_r2 = test_x ^ 2 + test_y ^ 2;
% Значение ротора, рассчитанное с помощью функции curl
test_curl = C(test_indexes(1), test_indexes(2));
% Значение ротора, рассчитанное аналитически
analytical_curl = 2 * beta * exp (-test_r2 / (alpha ^ 2)) * ...
(1 - test_r2 / (alpha ^ 2) );
fprintf ('x = %.10f y = %.10f\n', test_x, test_y );
fprintf ('analytical_curl = %.10f\n', ...
analytical_curl);
fprintf ('test_curl = %.10f\n', ...
test_curl);
Длина стрелок и их ориентация соответствуют распределению векторного поля в пространстве.
Задание 1.4
Даны вектора .
1.4а.
1.4б.
1.4в.
1.4г.
1.5д.
1.5е.
1.5ж.
1.5з.
1.5и.
1.5к.
1.5л.
1.5м.
Используя MATLAB вычислить . Найти модуль и единичный орт . Построить и обозначить на рисунке все вектора.
Решение 1.4а. (стр. 7, пример 1.1)
Сумма ; длина ; .
Используем MATLAB, дополнив обозначением осей и заголовком. Для построения векторов используется функция «arrow3» из файла arrow3.m.
clear;
clf;
zero = [0, 0];
a = [3, 0];
b = [0, 3];
c = a + b;
daspect([1 1 1])
arrow3 (zero, a, 'k2', 0.15);
hold on
arrow3 (zero, b, 'k2', 0.15);
arrow3 (zero, c, 'k2', 0.15);
hold off
grid on
xlim ([-1, 4]);
ylim ([-1, 4]);
text(2.5, -0.2, '$$\vec a$$', 'fontsize', 12, 'Interpreter', 'latex')
text(-0.4, 2.8, '$$\vec b$$', 'fontsize', 12, 'Interpreter', 'latex')
text(2.2, 2.8, '$$\vec c$$', 'fontsize', 12, 'Interpreter', 'latex')
xlabel ('x');
ylabel ('y');
title ('$$\vec c = \vec a + \vec b$$', 'Interpreter', 'latex', 'fontsize', 12)
Задание 1.5.
Даны два вектора в декартовой системе координат.
1.5а.
1.5б.
1.5в.
1.5г.
1.5д.
1.5е.
1.5ж.
1.5з.
1.5и.
1.5к.
1.5л.
1.5м.
Найти аналитически, затем с помощью MATLAB и сравнить результаты:
– скалярное произведение
– угол между двумя векторами
– скалярное произведение
– векторное произведение (построить на графике)
Для построения векторов используется функция «arrow3» из файла arrow3.m.
Решение 1.5а. (стр.21, пример 1.7)
Скалярное произведение . В MATLAB команда « ».
Угол между двумя векторами .
В MATLAB команда « ».
Скалярное произведение . В MATLAB команда « ».
Векторное произведение
. В MATLAB команда « ».
Используем MATLAB
clear;
clf;
A = [3 4 0];
B = [12 5 0];
scalar_product = dot(A,B)
angle = acos(scalar_product / (norm(A) * norm(B))) * 180 / pi
magnitude = dot(A,A)
cross_product = cross(A,B)
daspect([1 1 10])
hold on
arrow3 ([0 0 0], A, 'k2', 2);
arrow3 ([0 0 0], B, 'k2', 2);
arrow3 ([0 0 0], cross_product, 'k2', 2);
hold off
grid on
box on
text (1.5, 3.5, 0.5, '$$\vec a$$', 'fontsize', 22, 'Interpreter', 'latex')
text (11.5, 4, 0.5, '$$\vec b$$', 'fontsize', 22, 'Interpreter', 'latex')
text (0.5, 0, -26, '$$\vec c$$', 'fontsize', 22, 'Interpreter', 'latex')
Задание 1.6.
Записать вектор в цилиндрической системе координат. Используя MATLAB показать на рисунке единичные базисные вектора декартовой и цилиндрической систем.
а.
б.
в.
г.
д.
е.
ж.
Решение 1.6. (стр.24, фигура 1.12)
. Поскольку , то .
Аналогично ,
Используем MATLAB
% Очистка переменных и фигуры
clear;
clf;
% Заданный вектор a
a = [3, 2, 4];
r = (9 + 4) ^ (1/2);
phi = atan (2 / 3);
% Размер шрифта для надписей
fontsize = 14;
hold on
% Рисуем заданный вектор a
arrow3([0 0 0], a, 'k2', 0.2)
text(2, 1, 2, 'a', 'fontsize', fontsize)
% Рисуем часть отружности (дугу)
iter = 1: 100;
z = zeros (100, 1);
x = r .* cos (((iter - 1) / 100) .* phi);
y = r .* sin (((iter - 1) / 100) .* phi);
plot3 (x, y, z, 'LineWidth', 2)
% Рисуем вектор phi_0 для цилиндрической системы координат
arrow3(a, [3 - cos(phi), 2 + sin(phi), 4], 'k2', 0.2)
text(1.2, 0.5, 2.8, '\phi_0', 'fontweight', 'bold', 'fontsize', fontsize)
% Рисуем вектор rho_0 для цилиндрической системы координат
arrow3(a, [3 + cos(phi), 2+sin(phi), 4], 'k2', 0.2)
text(3.0, 0.5, 3.5, '\rho_0', 'fontweight', 'bold', 'fontsize', fontsize)
% Рисуем вектор z_0 для цилиндрической системы координат
arrow3(a, [3 2 5], 'k2', 0.2)
text(2.6, 2, 5, 'z_0', 'fontweight', 'bold', 'fontsize', fontsize)
% Рисуем вектор x_0 для декартовой системы координат
arrow3([0 0 0], [1 0 0], 'k2', 0.2)
text(1.1, 0.1, 0.7, 'x_0', 'fontweight', 'bold', 'fontsize', fontsize)
% Рисуем вектор y_0 для декартовой системы координат
arrow3([0 0 0], [0 1 0], 'k2', 0.2)
text(.1, 1, 0.5, 'y_0', 'fontweight', 'bold', 'fontsize', fontsize)
% Рисуем вектор z_0 для декартовой системы координат
arrow3([0 0 0], [0 0 1], 'k2', 0.2)
text(.1, .3, 1,'z_0', 'fontweight', 'bold', 'fontsize', fontsize)
% Рисуем проекции вектора a
line ([0 3], [0 2], [4 4], 'LineWidth', 2, 'linestyle', '--')
line ([0 3], [0 2], [0 0], 'LineWidth', 2, 'linestyle', '--')
line ([3 3], [2 2], [0 4], 'LineWidth', 2, 'linestyle', '--')
% Рисуем оси в декартовой системе координат
line ([0 5], [0 0], [0 0], 'LineWidth', 2)
line ([0 0], [0 5], [0 0], 'LineWidth', 2)
line ([0 0], [0 0], [0 5], 'LineWidth', 2)
% Обозначаем угол phi
text(1.2, 0.3, 0, '\phi', 'fontsize', fontsize)
% Названия осей
xlabel('x', 'fontsize', fontsize)
ylabel('y', 'fontsize', fontsize)
zlabel('z', 'fontsize', fontsize)
% Настройки внешнего вида графика
axis([0, 5, 0, 5, 0, 5])
grid
axis equal
set (gca,'fontsize', fontsize)
set(gca, 'XTick', 0: 1: 5)
set(gca, 'YTick', 0: 1: 5)
set(gca, 'ZTick', 0: 1: 5)
view(-37.5 - 180, 20)
- Оглавление
- Предисловие
- Раздел 1. Основные сведения о среде программирования «matlab»
- Глава 1. Вычисления в командном режиме
- 1.1. Простейшие математические операции в matlab
- 1.2. Переменные
- 1.3. Создание матриц
- 1.4. Доступ к элементам матриц
- 1.5. Операции с матрицами
- 1.6. Ввод, вывод и работа со строками
- Глава 2. Построение графиков в matlab
- 2.1. Построение графика в виде двумерной линии
- 2.2. Оформление графиков
- 2.3. Построение трехмерных графиков
- 2.4. Построение линий уровня
- 2.5. Построение векторного поля
- 2.6. Отображение нескольких графиков в одном окне
- Глава 3. Скрипты в matlab и управляющие конструкции
- 3.1. Создание и выполнение скриптов в matlab
- 3.2. Оператор for
- 3.3. Логические операции
- 3.4. Оператор if / elseif / else
- 3.5. Оператор while
- 3.6. Операторы break / continue
- 3.7. Оператор switch
- 3.8. Создание функций
- Раздел 2. Краткие теоретические сведения и задания Тема 1. Векторный анализ
- 1.1. Элементы векторного анализа
- Задания
- Тема 2. Уравнения Максвелла (произвольная и гармоническая временная зависимость, статические, стационарные и квазистационарные поля)
- 2.1. Система уравнений электродинамики – уравнения Максвелла
- 2.2. Граничные условия. Принцип эквивалентности
- Задания
- Тема 3. Плоские волны
- 3.1. Явление дисперсии и групповая скорость
- Задания
- Тема 4. Граничные задачи, уравнения и методы
- 4.1. К классификации электромагнитных явлений
- Задания
- 4.2. Метод конечных разностей
- 4.2.1. Конечно-разностная аппроксимация
- 4.2.2. Конечно-разностная аппроксимация уравнений Лапласа и Пуассона
- 4.2.3. Конечно-разностная аппроксимация для граничных узлов
- Задания
- Литература