
- •Введение
- •Лабораторная работа ип1 Знакомство с Matlab
- •1. Рабочая среда Matlab
- •2. Данные Matlab
- •Типы данных
- •Числовые константы
- •Символьные константы
- •Переменные
- •3. Выражения
- •3.1. Арифметические выражения
- •3.2. Логические выражения
- •3.3. Порядок вычисления выражений
- •4. Сообщения об ошибках и исправление ошибок
- •5. Завершение вычислений
- •6. Завершение работы с системой
- •7. Резюме
- •8. Контрольные вопросы
- •9. Индивидуальные задания
- •Лабораторная работа ип2 работа с матрицами в matlab
- •1. Общие сведения
- •2. Одномерные массивы – векторы
- •3. Двумерные массивы – матрицы
- •4. Использование двоеточия
- •4.1. Автозаполнение
- •4.2. Индексация
- •5. Поэлементные и матричные операции
- •6. Стандартные функции для работы с матрицами
- •7. Логическое индексирование
- •8. Контрольные вопросы
- •9. Индивидуальные задания
- •10. Упражнения
- •2. Диалоговый ввод/вывод
- •3. Управление последовательностью исполнения операторов
- •3.1. Оператор условия if
- •3.2. Оператор переключения
- •3.3. Оператор цикла с определенным числом повторений
- •3.4. Оператор цикла с неопределенным числом повторений
- •4. Контрольные вопросы
- •5. Индивидуальные задания
- •Лабораторная работа ип4 визуализация данных в matlab
- •1. Общие сведения
- •2. Построение таблицы значений функции
- •3. Двумерная графика
- •3.1. Общие правила построения графиков
- •3.2. Оформление графиков
- •3.3. Построение графиков
- •3.4. Управление свойствами графиков
- •4. Трехмерная графика
- •4.1. Общие принципы построения трехмерных графиков
- •4.2. Построение трехмерных графиков
- •4.3. Управление свойствами трехмерных графиков
- •5. Контрольные вопросы
- •6. Индивидуальные задания
- •Лабораторная работа ип5 файл-функции
- •2. Описание m-функции
- •3. Обращение к m-функции
- •4. Параметры-функции
- •5. Разновидности m-функций
- •5.1. Подфункции
- •5.2. Вложенные функции
- •6. Контрольные вопросы
- •7. Индивидуальные задания
- •2. Аппроксимация
- •2.1. Моделирование полиномом по методу
- •2.2. Аппроксимация произвольной функцией
- •3. Интерполяция
- •3.1. Кусочная интерполяция
- •3.2. Кубические сплайны
- •3.3. Интерполяция произвольной нелинейной функцией
- •4. Контрольные вопросы
- •5. Индивидуальные задания
- •Лабораторная работа ип7 Вычисление функций разложением в ряд
- •1. Общие сведения
- •2. Индивидуальное задание
- •Лабораторная работа ип8 Решение нелинейных уравнений в среде Matlab
- •1. Общие сведения
- •2. Поиск корней полиномов
- •3. Решение одного нелинейного уравнения
- •4. Решение систем нелинейных уравнений
- •5. Контрольные вопросы
- •6. Индивидуальные задания
- •Лабораторная работа ип9 обмен данными с текстовым файлом
- •1. Общие сведения
- •2. Открытие файла
- •3. Запись в текстовый файл
- •3.1. Запись строковых значений
- •3.2. Запись числовых значений
- •4. Чтение из текстового файла
- •4.1. Последовательное чтение строк
- •4.2. Последовательное чтение нескольких символов
- •4.3. Чтение чисел из текстового файла
- •4.4. Альтернативный доступ к текстовому файлу
- •5. Закрытие файла
- •6. Контрольные вопросы
- •7. Индивидуальные задания
- •Заключение
- •Список рекомендуемой литературы
- •Программирование в matlab
- •428015 Чебоксары, Московский просп., 15
2.2. Аппроксимация произвольной функцией
по методу наименьших квадратов
Основное ограничение на вид моделирующей функции – она должна быть линейной относительно искомых коэффициентов. Аппроксимацию произвольной функцией по методу наименьших квадратов можно выполнить, используя Matlab-функцию lsqcurvefit, обращение к которой имеет следующий вид:
coeff = lsqcurvefit(f,x0,x,y);
где x, y – векторы значений аппроксимируемой функции; x0 – начальное значение параметров (коэффициентов) моделирующей функции; f – аппроксимирующая функция, вид которой задается пользователем; coeff – вектор уточненных параметров моделирующей функции.
Пример:
Некоторая функция
задана таблицей значений. Известен или
предполагается общий вид этой функции
,
но неизвестны значения параметров
(коэффициентов
,
).
Требуется подобрать коэффициенты так,
чтобы обеспечить минимум отклонений
моделирующей кривой от узлов таблицы.
Решение:
Для конкретности возьмем функцию
.
Поскольку точные значения коэффициентов
известны, то будем иметь возможность
сравнить решение. Вычислим табличные
точки
x=0:0.5:7;
y=14*sin(3*x)-2*x.^2+4;
Сделаем вид, что значения коэффициентов не известны, зададим их стартовые значения, равными 1
x0=[1 1 1];
Опишем inline-функцию с неизвестными параметрами, размещенными в векторе a
f=inline('a(1)*sin(3*x)+a(2)*x.^2+a(3)','a','x');
Уточним значения коэффициентов при помощи функции lsqcurvefit, результат разместим в векторе coeff
coeff=lsqcurvefit(f,x0,x,y)
Вычислим значения модельной функции в узлах таблицы
ymodel=model(x,coeff);
hold on
Построим реальную функцию
fplot(@model,[0 7],'b-',[],[],coeff)
Прорисуем отсчеты моделирующей и реальной функций
plot(x,y,model,'bo',x,y,'r*')
hold off
grid
title('Моделирование произвольной функцией')
legend('Исходная функция','Отсчеты','Модель')
Здесь model –m-функция аргумента х с параметром, заданным вектором coeff
function y=model(x,coeff)
y=coeff(1)*sin(3*x)+coeff(2)*x.^2+coeff(3);
Результат построений приведен на рис. 5.2.
Рис. 5.2. Моделирование с помощью lsqcurvefit
Обратите внимание на очень важный момент: функция lsqcurvefit для своей работы требует первой в списке параметров указать функцию, первым формальным параметром которой являются искомые коэффициенты. А функция fplot, используемая нами для прорисовки плавной кривой, первым параметром предписывает указать функцию, в списке формальных параметров которой первым указывается аргумент х, и только потом – коэффициенты. Поэтому нельзя одну и туже функцию использовать в обоих случаях. При этом не имеет принципиального значения, какая именно функция используется: m или inline. Для обращения к lsqcurvefit мы могли бы написать следующую m-функцию:
function y=model2(coeff,x)
y=coeff(1)*sin(3*x)+coeff(2)*x.^2+coeff(3);
которая отличается от функции model только порядком следования формальных параметров. Напомню, что имена формальных параметров и в функции model, и в model2 могут быть любыми допустимыми в Matlab (совсем не обязательно называть их у, х и coeff). Впрочем, это касается не только m-функций, но и inline-объектов.
Отсчеты, заданные таблицей и полученные в результате моделирования (рис. 5.2), совпадают, т.к. исходные данные (и вид функции, и координаты функции) были заданы без погрешности. Коэффициенты, вычисленные lsqcurvefit, равны заданным значениям
coeff =
14.0000 -2.0000 4.0000