Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MOTS_LR1.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
348 Кб
Скачать
☆

1.4. Классика численных методов

Работа с полиномами.

Полином P(x)=anxn+an-1xn-1+…+a2x2+a1x+a0 в MatLAB задается вектором своих коэффициентов P=[an an-1… a2 a1 a0]. Ниже приведены некоторые специальные функции по работе с полиномами.

conv(P1,P2) – возвращает вектор коэффициентов после умножения двух полиномов.

[Q,R]=deconv(P1,P2) – возвращает результаты деления полинома P1 на полином P2 – полином-частное Q и полином остаток – R. Иными словами, полиномы Q и R связаны с полиномами P1 и P2 так: P1=conv(P2,Q)+R.

roots(Р) – вычисляет вектор нулей (корней) полинома Р.

poly(X) – Когда X – вектор: вычисляется вектор коэффициентов полинома по вектору его корней X. Здесь следует особо отметить, что полученный вектор коэффициентов не содержит коэффициента при старшей степени полинома, т.к. он всегда равен единице. Коэффициенты упорядочены по убыванию степеней полинома. Поэтому, для формирования полного набора коэффициентов полинома, следует добавить в полученный вектор в качестве первого элемента единицу (например, так, v=[1 v]). Когда X – квадратная матрица: строится вектор характеристического полинома матрицы Xdet(sE-X). Причем формируются все коэффициенты, в том числе и старший.

polyval(P,Х) – Когда Х – скаляр: вычисляет значение полинома Р по заданному значению его аргумента Х. Когда Х – произвольных размеров матрица или вектор: вычисляется матрица или вектор, элементы которой (которого) являются значениями полинома Р при аргументе, равном значению элемента исходной матрицы (вектора) Х. Иными словами, возвращаются значения полинома Р в точках, заданных в массиве Х.

polyvalm(Р,М) – вычисляются значения полинома Р от квадратной матрицы М.

polyder(P) – возвращает производную от полинома Р.

[r,p,k]=residue(b,a) – возвращает вычеты, полюса и полином целой части от отношения полиномов b/a.

[b,a]=residue(r,p,k) – выполняет обратные действия (возвращает полиномы b и a по вычетам, полюсам и целой части их отношения).

Решение систем линейных уравнений.

Задачи решения систем линейных алгебраических уравнений (СЛАУ) довольно часто встречаются в различных приложениях. В векторно-матричной форме СЛАУ записывают как Ax=b, где A – известная матрица n*n коэффициентов; b – известный вектор n*1 правых частей; x – вектор n*1 неизвестных. Самый простой способ решения такой системы в MatLAB – это применение обычных операций с матрицами, например, x=A^-1*b или x=A\b.

Вычисление нулей функции одной переменной.

Для решения данной задачи в системе MatLAB существует функция fzero. Рассматривается произвольное нелинейное уравнение f(x)=0. Требуется найти его решение. В самой общей постановке, поиск всех корней этого уравнения – задача весьма трудная. Однако в отдельных случаях, связанных с конкретными условиями поиска, данная задача может иметь решение. Например, когда требуется найти хотя бы один корень уравнения и известно, что функция f(x) непрерывна на заданном интервале и имеет на концах этого интервала разные знаки.

fzero('func',x) – возвращает уточненное значение x, при котором достигается нуль функции func. Число x – начальное приближение нуля функции. Если возвращается NaN, то нуль функции не найден. func – строковая константа – имя функции, нуль которой ищется. Чтобы задать интервал поиска нуля, можно в качестве x использовать двумерный вектор x=[x1 x2], такой, что знаки func(x1) и func(x2) должны отличаться. Например,

» fzero('sin',[pi/4 -pi/6])

Zero found in the interval: [0.7854, -0.5236].

ans =

1.5777e-030

Для выявления интервалов поиска нулей некоторой функции сначала рекомендуется построить график этой функции и приближенно определить нули и интервалы перемены знаков.

Нахождение минимума функции одной переменной.

Для решения задачи нахождения минимума функции одной переменной в некотором интервале изменения ее аргумента в системе MatLAB предлагается использовать функцию fmin. Если требуется определить максимум, то следует искать минимум, предварительно изменив знак у исследуемой функции.

fmin('func',x1,x2) – возвращает значение x, являющееся минимумом функции func в указанном интервале поиска (x1,x2). Например,

» fmin('x^2-x',-2,3)

ans =

0.5000

Численное интегрирование функций одной переменной.

Решение задачи численного интегрирования функции одной переменной предлагается осуществлять методом трапеций. Для этого в системе MatLAB применяется функция trapz. Обычно эта функция используется либо в виде trapz(y), либо в виде trapz(x,y).

trapz(y) – возвращает значение интеграла для функции, заданной своими ординатами в векторе y. Шаг интегрирования здесь выбирается равным единице. Если требуется интегрировать функцию с постоянным отличным от единицы шагом, то для получения результата следует умножить возвращаемое функцией trapz(y) значение на величину этого шага.

trapz(x,y) – возвращает интеграл от функции, заданной своими отсчетами в точках (xi,yi). Вектора x и y должны быть одной и той же длины.

Для вычисления интегралов от функций, заданных в аналитическом виде и оформленных в M-файлы, в MatLAB реализованы алгоритмы Симпсона и квадратурные формулы Ньютона-Котеса.

quad('func',a,b) – возвращает значение интеграла от функции 'func', заданной на интервале [a, b]. Реализован алгоритм адаптивного метода Симпсона.

quad8('func',a,b) – возвращает значение интеграла от функции 'func', заданной на интервале [a, b]. Используются квадратурные формулы Ньютона‑Котеса 8‑го порядка. Например,

» quad8('sin',0,pi)

ans =

2.0000

Аппроксимация и интерполяция данных.

Полиномиальная аппроксимация данных, которые сформированы в вектор Y, при значениях аргумента, находящихся в векторе X, выполняется процедурой polyfit(X,Y,n). Здесь n – порядок аппроксимирующего полинома. В результате действия этой процедуры получают вектор размером (n+1) коэффициентов аппроксимирующего полинома.

Примерные действия по полиномиальной аппроксимации некоторого набора измерений выглядят следующим образом:

  1. Формируем массив значений аргумента: x=0:2:10;

  2. Формируем массив значений отсчетов функции: y=x.^0.5; (y=x);

  3. Вычисляем коэффициенты аппроксимирующего полинома: p=polyfit(x,y,1);

  4. Имеем аппроксимирующую зависимость: y(x)=p(1)*x+p(2);

  5. Построим графики исходных данных и аппроксимирующей зависимости: stem(x,y), grid on, hold on, x1=0:0.1:10, y1=polyval(p,x1), plot(x1,y1).

Функция Yi=spline(x,y,Xi) осуществляет интерполяцию кубическими сплайнами. По заданным векторам отсчетов x и y вычисляется вектор значений Yi интерполирующего сплайна по заданным в заданных точках Xi. Пример команд для вычислений и построений соответствующих графиков приведен ниже.

x=0:2:10, y=x.^0.5, Xi=0:0.1:10, Yi=spline(x,y,Xi), stem(x,y), grid on, hold on, plot(Xi,Yi)

Функция Yi=interp1(x,y,Xi,'<метод>') производит одномерную табличную интерполяцию. Здесь в качестве четвертого параметра следует указать имя метода интерполяции: nearest – ступенчатая; linear – линейная; cubic – кубическая; spline – кубическими сплайнами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]