- •Введение
- •Лабораторная работа № 1 Знакомство с matlab и простейшие вычисления
- •Введение
- •Операции с числами и работа в режиме калькулятора
- •Комплексные числа
- •Элементарные функции
- •Порядок выполнения работы
- •Вопросы для самопроверки:
- •Лабораторная работа № 2 Векторы и матрицы
- •Лабораторная работа № 3 Вычисления с векторами и матрицами
- •Лабораторная работа № 4 Решение математических задач
- •Порядок выполнения работы
- •Лабораторная работа № 5 Решение обыкновенных дифференциальных уравнений и систем обыкновенных дифференциальных уравнений
- •Введение
- •Введение
- •Литература
- •Введение
- •Лабораторная работа № 8 Алгебраические уравнения и линейная алгебра
- •Введение
- •Лабораторная работа № 9 Решение обыкновенных дифференциальных уравнений в Mathcad
- •Введение
- •Лабораторная работа № 10 Обработка экспериментальных данных и аппроксимация характеристик нелинейных элементов
- •Введение
- •**Самостоятельная работа Символьные вычисления в Mathcad
- •Введение
Лабораторная работа № 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, задаваемой пользователем.