Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

matlab laboratornye / матлаботчет6

.docx
Скачиваний:
0
Добавлен:
25.09.2025
Размер:
428.61 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра РС

отчет

по лабораторной работе №6

по дисциплине «MATLAB»

Тема: Операции с многочленами и

возможности обработки данных в MATLAB

Студент гр. фыв

фыв

Преподаватель

фыв

Санкт-Петербург

фыв

Цель работы:

Изучение функций работы с полиномами; знакомство с аппроксимацией и интерполяцией данных; знакомство с функциями расчета выборочных статистик

Краткие теоретические сведения:

I. Пусть задан многочлен P(x)=a1xn+a2xn-1+…+an-1x+an.

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

1. Задать вектор-строку коэффициентов многочлена

2. Получить вектор корней многочлена с помощью функции roots.

Формат функции:

<имя вектора корней>=roots(<имя вектора коэффициентов>)

II. Пусть заданы корни многочлена x1, x2, …, xn и необходимо определить его коэффициенты. Тогда нужно выполнить следующие действия:

1. Задать вектор корней

2. Получить вектор коэффициентов многочлена с помощью функции poly. Формат функции:

<имя вектора коэффициентов>=poly(<имя вектора корней>)

III. Для вычисления значения полинома P(x)=a1x n+a2x n-1+…+an1x+an в точке x =s следует:

1. Задать вектор-строку коэффициентов многочлена.

2. Использовать функцию polyval.

Формат функции:

<имя переменной со значениями многочлена> = polyval (<ИмяПеременнойСКоэффициентамиМногочлена>, <значения х>)

IV. Функция conv (a, b) используется для умножения полиномов p(x) и g(x), где a и b – векторы коэффициентов полиномов p(x) и g(x) соответственно.

V. Функция deconv (a, b) используется для деления полиномов p(x) и g(x), где a и b – векторы коэффициентов полиномов p(x) и g(x) соответственно. Результат работы функции – объединенный вектор [q, r], где вектор q – частное, вектор r – остаток от деления.

VI. Функция polyder (p) используется для вычисления производной полинома p(x), где p – вектор коэффициентов полинома p(x). Результат работы функции – вектор коэффициентов производной dp(x)/dx

Копии рабочей области MATLAB:

Найти корни многочлена: P(x) = x5+8x4+31x3+80x2+94x+20.

» pol=[1 8 31 80 94 20];

» r=roots(pol)

Убедиться, что функция poly восстанавливает коэффициенты многочлена по его корням.

»pol2=poly(r)

Рисунок 1 - Корни многочлена

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

x

2

4

6

8

10

y

1,5

6,3

4,8

8

2,6

Последовательность в виде матрицы, содержащей 2 строки и 5 столбцов (строка №1 - значения х, строка №2 – значения у):

» xydata=[2 4 6 8 10;1.5 6.3 4.8 8 2.6];

Выполнить вызовы следующих функций. Самостоятельно, просматривая результат на экране, определить принцип работы каждой из функций (кроме функции std)

» [n,p]=size(xydata) - позволяет сохранить в памяти машины и использовать потом при дальнейших вычислениях данные о числе строк n и столбцов p этой матрицы

» max(xydata) - выдает значение максимального элемента этого вектора

» min(xydata) - извлекает минимальный элемент вектора

» mean(xydata) - определяют, соответственно, среднее значение элементов вектора

Рисунок 2 - Работа с функциями в матрице

» std(xydata) - % стандартное (квадратичное) отклонение

» sort(xydata) - формирует вектор, элементы которого расположены в порядке возрастания их значений

» sum(xydata) - вычисляет сумму элементов вектора

» prod(xydata) - выдает произведение всех элементов вектора

» diff(xydata) - создает вектор, который имеет размер на единицу меньший размера исходного вектора, элементы которого являются разностью между соседними элементами исходного вектора

Рисунок 3 - Работа с функциями в матрице

Дана экспериментальная зависимость:

x

2

4

6

8

10

12

14

y

3,76

4,14

5,04

5,56

6,00

6,36

6,64

Задать вектор х

» х=[2 4 6 8 10 12 14];

Задать вектор у

» у=[3.76 4.14 5.04 5.56 6.00 6.36 6.64];

Найти коэффициенты аппроксимирующего многочлена второй степени:

» kAP=polyfit(x,y,2)

Вычислить значения аппроксимирующего многочлена в точках х:

» AP=polyval(kAP,x)

Построить на одном графике исходную зависимость y(x) и вычисленную приближенную AP(x), при этом пометить маркерами точки, соответствующие исходной последовательности (тип узловой точки выбрать самостоятельно).

Рисунок 4 – Код для построения аппроксимации многочлена 2-ого порядка

Увеличивая порядок аппроксимирующего полинома от 2 до 6, пронаблюдать приближение результата аппроксимации к исходной зависимости.

Рисунок 5 - Аппроксимация многочлена 2-го порядка

Рисунок 6 - Аппроксимация многочлена 3-го порядка

Рисунок 7 - Аппроксимация многочлена 4-го порядка

Рисунок 8 - Аппроксимация многочлена 5-го порядка

Рисунок 9 - Аппроксимация многочлена 6-го порядка

Пример-задача:

Создать m-файл, позволяющий: задать синусоиду на одном периоде 10-ю точками; исходную 10-титочечную сетку по оси абсцисс определить в переменной х, а исходную для интерполяции последовательность – в переменной у. Задать новую более "мелкую" сетку: за период синусоиды в ней должно уложиться уже 50 точек. Осуществить интерполяцию исходной последовательности, используя все возможные методы. Результаты сохранять в переменных yi<условный номер метода>. Отобразить в первом графическом окне исходную последовательность и результат интерполяции всеми методами. Имя m-файла – interpol.m (сохранить в рабочем каталоге своей группы).

Текст m-файла задачи.

function interpol

x = linspace(0, 2*pi, 10); % 10 точек на интервале [0, 2*pi]

y = sin(x); % Значения синусоиды на исходной сетке

% Задание более мелкой сетки (50 точек на период)

x_fine = linspace(0, 2*pi, 50);

% Интерполяция всеми возможными методами MATLAB

yi1 = interp1(x, y, x_fine, 'linear'); % Линейная интерполяция

yi2 = interp1(x, y, x_fine, 'nearest'); % Ближайший сосед

yi3 = interp1(x, y, x_fine, 'next'); % Следующий сосед

yi4 = interp1(x, y, x_fine, 'previous'); % Предыдущий сосед

yi5 = interp1(x, y, x_fine, 'pchip'); % PCHIP (piecewise cubic Hermite % interpolating polynomial)

yi6 = interp1(x, y, x_fine, 'cubic'); % Кубическая интерполяция

yi7 = interp1(x, y, x_fine, 'spline'); % Сплайн-интерполяция

% Отображение результатов

figure;

plot(x, y, 'o', 'DisplayName', 'Исходный'); hold on;

plot(x_fine, yi1, '-', 'DisplayName', 'Linear');

plot(x_fine, yi2, '--', 'DisplayName', 'Nearest');

plot(x_fine, yi3, ':', 'DisplayName', 'Next');

plot(x_fine, yi4, '-.', 'DisplayName', 'Previous');

plot(x_fine, yi5, '-', 'DisplayName', 'PCHIP');

plot(x_fine, yi6, '--', 'DisplayName', 'Cubic');

plot(x_fine, yi7, ':', 'DisplayName', 'Spline');

% Настройка графика

title('Интерполяция синусоиды');

xlabel('x');

ylabel('y');

legend('show');

grid on;

Рисунок 10 Интерполяция синусоиды

Вывод:

В ходе выполнения лабораторной работы были изучены основные функции для работы с многочленами, включая нахождение их корней, вычисление коэффициентов, а также применение операций умножения, деления и дифференцирования. Освоены методы аппроксимации и интерполяции данных, позволяющие с высокой точностью приближать экспериментальные зависимости и восстанавливать значения на новых сетках. Эти навыки полезны для анализа и обработки данных в инженерных и научных задачах.

Соседние файлы в папке matlab laboratornye