методичка по MatLab

advertisement
Задания
по
MatLab
2
Задание 1
Основы работы в MatLab
Рабочая среда:
1. рассмотрите общий вид (строка МЕНЮ, панель инструментов, командная
строка);
2. выберите в МЕНЮ опцию Desktop и отметьте галочкой окна, которые должны
быть представлены на экране: командное - Command Window, редактор - Editor,
рабочее пространство - Workspace;
3. форматы ввода и вывода
Войти в Меню File/Preferences/Command Window/Numeric Format. Установить различные
форматы команд и посмотреть результат вывода числа pi. Вернуть формат Short;
4. Переменные имеют имена (латинские буквы и цифры). Для присваивания
переменной значения используют знак « = ».
Задание:
Присвоить переменной R значение 2
Присвоить переменной L значение 2* pi*R
Если значение выражения не присвоено никакой переменной, то MatLab автоматически
создает переменную ans с этим значением.
В командной строке ввести pi*R^2, нажать Enter, убедится в том, что появилась новая
переменная ans.
Если в конце командной строки стоит знак «;», то он подавляет вывод на экран значения
переменной, полученной в этой строке.
Ввести D=2*R; в окне Workspace убедиться, что новая переменная D появилась в списке;
5. Функции (стандартные)
Задание:
Ввести: a=cos(pi)
tan(pi/4)
sqrt (62.5);
6. Функции (пользовательские многократно используемые)
Расчеты могут проводиться непосредственно в окне команд или с использованием
М-файлов, создаваемых в окне редактора.
!!! Имена файлов должны начинаться с латинской буквы.
Выполните пример ex1_1:
Вычислить корни квадратного уравнения вида: a*x^2+b*x+c=0.
Перейти в окно редактора и вписать следующий текст программы:
a=2;
b=5;
c=3;
d=b^2-4*a*c;
x1=(-b+sqrt(d))/(2*a)
x2=(-b-sqrt(d))/(2*a)
Создать папку: Сетевое Окружение\ share на 133_server\Шнепова\ номер группы\
фамилия студента
Сохранить файл под именем ex1_1.m в папке со своим именем.
3
Чтобы выполнить программу нужно:
 написать в командной строке ex1_1
или
 функциональная клавиша F5
или
 Debug/Run.
Результат вычислений должен появиться в окне команд:
x1 = -1
x2 =-1.50000000000000
Если нужно, отредактируйте программу, измените входные данные и снова запустите
программу.
7. Комментарии нужны для пояснения назначения переменных, действий и
функций. Строка комментария начинается с символа «%» и не читается
системой. Знак «%» можно использовать для того, чтобы временно скрыть от
системы некоторые строки программы;
Задачи для самостоятельного решения:
1. Написать программу для подтверждения основного тригонометрического
тождества: sin(x)^2+cos(x)^2=1. Проверить это тождество при различных x.
Сохранить файл под именем ex1_2.m в своей папке.
2. Написать программу для расчета скорости и координаты тела, брошенного
вертикально вверх или вниз.
Для решения задачи нужно использовать уравнения движения тела:
v=v0+g*t;
h=h0+v0*t+g*t^2/2;
где v0 – начальная скорость тела
для движения вверх v0>0, для движения вниз v0<0;
h0 – начальная координата тела;
t – время;
g – ускорение свободного падения.
Ось координат направлена вверх. При этом:
g=-9.8
при броске вверх v0>0,
при броске вниз v0<0
В качестве параметров использовать различные значения начальной скорости,
координаты и времени.
Сохранить файл под именем ex1_3.m в своей папке
-----------------------------------------------------------------------------------------------------------------
Задание 2
Массивы в MatLab
Для работы с множеством данных удобно использовать массивы. Массив – это
множественный тип данных, состоящий из фиксированного количества элементов.
Самый простой способ задать одномерный массив:
[name]=X1:dX:Xk, где name – имя переменной, в которую будет сформирован
массив, X1 – значение первого элемента массива, Xk – ограничение для последнего
элемента массива, dX – шаг, с помощью которого формируется каждый следующий
4
элемент массива. Если параметр dX в конструкции отсутствует, то он по умолчанию
принимается равным 1.
Переменную, заданную как массив, можно использовать в качестве аргумента
математических функций.
Выполните пример:
>> X1=-3.5;
>> dX=1.5;
>> Xk=4.5;
>> X=X1:dX:Xk
X =
-3.5000
-2.0000
-0.5000
1.0000
2.5000
4.0000
-0.2474
0.4794
0.9490
0.9093
5.1416
5.6416
>> Y=sin(X/2)
Y =
-0.9840
-0.8415
>> A=0:5
A =
0
1
2
3
4
5
>> A/2+pi
ans =
3.1416
3.6416
4.1416
4.6416
Еще один способ создания векторов и матриц – поэлементный ввод.
Для создания вектора-строки используется разделитель пробел или запятая:
>> V=[3 5 1 -6 4]
V =
3
5
1
-6
4
6
8
>> W=[0,2,4,6,8]
W =
0
2
4
Для создания вектора-столбца используется точка с запятой:
>> X=[1;2;3]
X =
1
2
3
Обратиться к элементу массива можно по имени массива и порядковому номеру элемента:
>> V(1)+2*W(4)
ans =
15
Матрица задается следующим образом:
>> A=[1 2 3;4 5 6;7 8 9]
A =
1
4
7
2
5
8
3
6
9
С элементами матрицы можно производить любые математические операции
>> A(1,2)^A(2,2)/A(3,3)
ans = 3.5556
5
Часто используется операция поэлементного умножения векторов одинакового размера.
Такое действие записывается X.*Y. Аналогично записывается: X./Y, X.^2
Задачи для самостоятельного решения:
1. Создать вектор-строку А с элементами от 0 до 45 с шагом 4
Сохранить файл под именем ex2_1.m
2. Написать программу для создания вектора столбца с элементами 0 -3 7 1 -4.
Выполнить действие: сумму четвертого и пятого элемента и умножить на второй элемент.
Сохранить файл под именем ex2_2.m
3. Создать 2 произвольных вектора V и W, выполнить их поэлементное умножение
и записать результат в вектор G
Сохранить файл под именем ex2_3.m
Задание 3
Графики в MatLab
Построение двумерных графиков в декартовой системе координат.
Задача построения графика функции на заданном интервале сводится к созданию
массивов из абсцисс и ординат точек и выводу их в графической области. График
формируется путем соединения соседних точек прямыми линиями.
Выполните пример ex3_1:
x=-15:0.1:15;
y=cos(x/2)+cos(5*x)/5;
plot(x,y);
Сохранить файл под именем ex3_1.m
При повторном обращении к команде plot будет создано другое графическое окно.
Чтобы график построился в том же окне, нужно ввести команду hold
on;
Можно также управлять цветом, типом маркера и типом линий:
Цвет линий: m - розовый, r - красный, g- зеленый, b- синий, k - черный;
типы маркера: . –точка, x – крестик, * - звездочка
типы линий: - сплошная, : пунктирная, -. штрихпунктирная, -- штриховая.
Запись следует делать в таком формате: plot(x,y,'m:');
Изменить созданный файл так, чтобы на нем красной сплошной линией выводился
предыдущий график, а синей пунктирной график функции z=sin(x).
Сохранить файл под именем ex3_2.m
Есть также дополнительные средства оформления чертежа:
grid on – нанесение сетки
title('Заголовок')
xlabel('Подпись для
оси Х'),
ylabel('Подпись
для оси Y')
6
Выполните пример ex3_3:
Построить график функции y=(x^2+1)/(x^2-4)^(1/2) на интервале [-10;10].
Областью определения функции служит вся числовая ось, кроме интервала [-2;2], на
концах его функция стремится к бесконечности. Нужно отдельно задать аргументы для
левой [-10;-2) и правой (2;10] частей графика.
% определяем массив x
x=-10:0.02:-2.04;
% определяем массив y
y=(x.*x+1)./(x.*x-4).^(1/2);
plot(x,y,'b-');
hold on;
% определяем массив t
t=2.04:0.02:10;
% определяем массив z
z=(t.*t+1)./(t.*t-4).^(1/2);
plot(t,z,'b-');
Добавить сетку и подписи под осями графика.
Сохранить файл под именем ex3_3.m
Выполните пример ex3_4:
Построить график функции y=x/(x^2-9)
Данная функция терпит разрыв в точках -3 и 3
% определяем массив
x=-5:0.03:-3.03;
% определяем массив
y=x./(x.*x-9);
plot(x,y,'m-');
hold on;
% определяем массив
u=-2.97:0.03:2.97;
% определяем массив
v=u./(u.*u-9);
plot(u,v,'m-');
% определяем массив
t=3.03:0.03:5;
% определяем массив
z=t./(t.*t-9);
plot(t,z,'m-');
grid on;
на интервале [-5;-3)
y
на интервале(-3;3)
v
на интервале (3;-5]
z
Сохранить файл под именем ex3_4.m
Можно построить на одной графической области несколько графиков, имеющих
разные порядки и изобразить 2 оси ординат. Для этого служит команда plotyy.
Выполните пример ex3_5:
Построить графики функций y=x.^2 и z=cos(x).^2
x=-10:0.1:10;
y=x.^2;
z=cos(x).^2;
plotyy(x,y,x,z);
grid on;
Сохранить файл под именем ex3_5
7
MatLab предоставляет возможность построить несколько систем координат в графическом
окне и вывести на каждую из них свои графики с помощью функции
subplot(row,col,cur);
где row – количество графиков по горизонтали, col - количество графиков по вертикали,
cur – номер текущего графика.
Выполните пример ex3_6:
Построить графики функций x=cos(t); y=cos(t).^2; z=exp(cos(t)); g=t.^2-t+5;
на интервале [-2*pi;2*pi]
t=-6.28:0.05:6.28;
x=cos(t);
y=cos(t).^2;
z=exp(cos(t));
g=t.^2-t+5;
%построение 1-го графика
subplot(2,2,1);
plot(t,x);
grid on;
title('x=cos(t)')
% построение 3-го графика
subplot(2,2,2);
plot(t,z);
grid on;
title('z=exp(cos(t))')
%построение 2-го графика
subplot(2,2,3);
plot(t,y);
grid on;
title('y=cos(t).^2')
%построение 4-го графика
subplot(2,2,4);
plot(t,g);
grid on;
title('g=t.^2-t+5')
Сохранить файл под именем ex3_6.m
Задание 4
Графики в полярной системе координат
Полярная система координат состоит из заданной фиксированной т.О, называемой
полюсом. Положение любой точки М в полярных координатах можно задать
положительным числом ρ и числом φ, равным величине полярного угла. Числа ρ и
φ называются полярными координатами точки М и обозначаются М(ρ,φ).
Для формирования графика в полярной системе координат необходимо обратиться к
функции polar(phi,ro,s), где phi - массив значений полярного угла, ro –
массив значений полярного радиуса, s – строка, состоящая из 3 символов, которые
определяют цвет линии, тип маркера, тип линии.
Выполните пример ex4_1:
Построить графики функций ρ(φ)= 3cos(4*φ)в полярной системе координат
% определяем массив полярного угла phi
8
phi=0:pi/200:2*pi;
% определяем массив полярного радиуса ro
ro=3*cos(4*phi);
% рисуем график
polar (phi,ro);
Сохранить файл под именем ex4_1.m
Задача для самостоятельного решения:
Построить графики функций ρ(φ)=-2*sin(φ)+1 в полярной системе координат.
Вывести заголовок графика.
Сохранить файл под именем ex4_2.m
Графики функций, заданных в параметрическом виде
Задание функции y(x) с помощью равенств x=f(t) и y=g(t), называют параметрическим, а
вспомогательную величину t -параметром. Для построения графика функции, нужно:
1. определить массив t
2. определить массивы x=f(t) и y=g(t)
3. построить график с помощью функции plot(x,y)
Выполните пример ex4_3:
Построить график функции y(x), если x=(t.^2-1)./(t.^2+1) y=t.*(t.^2-1)./(t.^2+1)
t=-5:0.1:5;
x=(t.^2-1)./(t.^2+1);
y=t.*(t.^2-1)./(t.^2+1);
plot(x,y);
Сохранить файл под именем ex4_3.m
Проверочная работа №1
1. Построить график функции f(x)=((1+x).*(x.^2+2*x-2)).^(1/3)
Сколько корней может иметь данная функция?
Каким образом подбирается интервал, на котором рисуется график?
Что означает знак «. x»?
Сохранить файл под именем task1_1.m
2. Построить график функции f(x)=(2*x-9)./(sqrt(x.^2)-1) на интервале от -3 до 3 с шагом 0.1.
В каких точках заданного интервала функция не существует?
Выколоть эти точки.
Сколько участков для построения графика функции получится?
Изобразить графики функций на разных участках разными цветами
Сохранить файл под именем task1_2.m
3. Построить графики 2-х функций в одной области: f1=exp(x) и f2=2-x.^2 на
интервале от -7 до 7 с шагом 0.01, а затем уточнить результат, выполнив построение на
интервале от -2 до 1.
Сохранить файл под именем task1_3.m
9
4. Построить на плоскости кривую, заданную параметрически:
x=cos(t).^2+2*cos(t); y=2*sin(t).*cos(t) на интервале то 0 до 2*pi с
шагом 0.01
Сохранить файл под именем task1_4.m
5. Изобразить кривые, заданные в полярных координатах:
ro1(alpha)=5*sin(alpha /3).^2; ro2(beta)=2*sqrt(cos(beta))
В каких пределах должны изменяться полярные углы alpha и beta?
Сохранить файл под именем task1_5.m
--------------------------------------------------------------------------------------------------------------------
Задание 5
Построение трехмерных графиков.
Анимация
Положение точки М в пространственной системе координат определяется значением 3
координат и обозначается М(x,y,z).
Для построения графика функции двух переменных необходимо:
1. сформировать в области построения графика прямоугольную сетку (функция
meshgrid)
2. вычислить значения функции во всех узлах сетки
3. обратиться к функции построения поверхности, передавая ей в качестве
аргументов сетку и матрицу значений (функция mesh для построения
каркаса и функция
surf
для построения поверхности)
Выполните пример ex5_1:
Построить графики функций z=y.^2-x.^2
[x y]=meshgrid(-2:0.1:2,-3:0.1:3);
z=y.^2-x.^2;
mesh(x,y,z);
Сохранить файл под именем ex5_1.m
Задачи для самостоятельного решения:
1. Построить графики функций z=sqrt(x.^2+y.^2), пользуясь командой surf на
сетке от -2 до 2.
Сохранить файл под именем ex5_2.m
2. Построить графики функций z1=x.^2+y.^2-1 и z2=-x.^2-y.^2-1
на сетке от -2 до 2 в одной системе координат.
Сохранить файл под именем ex5_3.m
Выполните пример ex5_4:
Построить поверхность сферы, уравнение которой задано в параметрическом виде:
x(u,v)=sin(u)*cos(v), y(u,v)=sin(u)*sin(v), z(u,v)=cos(u)
h=pi/60 %вектор-строка;
u=(0:h:pi)' %вектор-столбец;
v=(0:2*h:2*pi);
x=sin(u)*cos(v);
y=sin(u)*sin(v);
z=cos(u)*ones(size(v));
surf(x,y,z);
Сохранить файл под именем ex5_4.m
10
При изучении движения точки на плоскости и в пространстве MatLab позволяет строить
график движения и следить за ним. Для этого есть две специальные функции:
comet(x,y)и comet3(x,y,z).
Выполните пример ex5_5:
Точка движется по эллиптической орбите, заданной уравнениями: x=cos(t);y=3*sin(t)
Нарисовать траекторию этой точки.
t=0:0.001:2*pi;
x=cos(t);
y=3*sin(t);
comet(x,y);
Сохранить файл под именем ex5_5.m
Проверочная работа №2
1. Построить каркас z=3*x.^2-2*sin(y)*y.^2 на сетке то -10 до 10 с шагом 0.5
Сохранить файл под именем task2_1.
2. Построить поверхность z=3*exp(2*x).*x-2*y на сетке то -1 до 3 с шагом 0.1
Сохранить файл под именем task2_2.
3. Построить поверхность z=log(x.^2-y.^2) на сетке то 0 до 5 с шагом 0.1
Сохранить файл под именем task2_3.m
4. Открыть файл ex1_3 для расчета координаты и скорости тела, брошенного вертикально
вверх. Изменить файл так, чтобы изобразить движение брошенного вверх тела (сделать
развертку по времени, воспользоваться командой COMET). Подобрать подходящие
начальные условия и интервал времени.
Сохранить файл под именем task2_4.m
5. Изобразить движение точки в пространстве вдоль винтовой линии, параметрическое
уравнение которой имеет вид: x(t)=sin(t); y(t)=cos(t); z(t)=t
Сохранить файл под именем task2_5.m
Задание 6
Задачи линейной алгебры.
Действия с матрицами.
Над матрицами одинаковой размерности определены операции сложения, вычитания и
поэлементного умножения.
С=А+В; D=A-B; E=A.*B
Любую матрицу можно умножить на число. Результатом будет матрица той же
размерности, каждый элемент будет умножен на данное число. Например: 3*А
Операция транспонирования « ’»применима для матриц любой размерности. Она меняет
местами в данной матрице строки и столбцы.
Операция A(3,:) – выделяет из матрицы А 3-ю строку
Операция М=A(3:4,2:3) – выделяет из матрицы А подматрицу М меньшего размера
11
Выполните пример ex6_1:
a=[2 4;6 8]
b=[1 3;5 7]
%действия над матрицами
c=(a+b)/3-2*(a-b)
d=a.*b
e=[1 2 3 4;5 6 7 8]
%транспонирование матрицы
t=e'
Сохранить файл под именем ex6_1.m
Для матриц А[m,k] и B[k,n] определена операция матричного умножения.
Результирующая матрица C будет иметь размерность [m,n]
Возведение в степень «^»эквивалентно умножению матрицы на саму себя указанное
число раз.
В результате возведения в степень (-1) получается матрица, обратная данной. Тот же
результат дает функция inv(A). Произведение данной матрицы на обратную дает
единичную матрицу.
Выполните пример ex6_2:
a=[1 2;-3 1;5 -2]
b=[0 1 -3;2 1 -2]
c=a*b
d=c^2
e=[1 2;0 1]
%нахождение обратной матрицы
f=e^(-1)
%проверка правильности нахождения обратной матрицы
%результат умножения должен быть единичной матрицей
f*e
e*f
Сохранить файл под именем ex6_2.m
Операции с матрицами могут применяться для решения систем линейных уравнений вида
A*x=b, где A матрица [n,n], x и b- вектора-столбцы [n,1]
Для деления матриц справа налево используется знак «\»
x=A\b=A^(-1)*b= inv(A)*b
Выполните пример ex6_3:
Вводите текст программы частями и запускайте на счет. В конце каждой части
выполняйте проверку результата
A=[1 2;1 1];
b=[7;6];
x=A\b
%проверка: A*x-b=0, система решена верно
A*x-b
%--------------------A=[3 -1;6 -2];
b=[1;2];
x=A\b
%система не определена, бесконечное множество решений
%--------------------A=[1 1;1 1];
b=[1;3];
x=A\b
%система не совместна
Сохранить файл под именем ex6_3.m
12
С квадратной матрицей связано понятие определителя. Найти значение определителя
матрицы A можно с помощью функции det(A).
Задача для самостоятельного решения:
Проверить, является ли данная квадратная матрица A=[2 -1 3;-1 0 5;3 5 -4]
симметрической, т.е. выполняется ли условие: A=A’.
Найти определитель матрицы А.
Сохранить файл под именем ex6_4.m
Задание 7
Решение систем линейных уравнений
Система из m линейных уравнений с n неизвестными может быть описана при помощи
матриц A*x=b, где A – матрица коэффициентов системы, x – вектор неизвестных, b –
вектор свободных членов системы уравнений.
Матрица [A b], которая формируется путем приписывания к исходной матрице
коэффициентов столбца свободных членов, называется расширенной матрицей системы.
Если система не имеет ни одного решения – она называется несовместной, если имеет
хотя бы одно решение – совместной.
Если решение совместной системы единственное – система называется определенной, если
решений больше, чем одно – неопределенной.
Минорами k порядка матрицы А называются определители квадратных матриц [k;k],
полученных из А путем вычеркивания из неё произвольных строк и столбцов.
Наивысший порядок не равных 0 миноров называется рангом матрицы. Вычисляется с
помощью функции rank(A).
При исследовании системы на совместность, следует помнить, что:
- несовместна, если rank([A b])>rank(A)
-совместна и определена, если rank([A b])=rank(A)
-совместна и не определена, если rank([A b])<rank(A) или
rank([A b])=rank(A)< количества неизвестных системы



Решить систему линейных уравнений можно различными способами:
методом обратной матрицы x= inv(A)*b
методом Гаусса – метод приведения расширенной матрицы к ступенчатому виду с
использованием функции rref([A b]). Затем для получения решения
системы выделить последний столбец.
используя функцию linsolve(A,b). В случае бесконечного множества
решений функция дает тривиальное решение.
Выполните пример ex7_1:
Решить систему уравнений методом обратной матрицы
A=[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6]
b=[8;9;-5;0]
x= inv(A)*b
% проверка
A*x
Сохранить файл под именем ex7_1.m
13
Выполните пример ex7_2:
Решить систему уравнений методом Гаусса:
A=[2 -1 1;3 2 -5; 1 3 -2]
b=[0;1;4]
% приведение расширенной матрицы к треугольному виду
c=rref([A b])
% выделение последнего столбца из матрицы
x=c(:,4)
%проверка
A*x
Сохранить файл под именем ex7_2.m
Выполните пример ex7_3:
Исследовать систему на совместность и, если возможно, решить ее
x1 + 2x2 + 5x = 9
x1 - x2 + 3x3 = 2
3x1 - 6x2 - x3 = 25
A=[1 2 5;1 -1 3;3 -6 -1];
b=[9;2;25];
rank(A)
rank([A b])
%система совместна
linsolve(A,b)
Сохранить файл под именем ex7_3.m
Задачи для самостоятельного решения:
1. Исследовать систему на совместность и, если возможно, решить ее
x1 - 5x2 - 8x3 + x4 = 3
3x1+ x2 - 3x3 - 5x4 = 1
x1 - 7x3 + 2x4 = -5
11x2 + 20x3 - 9x4 = 2
Является ли полученное решение решением системы?
Сохранить файл под именем ex7_4.m
2. Исследовать систему на совместность и, если возможно, решить ее
4x1 + x2 - 3x3 - x4 = 0
2x1 + 3x2 + x3 - 5x4 = 0
x1 - 2x2 - 2x3 + 3x4 = 0
Почему в результате получилось тривиальное решение?
Сохранить файл под именем ex7_5.m
Проверочная работа №3
1. Для данных матриц A=[2 4 1;1 -2 3], B=[1 3;-2 0;5 1] и C=[2 3;-3 1]
проверить выполнение следующих тождеств:
(A* B)*C=A*(B*C)
(A’+B)*C=A’*C+B*C
Сохранить файл под именем task3_1.m
14
2. Выполнить действия A*(A^2-B)-2*(B+A)над матрицами
A=[2 3 1;-1 2 4;5 3 0]
B=[2 7 13;-1 0 5;5 13 21]
Сохранить файл под именем task3_2.m
3. Решить матричное уравнение A*X=B и выполнить проверку, если
A=[2 1 3;0 1 2;-1 2 1];
B=[2 1 4;3 0 1;-1 2 3];
Сохранить файл под именем task3_3.m
4. Решить систему методом обратной матрицы
6 x1 - x2 - x3 = 0
x1 - 2x2 + 3x3 = 0
3x1 - 4x2 - 4x3 = -1
Сохранить файл под именем task3_4.m
5. Решить систему методом Гаусса
2x1 - x2 - 3x4 = 9
x1 - x3 + 2x4 = 8
3x1 - 2x2 + x3 - x4 = -5
-x1 + 3x2 - x3 + x4 = 9
Сохранить файл под именем task3_5.m
Задание 8
Решение нелинейных уравнений и систем
В общем случае аналитическое решение уравнения f(x)=0 можно найти только для узкого
класса функций. Чаще всего приходится его решать численными методами. Численное
решение уравнения проводится в два этапа:
1. отделяют корни уравнения, т.е. находят достаточно тесные промежутки, в которых
содержится только один корень, их называют интервалами изоляции корня.
Находят интервалы изоляции графически или любым другим методом, основанном на
том, что непрерывная функция имеет на интервале [a;b] хотя бы один корень, если
f(a)*f(b)<0 . a и b называют пределами интервала изоляции.
2. проводят уточнение отдельных корней, т.е. находят корни с заданной точностью
Алгебраические уравнения
Алгебраическим уравнением или полиномом называется любое уравнение P(x)=0,
где P(x) – полином степени n.
В MatLab задается и хранится в виде вектора, элементами которого являются
коэффициенты полинома от an до a0.
Функция conv(p1,p2) – формирует вектор, соответствующий коэффициентам
полинома степени (n+m), полученного в результате умножения вектора p1 степени n на
вектор p2 степени m, т.е. вычисляет произведение двух полиномов.
15
Функция deconv(p1,p2) осуществляет деление полинома p1 на полином p2.
Вызов функции в общем виде [q,r]= deconv(p1,p2) приводит к
получению двух полиномов: q - частного от деления и r – остатка от деления.
Функция polyval(p1,x) вычисляет значение полинома с коэффициентами р1 в
точке x.
Функция polyder(p1)- формирует вектор коэффициентов полинома,
являющегося производной от полинома с коэффициентами р1.
Выполните пример ex8_1:
Выполнить умножение и деление полиномов: p1=2x^2-1, p2=x^3-1 и p3=x^2+1
p1=[2 0 -1];
p2=[1 0 0 -1];
p3=[1 0 1];
%умножение полиномов
p=conv(p2,p1)
%деление полиномов
deconv(p,p1)
%деление полиномов
[q,r]=deconv(p,p2)
%деление полиномов с остатком
[q,r]=deconv(p,p3)
Сохранить файл под именем ex8_1.m
Ответ:
p = 2 0 -1
ans =1 0 0
q =2 0 -1
r=0 0 0
q = 2 0 -3
r=0 0 0
-2 0
-1
0 0
-2
0 3
1
0
3
Выполните пример ex8_2:
Найти производную от полиномов p1 и p1* p2, где
p1=2x^5+x^4-x^2-3, p2=x^3-1. Вычислить значение p1 при х=3
p1=[2 1 0 -1 0 3];
p2=[1 0 0 -1];
%производная от полинома
p3=polyder(p1)
%умножение полиномов
p4=conv(p2,p1)
%производная от произведения
p5=polyder(p4)
%вычисление значения при х=3
a=polyval(p1,3)
Сохранить файл под именем ex8_2.m
Ответ:
p3 =10 4 0 -2 0
p4 =2 1 0 -3 -1 3 1 0 -3
p5 =16 7 0 -15 -4 9 2 0
a =561
16
Решить алгебраическое уравнение в MatLab можно при помощи встроенной функции
roots(p). Она формирует вектор, элементы которого являются корнями полинома
с коэффициентами р. Наоборот, построить вектор р по заданному вектору его корней
можно с помощью функции poly(x).
Выполните пример ex8_3:
Вычислите корни полинома x^2-1.
По корням восстановите полином
p=[1 0 -1];
%вычисление корней полинома
x=roots(p)
%вектор коэффициентов полинома с корнями х
poly(x)
Сохранить файл под именем ex8_3.m
Выполните пример ex8_4:
Вычислите корни полинома 2x^4-8x^3+8x^2-1.
p=[2 -8 8 0 -1];
%вычисление корней полинома
r=roots(p)
%найдем графическое решение заданного уравнения
x=-1:0.1:3;
y=polyval(p,x);
plot (x,y,'-k'),grid
Сохранить файл под именем ex8_4.m
Ответ:
r=
2.3066
1.5412
0.4588
-0.3066
Задача для самостоятельного решения:
Вычислите корни полинома x^3+0.4x^2+0.6х-1.6
Решите эту задачу аналитически и графически.
В чем разница результатов решения?
Сохранить файл под именем ex8_5.m
Трансцендентные уравнения
Уравнение, в котором неизвестное входит в аргумент трансцендентных функций,
называется трансцендентным уравнением. К ним относятся показательные,
логарифмические, тригонометрические функции.
Для решения уравнений вида f(x)=0 в MatLab применяют функцию
fzero(name,x0), где: name – имя М-функции, вычисляющей левую часть
уравнения
x0 – начальное приближение к корню или интервал его изоляции[a,b]
17
Выполните пример ex8_6:
Найти корни уравнения ((x-1)^2)^(1/3)- (x^2)^(1/3)
Сначала найдем решение графически, как точки пересечения графиков функций:
y=((x-1)^2)^(1/3) и y=(x^2)^(1/3)
x=-2:0.1:2;
f=((x-1).^2).^(1/3);
g=(x.^2).^(1/3);
%найдем графическое решение заданного уравнения
plot (x,f,'-k',x,g,'.k'),grid
%абсцисса точек пересечения лежит на интервале от 0 до 1
Сохранить файл под именем ex8_6.m
Создадим файл-функцию с именем f8_6
function y= f8_6 (x)
y=((x-1)^2)^(1/3)-(x^2)^(1/3);
Сохранить файл под именем f8_6.m
Добавим строку в файл ex8_6.m
fzero(' f8_6 ',[0 1])
Получим корень ans =0.5000
Задача решена.
Выполните пример ex8_7:
Найти корни уравнения exp(x)/5-2*(x-1)^2=0
x=-0.5:0.1:6;
f=exp(x)/5-2*(x-1).^2;
%найдем графическое решение заданного уравнения
plot (x,f,'-r'),grid
%абсцисса точек пересечения лежит на интервалах:
% от 0 до 1
% от 1 до 2
% от 5 до 6
Сохранить файл под именем ex8_7.m
Создадим файл-функцию с именем f8_7
function y=f8_7(x)
y=exp(x)/5-2*(x-1).^2;
Сохранить файл под именем f8_7.m
Добавим в файл ex8_7 следующие строки:
[a(1),b(1)]=fzero('f8_7',[0 1]);
[a(2),b(2)]=fzero('f8_7',[1 2]);
[a(3),b(3)]=fzero('f8_7',[5 6]);
%решения уравнения
a
%значения функции в найденных точках
b
Сохранить файл под именем ex8_7.m
Ответ:
a =0.5778 1.7639 5.1477
b = 1.0e-015 *
-0.1110 0.4441
0
Задача решена.
18
Задача для самостоятельного решения:
Найти корни уравнения y(x)=x^5-x^3+1 различными способами:
графически, функциями fzero и roots
Сохранить файл под именем ex8_8.m
Системы уравнений
Если заданы m уравнений с n неизвестными и требуется найти последовательность из n
чисел, которые одновременно будут удовлетворять каждому из m уравнений, то говорят о
системе уравнений.
Для решения нелинейных систем используются функции символьных вычислений.
Однако часто решение систем уравнений можно свести к решению одного уравнения с
одним неизвестным.
Выполните пример ex8_9:
Решить систему уравнений:
x^2+y^2+3x-2y=4
x+2y=5
Эта система сводится к одному уравнению (из второго уравнения выражаем x и
подставляем в первое). Получим:
5y^2-28y+36=0
Решим его с помощью функции roots и подставим в любое уравнение. Найдем x.
p=[5 -28 36];
%найдем графическое решение заданного уравнения
y=1:0.1:4;
f=polyval(p,y);
plot (y,f,'-b'),grid
%вычисление корней полинома
y=roots(p);
x=-2*y+5
y
Сохранить файл под именем ex8_9.m
Ответ:
x=
-2.2000
1.0000
y=
3.6000
2.0000
Выполните пример ex8_10:
Решить систему уравнений:
sin(x+1)-y=1.2
2x+cos(y)=2
Эта система сводится к уравнению: 2x+cos(sin(x+1)-1.2)-2=0
Решим его
Создадим файл-функцию f8_10
function y=f8_10(x)
z=sin(x+1)-1.2;
y=2*x+cos(z)-2;
Сохранить файл под именем f8_10.m
+
продолжение на стр. 19
19
%найдем графическое решение заданного уравнения
x=0:0.01:1;
y=f8_10(x);
plot (x,y,'-k'),grid
%решение системы
x=fzero('f8_10',0)
y=sin(x+1)-1.2
Сохранить файл под именем ex8_10.m
Ответ:
x =0.5102
y =-0.2018
MatLab дает возможность решать нелинейные уравнения и системы в символьном
виде. Для этого существует функция:
solve(expr1, expr2… exprN,var1,var2…varN).
Эта функция возвращает значение переменных var1,var2…varN, при которых
соблюдаются равенства, заданные выражениями expr1, expr2… exprN.
Выполните пример ex8_11:
Решить систему линейных уравнений:
a1*x1+b1*x2=c1
a2*x1+b2*x2=c2
Требуется получить решение системы в общем виде.
[x1,x2]=solve('a1*x1+b1*x2=c1','a2*x1+b2*x2=c2')
Сохранить файл под именем ex8_11.m.
Изменить задачу и получить символьное решение для системы линейных уравнений с 3-я
переменными.
Выполните пример ex8_12:
Решить уравнение вида a*x^2+b*x+c=0
syms x a b c
y=solve(a*x^2+b*x+c,x)
Сохранить файл под именем ex8_12.m
Проверочная работа №4
1. Определить коэффициенты полинома, который получается в результате умножения
многочлена (3x^4-7x^2+5) на многочлен (x^3+2x-1)
Сохранить файл под именем task4_1.m
2. Найти корни полинома 2x^3-3x^2-12x-5=0 численно и графически
Сохранить файл под именем task4_2.m
3. Решите нелинейное уравнение f(x)-g(x)=0, где f(x)=5x-8, g(x)=8ln(x) численно и
графически.
Сохранить файл под именем task4_3.m и файл-функцию под именем f4_3.m
4. Вычислить корни уравнения y=cot(x)-x/3=0 на интервале [0,pi], проверить
решение, построив графики функций y=cot(x) и y=x/3
Сохранить файл под именем task4_4.m и файл-функцию под именем f4_4.m
20
5. Решить систему нелинейных уравнений численно и графически:
y^2-(x^2)/2=1
2.1sin(x-1)+y=0.1
Сохранить файл под именем task4_5.m и файл-функцию под именем f4_5.m
----------------------------------------------------------------------------------------------------------------
Задание 9
Вычисление пределов последовательностей
и функций в точке
Число b называется пределом последовательности y1,y2,…yn,…, если по мере возрастания
номера n член yn неограниченно приближается к b. Последовательность
y1,y2,…yn,…называют сходящейся, а ее предел обозначают lim yn=b.
n→∞
Если предел последовательности =0, то ее называют бесконечно малой, если предел
стремится к бесконечности, то ее называют бесконечно большой.
Функция limit(fun,x,inf) возвращает предел символьного выражения fun в
точке х, стремящейся к бесконечности.
Для объявления символьной переменной используется команда:
syms name1 [name2…]
Для задания символьной функции используется команда:fun=sym(name).
Символьная функция записывается в кавычках.
Для вычисления предела функции в точке x→a используется функция
limit(fun,x,a)
Наглядное представление о том, каким будет предел функции в заданной точке, дает
построение графика функции, заданной в символьном виде. Это достигается командой:
ezplot(fun,[a,b])
Выполните пример ex9_1:
Исследовать последовательности на сходимость
syms n
f1=sym('((n+1)^3-(n-1)^3)/((n+1)^2+(n-1)^2)');
%последовательность сходится
l1=limit(f1,n,inf)
%-------------------------------------------f2=sym('(n^4-100*n^2+1)/(100*n^2+15*n)');
% бесконечно большая последовательность
l2=limit(f2,n,inf)
%-------------------------------------------f3=sym('((n^5+2)^(1/4)-(n^2+1)^(1/3))/((n^4+2)^(1/5)-(n^3+1)^(1/2))');
% бесконечно малая последовательность
l3=limit(f3,n,inf)
Сохранить файл под именем ex9_1.m
21
Выполните пример ex9_2:
Исследовать функцию y= 3*x^2-25 в точке 3
f1=sym('3*x^2-25');
limit(f1,'x',3)
Сохранить файл под именем ex9_2.m
Ответ:
ans =2
Выполните пример ex9_3:
Исследовать функцию y= 1+1/x в точке x→+∞ и в точке x→0
syms x
%предел равен 1
limit(1+1/x,x,inf)
%функция стремится к бесконечности
limit(1+1/x,x,0)
ezplot(1+1/x,[-5,10])
grid
Сохранить файл под именем ex9_3.m
При нахождении пределов часто возникают неопределенности типа 0/0, ∞/∞,
1^∞… Обычно такие неопределенности требуют дополнительных преобразований. В
MatLab они решаются довольно просто:
Выполните пример ex9_4:
Рассмотрите различные виды неопределенностей, найдите пределы функций в точке
%неопределенность вида 0/0
limit((x^3+1)/(x^2+3*x+2),x,-1)
limit((sqrt(4*x+5)-5)/(sqrt(3*x+1)-4),x,5)
% неопределенность вида 1^∞
limit((3*x-2)^(x/(x-1)),x,1)
% неопределенность вида ∞-∞
limit(sqrt(x^2+x+1)-sqrt(x^2-x+1),x,inf)
% неопределенность вида ∞/∞
limit((5*x^2+2*x+7)/(3*x^2-8),x,inf)
Сохранить файл под именем ex9_4.m
Ответ:
3
16/15
exp(3)
1
5/3
При исследовании функции на непрерывность могут понадобиться команды вида:
limit(f,x,a,'right') или limit(f,x,a,'left'), которые
вычисляют пределы функции справа или слева. Точки разрыва, в которых существуют
конечные пределы справа и слева, называются точками разрыва 1-го рода. Все остальные
– точки разрыва 2-го рода.
22
Выполните пример ex9_5:
Исследовать функцию f=2^(1/(x^2-4)) на непрерывность в точках -2, 1, 2
syms x
f=sym('2^(1/(x^2-4))');
%исследование функции в точке -2
limit(f,x,-2,'right')
limit(f,x,-2,'left')
%исследование функции в точке 1
limit(f,x,1)
%исследование функции в точке 2
limit(f,x,2,'right')
limit(f,x,2,'left')
ezplot(f,[-5,5])
grid
Сохранить файл под именем ex9_5.m
Задача для самостоятельного решения:
Исследовать функцию f=exp((x+1)/x) на непрерывность в точках 0 и 1.
Построить график.
Сохранить файл под именем ex9_6.m
Задание 10
Вычисление производной
Производной функции f(x) в точке x0 называют предел, к которому стремится отношение
бесконечно малого приращения функции к соответствующему бесконечно малому
приращению аргумента.
Геометрический смысл производной заключается в том, что если к графику функции f(x)
провести касательную в точке x0, то ее угловой коэффициент k ( или тангенс угла
наклона)будет равен значению производной в данной точке k=f’(x).
Символьное дифференцирование в MatLab выполняет команда
diff (fun[, var, n]), где fun –символьная запись функции или ее имя,
var – переменная дифференцирования , n – порядок производной, которую нужно найти.
Если n – не указан, то вычисляется 1-я производная.
Выполните пример ex10_1:
ans1=diff('sin(x)',x)
ans2=diff('tan(x)',x)
ans3=diff('exp(x)',x)
ans4=diff('log(x)',x)
ans5=diff('x^3',x)
ans6=diff('x^x',x)
ans7=diff('x^log(x)',x)
ans8=diff('sin(x)^tan(x)',x)
Сохранить файл под именем ex10_1.m
23
Примеры для отыскания производных функций многих переменных различных порядков:
Выполните пример ex10_2:
syms x y
ans1=diff('y^2/3-x^2/5-1',x)
%------------------------ans2=diff('y^2/3-x^2/5-1',y)
%------------------------ans3=diff('sin(x)-ln(y)',x,2)
%------------------------ans4=diff('sin(x)-ln(y)',y,2)
Сохранить файл под именем ex10_2.m
Чтобы найти значение производной в данной точке удобно применять функцию
subs(fun,var,val), где fun – символьная функция, var – переменная, значение
которой подставляется, val – значение переменной.
Выполните пример ex10_3:
Продифференцировать функцию f=(3*x^2-7)/(2*x+1) и найти значение производной в
точках 2, 0, -2
syms x
f=sym('(3*x^2-7)/(2*x+1)');
F=diff(f)
subs (F,2)
%------------------------subs (F,0)
%------------------------subs (F,-2)
Сохранить файл под именем ex10_3.m
Ответ: F =6*x/(2*x+1)-2*(3*x^2-7)/(2*x+1)^2
ans = 2
ans = 14
ans =2.8889
Проверочная работа №5
1. Подтвердите вычислениями 1-й замечательный предел:
lim (sin(x)/x)=1.
x→0
Сохранить файл под именем task5_1.m
2. Существует ли предел функции:
lim 3*x^4/7*x
x→∞
Сохранить файл под именем task5_2.m
3. Выяснить, является ли непрерывной функция abs(x-3)/(x-3)
в точке 3.
Разрыв какого рода здесь присутствует?
Построить график этой функции от 0 до 6
Сохранить файл под именем task5_3.m
24
4. Найти производные функций cos(2*x) и 1/x
Сохранить файл под именем task5_4.m
5. Найти пятую производную по переменной x для функции cos(y+x) и вычислить ее
значение при x=0
Сохранить файл под именем task5_5.m
Задание 11
Численное интегрирование
Пусть дана функция f(x). Известно, что она непрерывна на интервале [a;b] и уже
определена ее первообразная F(x), тогда определенный интеграл от этой функции можно
вычислить в пределах от a до b по формуле Ньютона-Лейбница:
a
∫f(x)dx=F(b)-F(a), где F’(x)=f(x)
b
В тех случаях, когда:
 первообразная не может быть выражена через элементарные функции
 первообразная является слишком сложной
 подынтегральная функция задана таблицей или графиком
используют численные методы интегрирования, задача которых заключается в
вычислении значения определенного интеграла на основании значений подынтегральной
функции.
Вычисление определенного интеграла называют механической квадратурой. Название
связано с геометрическим смыслом определенного интеграла: значение определенного
интеграла совпадает с площадью криволинейной трапеции с основаниями [a;b] и f(x).
Интегрирование по методу трапеций
В MatLab численное интегрирование по методу трапеций реализовано несколькими
функциями:
trapz(x,y)- вычисляет площадь фигуры под графиком функции y(x), в котором
все точки заданы векторами x и y
cumtrapz(x,y)- выполняет так называемое «интегрирование с накоплением» по
методу трапеций. Результатом ее работы будет вектор, состоящий из промежуточных
вычислений. Последний элемент вектора – искомый интеграл.
Выполните пример ex11_1:
Вычислить определенный интеграл
13
∫sqrt(2х-1)
5
Этот интеграл легко сводится к табличному: ∫sqrt(2х-1)=(2х-1)^(3/2)/3
Вычислим его по формуле Ньютона-Лейбница (точный метод).
Затем воспользуемся методом трапеций с разными шагами интегрирования.
25
a=5;
b=13;
%вычисление по формуле Ньютона-Лейбница:
I=(2*b-1)^(3/2)/3-(2*a-1)^(3/2)/3
%вычисление интеграла методом трапеций
x=a:b;
y=sqrt(2*x-1);
S=trapz(x,y)
%-------------------------------------h=0.5;
x=a:h:b;
y=sqrt(2*x-1);
S=trapz(x,y)
%-------------------------------------h=0.1;
x=a:h:b;
y=sqrt(2*x-1);
S=trapz(x,y)
Заметьте, что чем больше точек разбиения, тем точнее значение искомого интеграла.
Сохранить файл под именем ex11_1.m
Выполните пример ex11_2:
Вычислить площадь фигуры, ограниченной линиями y^2=9x и y=3x
Чтобы понять, какая фигура образуется пересечением этих линий, построим графики
x=0:0.01:1.2;
y1=3*sqrt(x);
y2=3*x;
plot(x,y1,x,y2)
Интервал интегрирования определен как отрезок [0;1], а площадь фигуры будем искать
как разность площадей фигур, ограниченных данными линиями:
%найдем площади фигур под графиками
S1=trapz(x,y1);
S2=trapz(x,y2);
S=S1-S2
Сохранить файл под именем ex11_2.m
Интегрирование по методу Симпсона
В соответствии с методом Симпсона кривая на двух соседних участках заменяется
параболой, проходящей через те же точки, что и данная кривая и вычисляется площадь
под параболой. Этот метод реализован функцией quad(name,a,b[,tol]),
где :
name – имя М-функции, задающей подынтегральное выражение
a,b – пределы интегрирования
tol – точность вычислений
Методы трапеций и Симпсона являются частными случаями квадратурных формул
Ньютона-Котеса высших порядков. Функция quad8(name,a,b[,tol]),
реализует в MatLab алгоритм Ньютона-Котеса 8-го порядка.
Выполните пример ex11_3:
Вычислить интеграл
1
∫sqrt(1+2х)dx
0
26
Создадим файл-функцию f11_3
function y=f11_3(x)
y=(1+2*x).^(1/2);
Сохранить файл под именем f11_3.m
Создадим М-файл для вычисления интеграла:
quad('f11_3',0,1)
% вычисление интеграла с заданной точностью
format long
quad('f11_3',0,1,1.0e-07)
quad('f11_3',0,1,1.0e-09)
Сохранить файл под именем ex11_3.m
Задание 12
Символьное интегрирование
Неопределенным интегралом данной функции называется наиболее общий вид его
первообразной. Символьное вычисление неопределенных интегралов осуществляется при
помощи функции: int(fun, var),
где fun – символьное выражение, представляющее собой подынтегральную функцию, а
var – переменная интегрирования.
Выполните пример ex12_1:
Вычислить неопределенный интеграл для функции f=x/(x^2+1)
syms x%определение символьной переменной
f=sym('x/(x^2+1)');% определение символьной функции
int(f,x)%нахождение неопределенного интеграла
Сохранить файл под именем ex12_1.m
Задача для самостоятельного решения:
Вычислить неопределенный интеграл для функции f=ln(x)^3
Сохранить файл под именем ex12_2.m
Для того чтобы вычислить определенный интеграл функции в символьном виде можно
использовать команду int(fun, var, a, b), где a и b – пределы
интегрирования.
b
Если существует конечный предел lim∫f(x)dx при b→+∞, то говорят, что интеграл
A
сходится, а этот предел называется несобственным интегралом функции.
Выполните пример ex12_3:
Вычислить определенный интеграл для функции f= sqrt(2*x-1)
syms x%определение символьной переменной
f=sym('sqrt(2*x-1');% определение символьной функции
int(f,x)%нахождение неопределенного интеграла
Сохранить файл под именем ex12_3.m
27
Задача для самостоятельного решения:
Вычислить определенный интеграл для функции f=sin(x)^4 на интервале от 0 до pi/2
Сохранить файл под именем ex12_4.m
Выполните пример ex12_5:
Вычислить несобственный интеграл для функции f=1/(x^2+1) на интервале от 0 до +∞
f=sym('1/(x^2+1)');% определение символьной функции
int(f,x,0,inf)%нахождение несобственного интеграла
Сохранить файл под именем ex12_5.m
Задача для самостоятельного решения:
Вычислить несобственный интеграл для функции f=1/(x*ln(ln(x))) на интервале от e^2
до +∞. Сходится ли данный интеграл?
Сохранить файл под именем ex12_6.m
Проверочная работа №6
1. Вычислить значение определенного интеграла методом трапеций с шагом h=0.1; h=0.05;
h=0.01
1.6
∫1/(1+2*x^3)^(1/2) dx
1.2
Сохранить файл под именем task6_1.m
2. С помощью метода Симпсона вычислить интеграл:
1.5
∫sin(2x)/(x^2+1) dx
0.5
Сохранить файл под именем task6_2.m
3. Провести сравнительный анализ вычислений определенного интеграла методами
трапеций, Симпсона и Ньютона-Котеса 8 порядка
0.5
∫exp(x)/(1+sin(3*x)) dx
0.1
Сохранить файл под именем task6_3.m
4. Найти неопределенный интеграл для функции f(x)=ln(1+x^2)
Сохранить файл под именем task6_4.m
5. Найти неопределенный интеграл для функции f(x)= 1/(1+sin(x))
Сохранить файл под именем task6_5.m
28
Задание 13
Решение обыкновенных дифференциальных
уравнений и систем
Дифференциальным уравнением n-го порядка называется соотношение вида:
H(t,x,x’,x’’,x’’’… )=0, где t- независимая переменная.
Решением дифференциального уравнения является функция x(t), которая обращает
уравнение в тождество.
Решением системы уравнений является вектор уравнений.
Каждое дифференциальное уравнение, также как и система, имеют бесконечное
множество решений, которые отличаются друг от друга константами. Для однозначного
определения решения требуется задать дополнительные начальные и граничные условия.
Количество таких условий должно совпадать с порядком дифференциального уравнения
или системы. В зависимости от вида дополнительных условий в дифференциальных
уравнениях различают:
 задачу Коши – все дополнительные условия заданы в начальный момент времени
 краевую задачу – дополнительные условия заданы на границе интервала
Различают точные (аналитические) и приближенные (численные) методы решения.
Аналитическое решение ОДУ
Для решения уравнений в MatLab используется функция:
dsolve(expr [,cond1,cond2,var]), где expr – представляет собой
дифференциальное уравнение в символьном виде , cond – дополнительные условия,
var – переменная дифференцирования.
Если не указано иначе, независимой переменной считается t, остальные буквенные
обозначения будут рассматриваться как константы. Символ D обозначает производную по
независимой переменной: D=d/dt.
Символ D2 обозначает вторую производную по независимой переменной и т.д.
Выполните пример ex13_1:
Решить уравнение: dy/dx=(y+1)/x
dsolve('Dy=(y+1)/x','x')
Сохранить файл под именем ex13_1.m
Выполните пример ex13_2:
Решить уравнение: t*(1+t^2)*dx/dt=x+x*t^2-t^2, при x(1)=-pi/4
dsolve('t*(1+t^2)*Dx=x+x*t^2-t^2','x(1)=-pi/4')
Сохранить файл под именем ex13_2.m
Задача для самостоятельного решения:
Решить уравнение: y’-y/(1+x^2)=1+x, y(0)=1
Сохранить файл под именем ex13_3.m
29
Выполните пример ex13_4:
Решить уравнение: y’’=x*y’+y+1 относительно переменной t
dsolve('D2y=x*Dy+y+1')
Сохранить файл под именем ex13_4.m
Задача для самостоятельного решения:
Решить уравнение: 4y’’+16y’+15y=4*exp(-3*x/2), y(0)=3, y’(0)=-5.5
Сохранить файл под именем ex13_5.m
Аналогично решаются системы
дифференциальных уравнений.
Выполните пример ex13_6:
Решить систему ОДУ: y’’=x; x’’=y
[x,y]=dsolve('D2y=x','D2x=y')
Сохранить файл под именем ex13_6.m
Задача для самостоятельного решения:
Решить систему ОДУ: x’=-x+y+z; y’=x-y+z; z’=x+y+z; x(0)=1; y(0)=0; z(0)=0
Сохранить файл под именем ex13_7.m
Задание 14
Численное решение ОДУ
Часто возникает ситуация, когда невозможно решить ОДУ точно, в таких случаях
прибегают к численному решению. Оно может быть реализовано различными методами:
методом Эйлера, методами Рунге-Кутта различных порядков, методом прогнозакоррекции Адамса и др.
В MatLab решение ОДУ и систем ОДУ реализовано множеством команд:
ode45(@f,interval,x0), ode23(@f,interval,x0),
ode113(@f,interval,x0), ode15s(@f,interval,x0)…,
где
f – вектор-функция для вычисления правых частей уравнений системы вида:x’=f(x,t);
interval – массив из 2 чисел, определяющий интервал интегрирования дифференциального
уравнения или системы;
x0 – вектор начальных условий системы ОДУ.
Все функции возвращают:
массив T – координаты узлов сетки, в которых ищется решение;
матрицу Х, i-й столбец которой является значением вектор-функции решения в узле Тi.
Выполните пример ex14_1:
Решить задачу Коши: dx/dt+x=sin(xt); x(0)=1.5 на интервале [0,35]
30
Создадим файл-функцию f14_1.m
function y=f14_1(t,x)
y=-x+sin(x*t);
Сохранить файл под именем f14_1.m
Создадим М-файл для вычисления интеграла:
ode113(@f14_1,[0 35],1.5)
y
Сохранить файл под именем ex14_1.m
Выполните пример ex14_2:
Решить задачу Коши для системы ОДУ: y1’=cos(y1*y2)
y2’=sin(y1+y2);
y1(0)=0, y2(0)=0
на интервале [0,10]
Создадим файл-функцию f14_2.m
function dy=f14_2(t,y)
dy=zeros(2,1);% создание нулевого вектор-столбца
dy(1)=cos(y(1)*y(2));
dy(2)=sin(y(1)+y(2)*t);
Сохранить файл под именем f14_2.m
Создадим М-файл для решения системы ОДУ:
[T,Y]=ode23(@f14_2,[0 10],[0 0]);%формирование векторов выходных данных
plot(T,Y,'m')%формирование графического решения
grid;
Сохранить файл под именем ex14_2.m
Для решения дифференциальных уравнений высших порядков применяют следующую
замену: y=x’’. Таким образом, уравнение второго порядка заменяется системой ОДУ.
Выполните пример ex14_3:
Решить краевую задачу: x’’+4x’+13x=exp(sin(t)); x(0.25)=-1, x’(0.25)=1 на
интервале [0.25;2]
Сделаем замену: y=x’’, получим систему уравнений:
y’=-4y-13x+ exp(sin(t));
x’=y
с начальными условиями y(0.25)=1, x(0.25)=-1
Создадим файл-функцию f14_3.m
function F=f14_3(t,x)
F=[-4*x(1)-13*x(2)+exp(t);x(1)];
Сохранить файл под именем f14_3.m
Создадим М-файл для решения системы ОДУ:
X0=[1;-1]%формирование вектора начальных условий
interval=[0.25 2]% формирование интервала интегрирования
[T,X]=ode45(@f14_3,interval,X0);%формирование векторов выходных данных
plot(T,X(:,1),'-b',T,X(:,2),':b')%формирование графического решения
grid;
Сохранить файл под именем ex14_3.m
31
Проверочная работа №7
1. Решить дифференциальное уравнение y’=2*x+y
Сохранить файл под именем task7_1.m
2. Решить дифференциальное уравнение y’’’’’=sin(x)
Сохранить файл под именем task7_2.m
3. Уравнение радиоактивного распада.
Основной закон радиоактивного распада состоит в том, что скорость распада
радиоактивного вещества пропорциональна количеству нераспавшегося вещества в
данный момент времени. Обозначим за x(t) – количество вещества в момент времени t, а
за p – коэффициент, зависящий от вида радиоактивного вещества. Тогда этот закон
примет вид: x’=-p*x
Знак «-» означает, что количество вещества убывает и скорость отрицательна.
Найти функцию x(t) при условии, что x(0)=x0
Сохранить файл под именем task7_3.m
4. Решить дифференциальное уравнение y’’-3y’+2y=0
Сохранить файл под именем task7_4.m
5. Решить нелинейную систему дифференциальных уравнений:
x1’=-7x1+7x2
x2’=157x1+x2-1.15x1*x2
x3’=0.96x1*x2-8.36x3
с начальными условиями: x1(0)=1, x2(0)=0, x3(0)=-1
Неизвестные x1, x2, x3 – считать элементами вектора x. Для решения системы применить
функцию ode15s.
Подобрать интервал, на котором будет построено решение.
Для наглядности графики решений вывести разными цветами.
Сохранить файл под именем task7_5.m
------------------------------------------------------------------------------------------------------------
Задание 15
Обработка результатов эксперимента
методом наименьших квадратов
Метод наименьших квадратов позволяет по экспериментальным данным подобрать такую
аналитическую функцию, которая проходит настолько близко к экспериментальным
точкам, насколько это возможно.
В MatLab имеются встроенная функция подбора полиномиальной зависимости:
polyfit(x,y,k),
где x – массив абсцисс экспериментальных точек,
y – массив ординат экспериментальных точек,
k – степень полинома.
Результатом работы функции является массив коэффициентов полинома. Для вычисления
значения полинома в любой точке используется функция polyval(p,t),
где p –коэффициенты полинома, t – точка, в которой необходимо вычислить значение
полинома.
32
Показатель, характеризующий тесноту линейной связи между х и у называется
коэффициентом корреляции, рассчитывается по формуле:
r=∑(xi-Mx)(yi-My)/sqrt(∑((xi-Mx)^2)*∑((yi-My)^2)),
где
Mx=∑xi/n, My=∑yi/n – среднее арифметическое элементов векторов.
Значение коэффициента корреляции удовлетворяет соотношению:
-1<=r<=1
Чем меньше отличается абсолютная величина r от единицы, тем ближе располагаются
экспериментальные точки к полученной линии.
Если коэффициент корреляции близок к нулю, это означает, что между х и у отсутствует
линейная связь.
Для нахождения среднего арифметического используется функция mean(A).
Функция sum(B)формирует сумму всех элементов вектора В.
Аналогом коэффициента корреляции для нелинейных зависимостей является индекс
корреляции, рассчитываемый по формуле:
gamma=sqrt(1-∑(yi-Yi)^2)/∑(yi-My)^2),
где y – экспериментальные значения,
Y- значения, найденные методом наименьших квадратов,
My – среднее значение y.
Чем значение gamma ближе к единице, тем более тесная связь между
экспериментальными данными и построенными функциями.
Выполните пример ex15_1:
В работе Д.И. Менделеева «Основы химии» приводятся данные о растворимости NaNO3 в
зависимости от температуры воды:
0
66,7
4
71
10
76,3
15
80,6
21
85,7
29
92,9
36
99,4
51
113,6
68
125,1
Требуется определить растворимость NaNO3 при температуре 32 градуса в случае
линейной зависимости.
Построить график интерполяционной прямой и нанести экспериментальные точки.
Рассчитать коэффициент корреляции при линейной интерполяции.
Сделать вывод о корректности данной интерполяции.
%ввод экспериментальных данных
x=[0 4 10 15 21 29 36 51 68];
y=[66.7 71 76.3 80.6 85.7 92.9 99.4 113.6 125.1];
%вычисление вектора коэффициентов полинома y=a1*x+a2
[p]=polyfit(x,y,1)
%вычисление значения полинома в заданной точке
y32=polyval(p,32)
%построение точек и графика полученного полинома
xx=0:68;
yy=p(1)*xx+p(2);
plot(x,y,'or',xx,yy,'-b',32,y32,'xr')
%определение коэффициента корреляции
mx=mean(x)
my=mean(y)
sum((xx-mx).*(yy-my))./sqrt(sum((xx-mx).^2)*sum((yy-my).^2))
%r=1, следовательно интерполяция выполнена с высокой точностью
Сохранить файл под именем ex15_1.m
33
Задание 16
Решение задач оптимизации.
Поиск экстремума функции одной переменной
Экстремумом функции называется ее наибольшее или наименьшее значение.
При решении задач поиска экстремума функции различают задачи поиска глобального
(на всей числовой оси) и локального экстремума.
В MatLab поиск локального минимума осуществляется
функцией:[x,y]=fminbnd(name,a,b), где
name – имя М-функции, вычисляющей значение f(x)
a, b – границы интервала, на котором осуществляется поиск минимума
х, у – координаты точки, в которой достигается минимум функции на заданном
интервале.
Выполните пример ex16_1:
Найти локальные экстремумы функции g(x)=x^4-0.5x^3-28x^2+140
Решение начнем с построения графика функции.
Создадим файл-функцию, вычисляющую значения функции:
function y=f16_1(x)
y=x.^4-0.5*x.^3-28*x.^2+140
end
Сохранить файл под именем f16_1.m
Создадим М-файл:
x=-5:0.1:6;
y=f16_1(x);
plot(x,y,'-b')
grid ;
Сохранить файл под именем ex16_1.m
На графике видно, что функция имеет 3 локальных экстремума.
Разобьем интервал на 3 части, и будем искать экстремумы на каждом из них.
Добавим в файл ex16_1.m следующие строки:
%минимум функции на интервале [-4;-2]
[x1,y1]=fminbnd(@f16_1,-4,-2)
%минимум функции на интервале [2;6]
[x2,y2]=fminbnd(@f16_1,2,6)
Сохранить файл под именем ex16_1.m
Интервал [-2;-2]содержит локальный максимум функции. Для нахождения точки
максимума создадим функцию f16_1_,вычисляющую значения функции, противоположной
f16_1.
function y=f16_1_(x)
y=-f16_1(x);
end
Сохранить файл под именем f16_1_.m
34
Добавим в файл ex16_1.m следующие строки:
%максимум функции на интервале [-2;-2]
[x3,y]=fminbnd(@f16_1_,-2,2);
x3
y3=f16_1(x3)
Сохранить файл под именем ex16_1.m
Задача решена
Поиск экстремума функции двух переменных
Вычисление экстремума функции многих переменных z=f(x1,x2,…xn) осуществляет
команда [X,Z]=fminsearch(name,X0), где
name – имя М-функции, вычисляющей значение z=f(x1,x2,…xn), зависящей от n
неизвестных;
Х0 – вектор из n элементов, содержащий координаты точки начального приближения; X –
вектор из n элементов, содержащей координаты точки, в которой достигается минимум
функции;
Z – значение функции в точке с координатами Х
Выполните пример ex16_2:
Найти экстремум функции f(x,y)=x^2+y^2-2x-6y+11
Решение начнем с построения графика функции.
[x,y]=meshgrid(-3:0.1:6,-3:0.1:8);
z=x.^2+y.^2-2*x-6*y+11;
mesh(x,y,z)
Сохранить файл под именем ex16_2
Создадим файл-функцию, вычисляющую значения функции:
function z=f16_3(x)
z=x(1).^2+x(2).^2-2*x(1)-6*x(2)+11;
end
Сохранить файл под именем f16_2.m
В качестве начального приближения выберем точку [3 2].
Добавим в файл ex16_2 следующую строку:
[x0,z0]=fminsearch(@f16_3,[3 2])
Сохранить файл под именем ex16_2
Ответ:
x0 =1.0000 3.0000
z0 =1.0000
Задача решена.
35
Решение задач линейного программирования
В задачах линейного программирования требуется найти минимум (или максимум)
линейной функции многих переменных при линейных ограничениях в виде равенств или
неравенств.
В задачах на экстремум L называется функцией цели.
В MatLab задачу линейного программирования решает функция
[x,L]=linprog(c,A,b, [,A1,b1,lx,rx]), для которой
С – функция цели, представленная в виде вектора коэффициентов;
A, b – система ограничений, заданная в матричном виде A*x<=b;
A1, b1 – параметры, которые используются, если система ограничений задана в виде
равенств A*x=b;
lx, rx – параметры, применение которых обусловлено наличием в условии задач
двусторонних ограничений lx <=x – слева, и x <=rx – справа;
x – вектор решения, содержащий значения переменных, удовлетворяющих всем
ограничениям и приводящих функцию цели к минимуму;
L – минимум целевой функции, достигаемый в точке х.
Отсутствующие ограничения в списке параметров заменяются квадратными скобками.
Выполните пример ex16_3:
Решить задачу линейного программирования:
x1+x2+x3-x4→max
При выполнении следующих условий:
x1>=0, x2>=0, x3>=0, x4>=0
3x1-x2<=7
x2-2x3<=-1
4x3-x4<=3
5x1+2x4>=14
Приведем задачу к стандартному виду: будем искать минимум функции и сделаем все
ограничения однотипными.
L=-x1-x2-x3+x4→min
При выполнении следующих условий:
x1>=0, x2>=0, x3>=0, x4>=0
3x1-x2<=7
x2-2x3<=-1
4x3-x4<=3
-5x1-2x4<=-14
Решим задачу:
%вектор коэффициентов функций цели
c=[-1;-1;-1;1];
%матрица коэффициентов системы ограничений
A=[3 -1 0 0;0 1 -2 0;0 0 4 -1;-5 0 0 -2];
%вектор правых частей системы ограничений
b=[7;-1;3;-14];
%вектор ограничений слева
lx=[0 0 0 0];
%решение задачи линейного программирования
[x,L]=linprog(c,A,b,[],[],lx)
%определение максимума
L=-L
Сохранить файл под именем ex16_3
36
Проверочная работа №8
1. Известна табличная зависимость у от х:
10,1
24
10,2
36
10,3
26
10,8
45
10,9
34
11
37
11,1
55
11,4
51
12,2
75
13,3
84
13,8
74
14
91
14,4
85
14,5
87
15
94
15,6
92
15,8
96
17
97
18,1
98
19
99
Аппроксимировать эту зависимость методом наименьших квадратов с помощью различных
функций: линейной, квадратичной и кубической.
Построить графики, нанести экспериментальные точки.
Сравнить полученные результаты, вычислив индексы корреляции. Сделать выводы.
Сохранить файл под именем task8_1.m
2. Постройте график функции y=sin(x)/x на интервале от -5*pi до 5*pi.
Выделите интервалы, на которых достигаются локальные минимумы и максимумы
функции.
Нужно ли рассматривать отдельно положительную и отрицательную части оси абсцисс?
Почему?
Найдите минимумы и максимумы функции на выделенных интервалах.
Сохранить файл под именем task8_2.m
37
Приложение
Элементарные математические функции
Тригонометрические:
sin(x)
синус числа x
cos(x)
косинус числа x
tan(x)
тангенс числа x
cot(x)
котангенс числа x
asin(x)
арксинус числа x
acos(x)
арккосинус числа x
atan(x)
арктангенс числа x
acot(x)
арккотангенс числа x
Экспоненциальные:
exp(x)
экспонента числа x
log(x)
натуральный логарифм числа x
Целочисленные:
round(x)
округление числа x до ближайшего целого
rem(x,y)
вычисление остатка от деления x на y
sign(x)
сигним-функция числа x, выдает 0 при х=0;
-1 при х<0;
1 при х>0
Другие:
sqrt(x)
abs(x)
log10(x)
log2(x)
pow2(x)
gcd(x,y)
lcm(x,y)
rats(x)
корень квадратный из числа x
модуль числа x
десятичный логарифм от числа x
логарифм по основанию 2 от числа x
возведение 2 в степень х
наибольший общий делитель чисел х и у
наибольшее общее кратное чисел х и у
представление числа х в виде рациональной дроби
Download