Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы ИСНР-ф.doc
Скачиваний:
33
Добавлен:
11.09.2019
Размер:
1.62 Mб
Скачать

Лабораторная работа № 4 Решение математических задач

Цель работы: изучить операции над полиномами; дифференцирование функции одной переменной.

Введение

Полином или многочлен – это выражения вида

В MATLAB Р(х) рассматривается как вектор, элементами которого являются коэффициенты полинома, число элементов всегда больше на единицу степени полинома n, нулевые коэффициенты должны содержаться в векторе. С полиномами можно выполнять операции умножения, деления, интегрирования и дифференцирования. Рассмотрим некоторые из них на конкретных примерах.

Пусть заданы два полинома:

Для задания полиномов в MATLAB необходимо выполнить следующую команду:

>> H=[1 3 4]

H =

1 3 4

>> D=[1 5 7 12 20]

D =

1 5 7 12 20

С помощью оператора polyval(…) можно вычислить значение полинома в точке р = рi = 5i:

>> polyval(H,5i)

ans =

-21.0000 +15.0000i

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

>> x=[1 3 5i 4-7i]

x =

1.0000 3.0000 0 + 5.0000i 4.0000 - 7.0000i

>> polyval(D,x)

ans =

1.0e+003 *

0.0450 0.3350 0.4700 - 0.5650i -4.8300 + 3.2550i

>> s=[2 1 6;3 5 4]

s =

2 1 6

3 5 4

>> polyval(H,s)

ans =

14 8 58

22 44 32

С помощью оператора roots(…) можно вычислить все корни полинома, коэффициенты которого вещественные числа:

>> p=roots(D)

p =

-3.5222

-2.0000

0.2611 + 1.6646i

0.2611 - 1.6646i

или

>> p=roots([1 5 7 12 20])

p =

-3.5222

-2.0000

0.2611 + 1.6646i

0.2611 - 1.6646i

Восстановить коэффициенты полинома, у которого коэффициент при старшей степени равен 1, можно с помощью оператора poly(…):

>> a=poly(p)

a =

1.0000 5.0000 7.0000 12.0000 20.0000

С помощью оператора conv(…) выполняется операция умножения двух полиномов:

>> W=conv(D,H)

W =

1 8 26 53 84 108 80

Для вычисления производной используется оператор polyder(…):

>> Hd1=polyder(H)

Hd1 =

2 3

>> Wd1=polyder(D,H)

Wd1 =

6 40 104 159 168 108

Экспериментальные данные, представленные в виде массивов чисел и отражающие зависимость одних физических величин от других (y = f(x)), целесообразно интерпретировать в виде аппроксимирующих полиномов n-го порядка. В программе MATLAB предусмотрена функция polyfit(x, y, n), реализующая метод наименьших квадратов. Предварительно нужно задать вектора значений функции y и аргумента x. В качестве примера рассмотрим аппроксимацию функции y =f(x), заданную таблично:

x

0

5

10

25

50

100

300

y

0

1.38

1.5

1.62

1.71

1.81

2.05


>> x=[0 5 10 25 50 100 300]

x =

0 5 10 25 50 100 300

>> y=[0 1.38 1.5 1.62 1.71 1.81 2.05]

y =

0 1.3800 1.5000 1.6200 1.7100 1.8100 2.0500

Обоснованно выбрать степень полинома можно путём вычисления табличных разностей с помощью функции dyff(y,n), предпочтение отдаётся полиному с меньшими табличными разностями:

>> diff(y,2)

ans =

-1.2600 0 -0.0300 0.0100 0.1400

>> diff(y,3)

ans =

1.2600 -0.0300 0.0400 0.1300

>> diff(y,4)

ans =

-1.2900 0.0700 0.0900

>> diff(y,5)

ans =

1.3600 0.0200

>> diff(y,6)

ans =

-1.3400

Очевидно, что лучше выбрать полином порядка n = 6 (если порядок полинома на единицу меньше размерности векторов х и у, то график полинома проходит через точки этих векторов). Результатом расчёта является вектор коэффициентов полинома в порядке убывания степени х:

>> a2=polyfit(x,y,2)

a2 =

-0.0000 0.0150 0.9488

>> a3=polyfit(x,y,3)

a3 =

0.0000 -0.0005 0.0482 0.6777

>> a4=polyfit(x,y,4)

a4 =

-0.0000 0.0000 -0.0035 0.1328 0.3547

>> a5=polyfit(x,y,5)

a5 =

0.0000 -0.0000 0.0003 -0.0154 0.2860 0.0751

>> a6=polyfit(x,y,6)

a6 =

-0.0000 0.0000 -0.0000 0.0024 -0.0538 0.4907 -0.0000

Следовательно, аппроксимирующий полином запишется в виде

Проверить достоверность результатов аппроксимации можно с помощью оператора polyval(a,x):

>> f6=polyval(a6,x)

f6 =

-0.0000 1.3800 1.5000 1.6200 1.7100 1.8100 2.0500

>> f5=polyval(a5,x)

f5 =

0.0751 1.1566 1.6799 1.5836 1.7150 1.8098 2.0500

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

>> plot(x,y,x,f6,'x',x,f5,'o')

Рис. 1

Сглаживание неточностей исходных данных можно осуществить с помощью функции lsqcurvefit(f, а0, x, y), где а0 – стартовое значение неизвестных параметров функции f, задаваемой пользователем.