Перейти к содержимому

Как задать интервал в матлабе

  • автор:

Применение оператора: (двоеточие) MatLab

Очень часто необходимо произвести формирование упорядоченных числовых последовательностей. Такие последовательности нужны для создания векторов или значений абсциссы при построении графиков. Для этого в MATLAB используется оператор : (двоеточие):
Начальное_значение:Шаг:Конечное_значение
Данная конструкция порождает возрастающую последовательность чисел, которая начинается с начального значения, идет с заданным шагом и завершается конечным значением. Если Шаг не задан, то он принимает значение 1. Если конечное значение указано меньшим, чем начальное значение, — выдается сообщение об ошибке. Примеры применения оператора : даны ниже:
» 1:5
ans =
12345

i = 0 2 4 6 8 10

V =
0 1.5708 3.1416 4.7124 6.2832

X=
1.0000 0.8000 0.6000 0.4000 0.2000 0

Как отмечалось, принадлежность MATLAB к матричным системам вносит коррективы в назначение операторов и приводит при неумелом их использовании к казусам. Рассмотрим следующий характерный пример:
» х=0:5
х=
0 1 2 3 4 5

ans =
1.0000 0.5403 -0.4161 -0.9900 -0.6536 0.2837

Вычисление массива косинусов здесь прошло корректно. А вот вычисление массива значений функции sin(x)/x дает неожиданный, на первый взгляд, эффект — вместо массива с шестью элементами вычислено единственное значение!
Причина «парадокса» здесь в том, что оператор / вычисляет отношение двух матриц, векторов или многомерных массивов. Если они одной размерности, то результат будет одним числом, что в данном случае и выдала система. Чтобы действительно получить вектор значений sin(x) /x, надо использовать специальный оператор поэлементного деления массивов — . /. Тогда будет получен массив чисел:
» sin(x)./x
Warning: Divide by zero.
ans =
NaN 0.8415 0.4546 0.0470 -0.1892-0.1918
Впрочем, и тут без особенностей не обошлось. Так, при х = 0 значение sin(x)/x дает устранимую неопределенность вида 0/0=1. Однако, как и всякая численная система, MATLAB классифицирует попытку деления на 0 как ошибку и выводит соответствующее предупреждение. А вместо ожидаемого численного значения выводится символьная константа NaN, означающая, что неопределенность 0/0 — это все же не обычное число.
Выражения с оператором : могут использоваться в качестве аргументов функций для получения множественных их значений. Например, в приводимом ниже примере вычислены функции Бесселя порядка от 0 до 5 со значением аргумента 0.5:
» bessel(0:l:5,l/2)

ans =
0.9385 0.2423 0.0306 0.0026 0.0002 0.0000
А в следующем примере вычислено шесть значений функции Бесселя нулевого порядка для значений аргумента от 0 до 5 с шагом 1:
» bessel(0.0:1:5)

ans =
1.0000 0.7652 0.2239 -0.2601 -0.3971 -0.1776

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

Как задать интервал в матлабе

И.В.Черных. «Simulink: Инструмент моделирования динамических систем»

7. Установка параметров расчета и его выполнение

Перед выполнением расчетов необходимо предварительно задать параметры расчета. Задание параметров расчета выполняется в панели управления меню Simulation/Parameters. Вид панели управления приведен на Рис.7.1.

Рис 7.1. Панель управления

Окно настройки параметров расчета имеет 4 вкладки:

  • Solver (Расчет) — Установка параметров расчета модели.
  • Workspace I/O (Ввод/вывод данных в рабочую область) — Установка параметров обмена данными с рабочей областью MATLAB.
  • Diagnostics (Диагностика) — Выбор параметров диагностического режима.
  • Advanced (Дополнительно) — Установка дополнительных параметров.

Установка параметров расчета модели выполняется с помощью элементов управления, размещенных на вкладке Solver. Эти элементы разделены на три группы (рис. 7.1): Simulation time (Интервал моделирования или, иными словами, время расчета), Solver options (Параметры расчета), Output options (Параметры вывода).

7.1. Установка параметров расчета модели

7.1.1. Simulation time (Интервал моделирования или время расчета)

Время расчета задается указанием начального (Start time) и конечного (Stop time) значений времени расчета. Начальное время, как правило, задается равным нулю. Величина конечного времени задается пользователем исходя из условий решаемой задачи.

7.1.2. Solver options (Параметры расчета)

При выборе параметров расчета необходимо указать способ моделирования (Type) и метод расчета нового состояния системы. Для параметра Type доступны два варианта — c фиксированным (Fixed-step) или с переменным (Variable-step) шагом. Как правило, Variable-step используется для моделирования непрерывных систем, a Fixed-step — для дискретных.

Список методов расчета нового состояния системы содержит несколько вариантов. Первый вариант (discrete) используется для расчета дискретных систем. Остальные методы используются для расчета непрерывных систем. Эти методы различны для переменного (Variable-step) и для фиксированного (Fixed-step) шага времени, но, по сути, представляют собой процедуры решения систем дифференциальных уравнений. Подробное описание каждого из методов расчета состояний системы приведено во встроенной справочной системе MATLAB.

Ниже двух раскрывающихся списков Type находится область, содержимое которой меняется зависимости от выбранного способа изменения модельного времени. При выборе Fixedstep в данной области появляется текстовое поле Fixed-step size (величина фиксированного шага) позволяющее указывать величину шага моделирования (см. рис. 7.2). Величина шага моделирования по умолчанию устанавливается системой автоматически (auto). Требуемая величина шага может быть введена вместо значения auto либо в форме числа, либо в виде вычисляемого выражения (то же самое относится и ко всем параметрам устанавливаемым системой автоматически).

Рис 7.2. Вкладка Solver при выборе фиксированного шага расчета

При выборе Fixedstep необходимо также задать режим расчета (Mode). Для параметра Mode доступны три варианта:

  • MultiTasking (Многозадачный) – необходимо использовать, если в модели присутствуют параллельно работающие подсистемы, и результат работы модели зависит от временных параметров этих подсистем. Режим позволяет выявить несоответствие скорости и дискретности сигналов, пересылаемых блоками друг другу.
  • SingleTasking (Однозадачный) — используется для тех моделей, в которых недостаточно строгая синхронизация работы отдельных составляющих не влияет на конечный результат моделирования.
  • Auto (Автоматический выбор режима) — позволяет Simulink автоматически устанавливать режим MultiTasking для тех моделей, в которых используются блоки с различными скоростями передачи сигналов и режим SingleTasking для моделей, в которых содержатся блоки, оперирующие одинаковыми скоростями.

При выборе Variable-step в области появляются поля для установки трех параметров:

  • Мах step size — максимальный шаг расчета. По умолчанию он устанавливается автоматически (auto) и его значение в этом случае равно (SfopTimeStartTime)/50. Довольно часто это значение оказывается слишком большим, и наблюдаемые графики представляют собой ломаные (а не плавные) линии. В этом случае величину максимального шага расчета необходимо задавать явным образом.
  • Мin step size — минимальный шаг расчета.
  • Initial step size — начальное значение шага моделирования.

При моделировании непрерывных систем с использованием переменного шага необходимо указать точность вычислений: относительную (Relative tolerance) и абсолютную (Absolute tolerance). По умолчанию они равны соответственно 10 -3 и auto.

7.1.3. Output options (Параметры вывода)

В нижней части вкладки Solver задаются настройки параметров вывода выходных сигналов моделируемой системы (Output options). Для данного параметра возможен выбор одного из трех вариантов:

  • Refine output (Скорректированный вывод) – позволяет изменять дискретность регистрации модельного времени и тех сигналов, которые сохраняются в рабочей области MATLAB с помощью блока То Workspace. Установка величины дискретности выполняется в строке редактирования Refine factor, расположенной справа. По умолчанию зна чение Refine factor равно 1, это означает, что регистрация производится с шагом D t = 1 (то есть для каждого значения модельного времени:). Если задать Refine factor равеным 2, это означает, что будет регистрироваться каждое второе значение сигналов, 3 — каждое третье т. д. Параметр Refine factor может принимать только целые положительные значения
  • Produce additional output (Дополнительный вывод) — обеспечивает дополнительную регистрацию параметров модели в заданные моменты времени; их значения вводятся в строке редактирования (в этом случае она называется Output times) в виде списка, заключенного в квадратные скобки. При использовании этого варианта базовый шаг регистрации (D t) равен 1. Значения времени в списке Output times могут быть дробными числами и иметь любую точность.
  • Produce specified output only (Формировать только заданный вывод) — устанавливает вывод параметров модели только в заданные моменты времени, которые указываются в поле Output times (Моменты времени вывода).

7.2. Установка параметров обмена с рабочей областью

Элементы, позволяющие управлять вводом и выводом в рабочую область MATLAB промежуточных данных и результатов моделирования, расположены на вкладке Workspace I/O (рис. 7.3).

Рис 7.3. Вкладка Workspace I/O диалогового окна установки параметров моделирования

  • Load from workspace (Загрузить из рабочей области). Если флажок Input (Входные данные) установлен, то в расположенном справа текстовом поле можно ввести формат данных, которые будут считываться из рабочей области MATLAB. Установка флажка Initial State (Начальное состояние) позволяет ввести в связанном с ним текстовом поле имя переменной, содержащей параметры начального состояния модели. Данные, указанные в полях Input и Initial State, передаются в исполняемую модель посредством одного или более блоков In (из раздела библиотеки Sources).
  • Save to workspace (Записать в рабочую область) – Позволяет установить режим вывода значений сигналов в рабочую область MATLAB и задать их имена.
  • Save options (Параметры записи) – Задает количество строк при передаче переменных в рабочую область. Если флажок Limit rows to last установлен, то в поле ввода можно указать количество передаваемых строк (отсчет строк производится от момента завершения расчета). Если флажок не установлен, то передаются все данные. Параметр Decimation (Исключение) задает шаг записи переменных в рабочую область (аналогично параметру Refine factor вкладки Solver). Параметр Format (формат данных) задает формат передаваемых в рабочую область данных. Доступные форматы Array (Массив), Structure (Структура), Structure With Time (Структура с дополнительным полем – “время”).

7.3. Установка параметров диагностирования модели

Вкладка Diagnostics (рис. 7.4) позволяет изменять перечень диагностических сообщений, выводимых Simulink в командном окне MATLAB, а также устанавливать дополнительные параметры диагностики модели.

Сообщения об ошибках или проблемных ситуациях, обнаруженных Simulink в ходе моделирования и требующих вмешательства разработчика выводятся в командном окне MATLAB. Исходный перечень таких ситуаций и вид реакции на них приведен в списке на вкладке Diagnostics. Разработчик может указать вид реакции на каждое из них, используя группу переключателей в поле Action (они становятся доступны, если в списке выбрано одно из событий):

  • None — игнорировать,
  • Warning -— выдать предупреждение и продолжить моделирование,
  • Error — выдать сообщение об ошибке и остановить сеанс моделирования.

Выбранный вид реакции отображается в списке рядом с наименованием события.

Рис 7.4. Вкладка Diagnostics окна установки параметров моделирования

Запуск расчета выполняется с помощью выбора пункта меню Simulation/Start. или инструмента на панели инструментов. Процесс расчета можно завершить досрочно, выбрав пункт меню Simulation/Stop или инструмент . Расчет также можно остановить (Simulation/Pause) и затем продолжить (Simulation/Continue).

Построение доверительных интервалов в MATLAB

Суть задачи такова: нужно построить график измеренной величины.
У меня уже есть перенесённые в MATLAB переменные. Первая переменная: массив параметров x размером в 30 точек.
Вторая переменная: двумерный массив y размера 40×30. Т.е. каждому значению x(i) у меня соответствует одномерный столбец намеренных значений y(:, i) .
Я могу функцией mean(y(:, i)) подсчитать среднее y_mean(i) для каждого x(i) (результат измерений — случайная величина с неизвестным распределением). И потом на этих двух массивах можно строить график.
Однако мне ещё надобно построить доверительные интервалы. Весь вопрос в том, как это сделать? Я смотрел help для функции confint и объекта fit , но так и не разобрался. На массиве реализаций я могу посчитать дисперсию и потом вытащить доверительный интервал из распределения Стьюдента. Однако мне хочется, чтобы MATLAB сделал это вместо меня. Куда нужно смотреть в help’e? И ещё: будет очень здорово если эти доверительные интервалы будут выведены на график, типа точка и возле неё такая штучка буквой T. Типа вот какая ошибка возможна по оси Y.
Как это сделать?
Можно ли это сделать обычным plot() ?

Отслеживать

7,015 1 1 золотой знак 17 17 серебряных знаков 31 31 бронзовый знак

Решение нелинейных уравнений в Matlab

Решение нелинейных уравнений matlab

Доброго времени суток. В этой статье мы разберем решение простых нелинейных уравнений с помощью средств Matlab. Посмотрим в действии как стандартные функции, так и сами запрограммируем три распространенных метода для решения нелинейных уравнений.

Общая информация

  • Метод перебора
  • Метод простых итераций
  • Метод половинного деления

Рассмотрим коротко их алгоритмы и применим для решения конкретной задачи.

Стандартные функции Matlab

Для решения нелинейных уравнений в Matlab есть функция fzero. Она принимает в качестве аргументов саму функцию, которую решаем, и отрезок, на котором происходит поиск корней нелинейного уравнения.

И сразу же разберем пример:

Решить нелинейное уравнение x = exp(-x), предварительно определив интервалы, на которых существуют решения уравнения.

Итак, для начала следует привести уравнение к нужному виду: x — exp(-x) = 0 , а затем определить интервалы, в которых будем искать решение уравнения. Методов для определения интервалов множество, но так как пример достаточно прост мы воспользуемся графическим методом.

x = -4.0 : 0.001 : 4.0; y = x - exp(-x); plot(x,y); grid on;

Здесь задали примерные границы по оси x, чтобы можно было построить график и посмотреть как ведет себя функция. Вот график:

Из графика видно, что на отрезке [0;1] есть корень уравнения (там, где y = 0), соответственно в дальнейшем будем использовать этот интервал. Чем точнее выбран интервал, тем быстрее метод придет к решению уравнения, а для сложных уравнений правильный выбор интервала определяет погрешность, с которой будет получен ответ.

x0 = fzero('(x - exp(-x))', [0.0 1.0]); x0 = 0.5671

С помощью стандартной функции Matlab находим корень нелинейного уравнения и выводим. Теперь для проверки отобразим все это графически:

plot(x,y); grid on; hold on; plot(x0,0,'r*');

Как вы видите, все достаточно точно просчиталось. Теперь мы исследуем эту же функцию с помощью других методов и сравним полученные результаты.

Метод перебора Matlab

Самый простой метод, который заключается в том, что сначала задается какое то приближение x (желательно слева от предполагаемого корня) и значение шага h. Затем, пока выполняется условие f(x) * f(x + h) > 0, значение x увеличивается на значение шага x = x + h. Как только условие перестало выполняться — это значит, что решение нелинейного уравнения находится на интервале [x; x + h].

Теперь реализуем метод перебора в Matlab:

f = inline('x - exp(-x)'); h = 0.0001; % задаем шаг x = 0.0; % начальное приближение i = 0; % счетчик итераций while (f(x)*f(x+h)) > 0 x = x + h; i = i + 1; end x % выводим решение i % и затраченное количество итераций 

Лучше всего создать новый m-файл, в котором и прописать код. После вызова получаем такой вывод:

x = 0.5671 i = 5671

Функцию объявляем с помощью очень полезной команды inline, в цикле пока выполняется условие отсутствия корней (или их четного количества), прибавляем к x значение шага. Очевидно, что чем точнее начальное приближение, тем меньше итераций необходимо затратить.

Метод простых итераций Matlab

Этот метод заключается в том, что функцию преобразуют к виду: x = g(x). Эти преобразования можно сделать разными способами, в зависимости от вида начальной функции. Помимо этого следует задать интервал, в котором и будет производиться итерационный процесс, а также начальное приближение. Сам процесс строится по схеме xn= g(xn-1). То есть итерационно проходим от предыдущего значения к последующему.

Процесс заканчивается как только выполнится условие: , то есть, как только будет достигнута заданная точность. И сразу же разберем реализацию метода простых итераций в Matlab для примера, который был приведен выше.

f = inline('x - exp(-x)'); x0 = 0.0; % начальное приближение eps = 0.00001; % точность N = 100; % количество итераций, чтобы не было зацикливаний g = inline('exp(-x)'); x1 = g(x0); % первое значение for i = 1 : N % делаем максимум 100 итераций if abs(x1 - x0) eps break end x0 = x1; x1 = g(x0); end x1 i

Здесь должно быть все понятно, кроме одного: зачем задавать число итераций? Это нужно для того, чтобы программа не зацикливалась и не выполняла ненужные итерации, а также потому что не всегда программа может просчитать решение с нужной точностью — поэтому следует ограничивать число итераций.

А вот и вывод программы:

x1 = 0.5671 i = 22

Очевидно, что метод простых итераций работает гораздо быстрее и получает точное решение.

Метод половинного деления Matlab

Метод достаточно прост: существует отрезок поиска решения [a;b], сначала находят значение функции в точке середины c, где c = (a+b)/2. Затем сравнивают знаки f(a) и f(c). Если знаки разные — то решение находится на отрезке [a;c], если нет — то решение находится на отрезке [c;b]. Таким образом мы сократили область в 2 раза. Такое сокращение происходит и дальше, пока не достигнем заданной точности.

Перейдем к реализации метода в Matlab:

f = inline('x - exp(-x)'); eps = 0.00001; a = 0.0; b = 1.0; i = 0; while abs(a - b) > eps c = (a + b) / 2; if ((f(c) * f(a)) < 0) b = c; else a = c; end i = i + 1; end c i

Все самое важное происходит в цикле: последовательно сокращаем область нахождения решения, пока не будет достигнута заданная точность.
Вот что получилось в выводе:

c = 0.5671 i = 17

Этот метод хорошо работает, когда правильно определен интервал, на котором находится решение. Тем не менее, метод простых итераций считается наиболее точным и быстрым.

Заключение

Сегодня мы рассмотрели решение нелинейных уравнений в Matlab. Теперь нам известны методы перебора, половинного деления, простых итераций. А также, когда нам не важно реализация метода, то можно использовать стандартную функцию в Matlab.

На этом все — спасибо за внимание. В следующей статье мы разберем решение систем нелинейных уравнений в matlab.

Поделиться ссылкой:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *