Задание
|
№ варианта
|
Задание
|
1
|
M=v*w+m+mr*me
|
11
|
M=m*w+mr*v’
|
2
|
M=m+mr*me
|
12
|
M=m*mr+w*v
|
3
|
M=(v/m)*(mr+me)
|
13
|
M=m+mr–100
|
4
|
M=w*v+mr*me
|
14
|
M=v’+w+mr*w
|
5
|
M=m*mr+me
|
15
|
M=m+m1’*me’
|
6
|
M=m.*mr+100
|
16
|
M=(v/m)*(mr+me)
|
7
|
M=v*w+mr–m
|
17
|
M=v*mr+v*m1
|
8
|
M=m+mr*me–10
|
18
|
M=m’+mr/100
|
9
|
M=m*w+mr*v'
|
19
|
M=10*v+w’*mr*m
|
10
|
M=m’+mr*me
|
20
|
M=m’+mr*me
|
5. Решение уравнений, систем линейных уравнений вычисление интегралов
Основные теоретические сведения
В системе MatLab для решения систем линейных уравнений предусмотрены знаки операций / и \. Чтобы решить систему линейных уравнений вида
A⋅y =B ,
где A – заданная квадратная матрица размером N x N,
B – заданный вектор–столбец длины N, достаточно применить операцию \ и вычислить выражение A\ B .
Операция \ называется левым делением матриц и, будучи примененная к матрицам A и B в виде A\B , примерно эквивалентна вычислению выражения inv(A)*B. Здесь под inv(A) понимается вычисление матрицы, обратной к матрице A.
Пример решения СЛАУ:
>> A=[1 -2 3 -1;2 3 -4 4;3 1 -2 -2;1 -3 7 6];
>> B=[6;-7;9;-7];
>> y=A\B
y =
2.0000
-1.0000
0.0000
-2.0000
|
или >> y=inv(A)*B
y =
2.0000
-1.0000
0.0000
-2.0000
|
Проверка для второй строки
>> z=2*2+3*(-1)+(-4)*0+4*(-2)
z =
-7
|
>> A(2,:)*y
ans =
-7
|
Операцию / называют правым делением матрицы. Выражение A/B примерно соответствует вычислению выражения B*inv(A). Значит, эта операция позволяет решать системы линейных уравнений вида y⋅A= B .
Решение уравнения F (x) = 0, или нахождение нулей функции, осуществляется с помощью функции fzero(name, x0). В качестве первого аргумента ей передается имя функции, задающей исходное уравнение, вторым аргументом служит начальное приближение к корню. Определим, в качестве примера, нули функции cos(x) на отрезке от 0 до pi. В качестве начального приближения примем x0 = 1.
>> x=fzero('cos', 1)
x = 1.5708
Если требуется найти корень функции, отличной от стандартной (встроенной в систему MatLab) и тем самым не имеющей в рамках системы MatLab фиксированного имени, то нужно приписать некоторое имя выражению, вычисляющему функцию.
Пусть, например, требуется найти корни уравнения cos(x)=x, что эквивалентно нахождению нулей функции, вычисляемой по формуле y=cos(x)−x, не имеющей в рамках системы MatLab фиксированного имени. В этом случае нужно создать Mat – функцию вида
function y=MyFunction1(x)
y=cos(x)-x
После этого можно воспользоваться функцией fzero:
>> x=fzero('MyFunction1',pi/2)
x = 0.7391
Если найдено абсолютно точное значение корня, то значение функции в этой точке равно нулю. Таким образом, величина функции в приближенно найденном нуле косвенно характеризует погрешность результата. Чтобы управлять погрешностью, нужно осуществлять вызов функции fzero с тремя аргументами fzero(name, x0, tol ), где tol задает требуемую величину погрешности (ошибки). Необходимо отметить, что функция fzero находит нули только вещественнозначных функций одной вещественной переменной. Однако часто бывает необходимо найти комплексные корни вещественнозначных функций, особенно в случае многочленов. Для этой цели в системе MatLab существует специальная функция roots(p), которой в качестве аргумента передается массив коэффициентов многочлена (p). Например, для многочлена нужно сначала сформировать массив его коэффициентов (расположив по порядку убывания степени х):
>> p = [ 1 -3 3 -3 2 ]:
>> r = roots( p)
r = 2.0000
-0.0000 +1.0000i
-0.0000 –1.0000i
1.0000
В задаче о нахождении нулей функции сложным моментом является нахождение начального приближения к нулю функции, а также априорная оценка их количества. Поэтому важно параллельно с применением функций типа roots или fzero визуализировать поведение искомых функций на том или ином отрезке значений аргумента.
В системе MatLab имеются специальные функции для поиска минимума заданных функций. При этом возможен поиск минимума как для функции одной вещественной переменной, так и для функций многих переменных.
Для функций одной переменной их минимумы разыскивает функция xmin =fmin(name, x0, x1). Здесь name представляет имя функции, у которой находятся минимумы, а x0 и x1 задают отрезок поиска.
Для поиска минимума функции нескольких переменных применяется функция fmins: xmins = fmins( name, x0). Здесь name является именем функции нескольких переменных, для которой ищется минимум, а x0 – это вектор ее аргументов, с которого начинается поиск. Для иллюстративного примера создадим простую функцию двух переменных, имеющую минимумом точку (0,0).
function у = MyFunc2(х)
у = x(1)^2+ x(2)^2;
После этого можно вызвать функцию fmins, которая приближенно находит вектор xmin координат точки минимума:
>> xmin = fmins( 'MyFunc2', [1,1] );
>> xmin(1)
ans =-2.1023e-005
>> xmin(2)
ans =2.5484е-005
Для вычисления интегралов методом трапеций в системе MatLab предусмотрена функция trapz: Integ = trapz(х, у). Точность вычисления интеграла зависит от величины шага интегрирования: чем меньше этот шаг, тем больше точность.
Вычислим простой интеграл методом трапеций с шагом интегрирования рi/10.
>> dx = pi/10;
>>х = 0:dx:pi;
>> y=cos(x);
>>I1 = trapz(x,y);
I1 = 5.5511e-017
Обычно для достижения высокой точности требуется выполнять интегрирование с очень малыми шагами, а контроль достигнутой точности осуществлять путем сравнения последовательных результатов. При одном и том же шаге интегрирования методы более высоких порядков точности достигают более точных результатов. В системе MatLab методы интегрирования более высоких порядков точности реализуются функциями: quad (метод Симпcона) и quad8 (метод Ньютона–Котеса 8-го порядка точности).
Двойные интегралы в системе MatLab вычисляются с помощью специальной функции dblquad.
Вычислим интеграл вида .
Оформим подынтегральную mat–функцию и вызовем функцию dblquad:
function z = integ(x, у)
z = x.*sin(y) + y.*sin(x);
>> J = dblquad( 'integ', 0, 1, 1, 2 );
J = 1.1678
Возможности встроенного пакета символьных вычислений и операции Symbolic Math Toolbox достаточно обширны, рассмотрим лишь некоторые его возможности. Символьный объект создается при помощи функции syms. Команда создает три символьные переменные х, а и b
>> syms х a b
Конструирование символьных функций от переменных класса sym object производится с использованием обычных арифметических операций и обозначений для встроенных математических функций. Запись формулы для выражения в одну строку не всегда удобна, более естественный вид выражения выводит в командное окно функция pretty:
Упростим выражение , используя функцию simplify.
Рисунок 5.1– Демонстрация работы
функции pretty
|
Рисунок 5.2– Демонстрация работы функции simplify
|
Символьную функцию можно создать без предварительного объявления переменных при помощи sym, входным аргументом которой является строка с выражением, заключенная в апострофы:
Рисунок 5.3 – Демонстрация создания символьной переменной
без предварительного объявления
Упрощение тригонометрических, логарифмических, экспоненциальных функций и полиномов осуществляется функцией expand, формат обращения к которой имеет следующий вид: rez=expand(S), где S – символьное выражение, которое нужно упростить, rez – результат упрощения.
Например:
>> syms x y;
>> rezl=expand(sin(x+y))
rezl = sin (x) *cos (у) +cos (x) *sin (y)
С помощью функции factor можно раскладывать многочлены на простые множители, а целые числа – в произведение простых чисел.
>> factor(sym('x^5 – 1') )
ans =
(х-1)*(х^4+х^3+х^2+х+1)
Функция subs осуществляет подстановку новых выражений для указанных символьных переменных:
Рисунок 5.4 – Демонстрация работы функции subs
Symbolic Math Toolbox позволяет работать как с неопределенными интегралами, так и с определенными. Неопределенные интегралы от символьных функций вычисляются при помощи функции int, в качестве входных аргументов указываются символьная функция и переменная, по которой происходит интегрирование (см. рис. 5.5).
Рисунок 5.5 – Демонстрация работы функции int
Для нахождения определенного интеграла в символьном виде следует задать нижний и верхний пределы интегрирования в третьем и четвертом аргументах int соответственно, рис. 5.6.
Рисунок 5.6 – Демонстрация работы функции int для нахождения определенного интеграла
Достарыңызбен бөлісу: |