Как задать точность в матлабе
И.В.Черных. «Simulink: Инструмент моделирования динамических систем»
14. Повышение скорости и точности расчетов
На точность и скорость расчета модели в Simulink можно воздействовать многими способами, включая структуру модели и ее параметры. Решающие модули Simulink работают точно и эффективно и с параметрами заданными для них “по умолчанию”. Однако для некоторых моделей можно добиться лучших результатов по скорости и точности, если задать более точно параметры решателя дифференциальных уравнений. Также, если предполагаемое поведение модели известно, то можно используя эту информацию повысить скорость и точность расчетов.
14.1. Повышение скорости расчета
Малая скорость моделирования может иметь много причин. Среди них можно выделить основные:
- Модель содержит блок MATLAB Fcn . При использовании блока MATLAB Fcn в модели Simulink на каждом расчетном шаге обращается к интерпретатору языка MATLAB для выполнения расчетов в данном блоке. Вместо блока MATLAB Fcn , если это возможно, следует использовать блоки Fcn или Math Function .
- Модель включает S -функцию, написанную на языке MATLAB . В этом случае также происходит обращение к интерпретатору языка MATLAB на каждом расчетном шаге. Вместо MATLAB S -функции более предпочтительным было бы использование S -функций написанных на языках C или Fortran и откомпилированных в исполняемый машинный код в виде динамической библиотеки.
- Модель включает блок памяти Memory . Использование блока памяти заставляет решающие модули с переменным порядком ( ode15s и ode113 ) выполнять снижение порядка до первого на каждом расчетном шаге.
- Максимальный размер шага ( Max step size ) слишком мал. Если этот параметр был изменен, то следует попробовать выполнить моделирование снова, установив этот параметр равным auto .
- Задана слишком высокая точность расчетов. Обычно значение абсолютной погрешности ( Relative tolerance ) заданное равным 0.1% достаточно для большинства расчетов. При слишком малых значениях этого параметра шаг расчета может оказаться также достаточно малым, что приведет к замедлению расчетов.
- Задан слишком большой интервал расчета по времени. Как правило, при моделировании динамических систем переходные процессы представляют больший интерес, нежели установившийся режим. По достижении установившегося режима расчет можно прекратить, поскольку далее никаких изменений в состоянии модели не будет. Желательно заранее оценить предполагаемое время расчета исходя из знаний о моделируемом объекте.
- Модель может оказаться жесткой, а используемый решатель не предназначен для моделирования жестких систем. Следует попробовать использовать методы ode15s или ode23tb и сравнить время расчета при решении этими методами.
- В модели используются блоки, шаг дискретизации которых ( Sample time ) не является кратным. В этом случае Simulink уменьшает шаг расчета до такого значения, чтобы он был кратен шагу дискретизации каждого блока. Например, если шаг дискретизации одного блок равен 0.5 , а другого – 0.7 , то Simulink установит максимальное значение шага расчета равное 0.1 .
- Модель содержит алгебраический контур. Алгебраические контуры рассчитываются в Simulink с помощью итерационной процедуры на каждом шаге расчета, что замедляет общее время расчета.
- Модель имеет блок Random Number , который передает свой выходной сигнал на вход интегратора (блок Integrator) . Предпочтительнее использовать блок Band-Limited White Noise block из библиотеки Sources .
- Модель включает большое число блоков Scope . Блоки требуют значительного объема памяти для хранения отображаемых данных, что может привести к использованию компьютером виртуальной (дисковой) памяти и существенному замедлению расчетов.
- В блоках Scope параметр Limit data points to last задан значительно меньшим, чем фактическое число расчетных шагов (либо флажок этого параметра снят). В этом случае, при превышении числом шагов значения параметра Limit data points to last , для отображения каждой новой расчетной точки будет выполняться процедура выделения памяти, что существенно замедляет скорость расчета. Рекомендуется заранее установить параметр Limit data points to last большим, чем фактическое число расчетных шагов. Имеет смысл также задать параметр Decimation (прореживание) большим 1 , чтобы сократить число хранимых блоком Scope данных.
Скорость расчета можно также повысить в несколько раз, используя ускоренный ( Accelerator ) режим расчета. Это можно сделать с помощью меню Tools или панели инструментов. В ускоренном режиме расчета предварительно проводится трансляция модели в исполнительный код ( dll -файл), а затем уже проводится сам расчет. Некоторые дополнительные затраты времени на трансляцию с лихвой окупаются ускорением расчета модели. Однако при изменении структуры модели процедура трансляции будет повторена. К сожалению, ускоренный режим расчета не может быть использован в моделях имеющих алгебраические контуры.
Существенный выигрыш по времени может дать использование дискретных моделей вместо непрерывных.
Наиболее существенным же с точки зрения скорости вычислений может оказаться правильный выбор уровня детализации модели. К примеру, если выполняется моделирование системы электроснабжения города, вряд ли стоит моделировать каждый потребитель электрической энергии: электрический двигатель, чайник, сварочный аппарат и т.п. Вполне достаточным будет создание обобщенных моделей электрических потребителей на уровне заводского цеха, жилого дома, трамвайного парка и т.п.
14.2. Повышение точности расчета
Чтобы проверить достаточно ли точно выполняется моделирование, следует провести сравнительные расчеты с разными значениями параметра Relative tolerance (относительная погрешность). К примеру, можно провести расчет с заданным “по умолчанию” значением этого параметра – 1e-3 и с меньшим ( 1e-4 ) значением. Если результаты расчетов отличаются незначительно, то можно полагать, что найденное решение является верным. Если решения значительно отличаются в начальной стадии, то следует задать в явном виде достаточно малый начальный шаг расчета ( Initial step size ).
Если решение оказывается неустойчивым, то это может быть вызвано следующими причинами:
- Моделируемая система сама является неустойчивой.
- Используется метод ode15s . Следует ограничить порядок величиной 2 или использовать метод ode23s .
Если решение кажется не точным:
- Следует задать в явном виде параметр Absolute tolerance (абсолютная погрешность) и выполнить ряд расчетов, уменьшая величину этого параметра.
- Если уменьшение абсолютной погрешности точность расчетов не улучшается, следует уменьшить относительную погрешность (что приведет уменьшению шага расчета) либо в явном виде задавать достаточно малую величину максимального шага расчета.
3. Повышение скорости и точности расчетов
На точность и скорость расчета модели в Simulink и SimPowerSystem можно воздействовать многими способами, включая структуру модели и ее параметры. Решающие модули Simulink и SPS работают точно и эффективно с параметрами заданными для них «по умолчанию». Однако для некоторых моделей можно добиться лучших результатов по скорости и точности, если задать более точно параметры решателя дифференциальных уравнений. Также, если предполагаемое поведение модели известно, то можно используя эту информацию повысить скорость и точность расчетов. Как правило, модель электротехнической установки включает не только SimPowerSystem-блоки, но и блоки основной библиотеки Simulink, поэтому повышение скорости и точности расчета может достигаться как общими для Simulink модели методами, так и методами специфическими для SPS моделей. Приведены рекомендации по повышению скорости и точности расчетов как для Simulink-моделей так и для моделей включающих SimPowerSystem-блоки.
3.1 Повышение скорости расчета
Малая скорость моделирования может иметь много причин. Среди них можно выделить основные:
Модель содержит блок MATLAB Fcn. При использовании блока MATLAB Fcn в модели Simulink на каждом расчетном шаге обращается к интерпретатору языка MATLAB для выполнения расчетов в данном блоке. Вместо блока MATLAB Fcn , если это возможно, следует использовать блоки Fcn или Math Function.
Модель включает S-функцию, написанную на языке MATLAB. В этом случае также происходит обращение к интерпретатору языка MATLAB на каждом расчетном шаге. Вместо MATLAB S-функции более предпочтительным было бы использование S-функций написанных на языках C или Fortran и откомпилированных в исполняемый машинный код в виде динамической библиотеки.
Модель включает блок памяти Memory. Использование блока памяти заставляет решающие модули с переменным порядком (ode15s и ode113) выполнять снижение порядка до первого на каждом расчетном шаге.
Максимальный размер шага (Max step size) слишком мал. Если этот параметр был изменен, то следует попробовать выполнить моделирование снова, установив этот параметр равным auto.
Задана слишком высокая точность расчетов. Обычно значение абсолютной погрешности (Relative tolerance) заданное равным 0.1% достаточно для большинства расчетов. При слишком малых значениях этого параметра шаг расчета может оказаться также достаточно малым, что приведет к замедлению расчетов.
Задан слишком большой интервал расчета по времени. Как правило, при моделировании динамических систем переходные процессы представляют больший интерес, нежели установившийся режим. По достижении установившегося режима расчет можно прекратить, поскольку далее никаких изменений в состоянии модели не будет. Желательно заранее оценить предполагаемое время расчета исходя из знаний о моделируемом объекте.
Модель может оказаться жесткой, а используемый решатель не предназначен для моделирования жестких систем. Следует попробовать использовать методы ode15s или ode23tb и сравнить время расчета при решении этими методами.
В модели используются блоки, шаг дискретизации которых (Sample time) не является кратным. В этом случае Simulink уменьшает шаг расчета до такого значения, чтобы он был кратен шагу дискретизации каждого блока. Например, если шаг дискретизации одного блок равен 0.5, а другого — 0.7, то Simulink установит максимальное значение шага расчета равное 0.1 .
Модель содержит алгебраический контур. Алгебраические контуры рассчитываются в Simulink с помощью итерационной процедуры на каждом шаге расчета, что замедляет общее время расчета.
Модель имеет блок Random Number, который передает свой выходной сигнал на вход интегратора (блок Integrator). Предпочтительнее использовать блок Band-Limited White Noise block из библиотеки Sources.
Модель включает большое число блоков Scope. Блоки требуют значительного объема памяти для хранения отображаемых данных, что может привести к использованию компьютером виртуальной (дисковой) памяти и существенному замедлению расчетов.
В блоках Scope параметр Limit data points to last задан значительно меньшим, чем фактическое число расчетных шагов (либо флажок этого параметра снят). В этом случае, при превышении числом шагов значения параметра Limit data points to last, для отображения каждой новой расчетной точки будет выполняться процедура выделения памяти, что существенно замедляет скорость расчета. Рекомендуется заранее установить параметр Limit data points to last большим, чем фактическое число расчетных шагов. Имеет смысл также задать параметр Decimation (прореживание) большим 1, чтобы сократить число хранимых блоком Scope данных.
Скорость расчета можно также повысить в несколько раз, используя ускоренный (Accelerator) режим расчета. Это можно сделать с помощью меню Tools или панели инструментов. В ускоренном режиме расчета предварительно проводится трансляция модели в исполнительный код (dll-файл), а затем уже проводится сам расчет. Некоторые дополнительные затраты времени на трансляцию с лихвой окупаются ускорением расчета модели. Однако при изменении структуры модели процедура трансляции будет повторена. К сожалению, ускоренный режим расчета не может быть использован в моделях имеющих алгебраические контуры.
Существенный выигрыш по времени может дать использование дискретных моделей вместо непрерывных. В SPS-моделях дискретизацию удобнее всего выполнить с помощью графического интерфейса пользователя — Powergui.
При моделировании ключевых устройств следует избегать неоправданно большого различия в параметрах для включенного и выключенного состояний. Так начинающий пользователь для Ideal Switch может задать сопротивление во включенном состоянии Ron = 10-6 Ом, а активное сопротивление искрогасящей цепи Rs = 106 Ом, полагая, что такие параметры обеспечат наилучшее приближение к идеальной модели. При этом разница в сопротивлении ключа для включенного и выключенного состояний составит 12 порядков и модель окажется жесткой, что вынудит Simulink существенно снизить шаг расчета и, соответственно, общее время расчета модели значительно возрастет. В то время как, для достижения вполне хороших результатов, различие между Ron и Rs может составлять всего 2-3 порядка.
Моделирование полупроводниковых преобразователей энергии может занимать достаточно большое время. Если при расчетах требуется повторные вычисления от некоторого момента времени, то можно сэкономить время, сохранив вектор состояний модели для этого момента в рабочей области MATLAB. Все повторные расчеты можно будет проводить начиная с этого состояния. Для реализации такого механизма необходимо выполнить соответствующие настройки на вкладке Workspace IO окна Simulation parameters.
Наиболее существенным же с точки зрения скорости вычислений может оказаться правильный выбор уровня детализации модели. К примеру, если выполняется моделирование системы электроснабжения города, вряд ли стоит моделировать каждый потребитель электрической энергии: электрический двигатель, чайник, сварочный аппарат и т.п. Вполне достаточным будет создание обобщенных моделей электрических потребителей на уровне заводского цеха, жилого дома, трамвайного парка и т.п.
3.2 Повышение точности расчета
Чтобы проверить достаточно ли точно выполняется моделирование, следует провести сравнительные расчеты с разными значениями параметра Relative tolerance (относительная погрешность). К примеру, можно провести расчет с заданным «по умолчанию» значением этого параметра — 1e-3 и с меньшим (1e-4) значением. Если результаты расчетов отличаются незначительно, то можно полагать, что найденное решение является верным. Если решения значительно отличаются в начальной стадии, то следует задать в явном виде достаточно малый начальный шаг расчета (Initial step size).
Если решение оказывается неустойчивым, то это может быть вызвано следующими причинами:
- Моделируемая система сама является неустойчивой.
- Используется метод ode15s. Следует ограничить порядок величиной 2 или использовать метод ode23s.
Если решение кажется не точным:
- Следует задать в явном виде параметр Absolute tolerance (абсолютная погрешность) и выполнить ряд расчетов, уменьшая величину этого параметра.
- Если уменьшение абсолютной погрешности точность расчетов не улучшается, следует уменьшить относительную погрешность (что приведет уменьшению шага расчета) либо в явном виде задавать достаточно малую величину максимального шага расчета.
Документация
По умолчанию, MATLAB ® использование 16 цифр точности. Для более высокой точности используйте vpa функция в Symbolic Math Toolbox™. vpa обеспечивает переменную точность, которая может быть увеличена без предела.
Когда вы выбираете арифметику переменной точности, по умолчанию, vpa использование 32 значительных десятичных цифры точности. Для получения дополнительной информации смотрите, Выбирают Numeric or Symbolic Arithmetic. Можно установить более высокую точность при помощи digits функция.
Аппроксимируйте сумму с помощью точности по умолчанию 32 цифр. Если по крайней мере один вход перенесен с vpa , все другие входные параметры преобразованы в переменную точность автоматически.
vpa(1/3) + 1/2
ans = 0.83333333333333333333333333333333
Необходимо перенести все внутренние входные параметры с vpa , такой как exp(vpa(200)) . В противном случае входные параметры автоматически преобразованы, чтобы удвоиться MATLAB.
Увеличьте точность до 50 цифры при помощи digits и сохраните старое значение digits в digitsOld . Повторите сумму.
digitsOld = digits(50); sum50 = vpa(1/3) + 1/2
sum50 = 0.83333333333333333333333333333333333333333333333333
Восстановите старое значение цифр для дальнейших вычислений.
digits(digitsOld)
Примечание
vpa выход является символьным. Чтобы использовать символьный выход с функцией MATLAB, которая не принимает символьные значения, преобразуйте символьные значения в двойную точность при помощи double .
Проверяйте ток digits установка путем вызова digits .
digits
Digits = 32
Измените точность для сингла vpa вызов путем определения точности как второго входа к vpa . Этот вызов не влияет digits . Например, аппроксимированный pi с 100 цифры.
vpa(pi,100)
ans = 3.14159265358979323846264338327950288419716939937510582097494 4592307816406286208998628034825342117068
digits % digits remains 32
Digits = 32
Переменная точность может быть увеличена произвольно. Найдите pi к 500 цифры.
digitsOld = digits(500); vpa(pi) digits(digitsOld)
ans = 3.1415926535897932384626433832795028841971693993751058209749 445923078164062862089986280348253421170679821480865132823066 470938446095505822317253594081284811174502841027019385211055 596446229489549303819644288109756659334461284756482337867831 652712019091456485669234603486104543266482133936072602491412 737245870066063155881748815209209628292540917153643678925903 600113305305488204665213841469519415116094330572703657595919 530921861173819326117931051185480744623799627495673518857527 248912279381830119491
digits и vpa управляйте количеством значительных десятичных цифр. Например, аппроксимация 1/111 с четырехразрядной точностью возвращает шесть цифр после десятичной точки, потому что первые две цифры являются нулями.
vpa(1/111,4)
ans = 0.009009
Примечание
Если вы хотите увеличить эффективность путем уменьшения точности, смотрите Скорость Увеличения путем Сокращения Точности.
Документация Symbolic Math Toolbox
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
Форматы чисел MatLab
По умолчанию MATLAB выдает числовые результаты в нормализованной форме с четырьмя цифрами после десятичной точки и одной до нее. Многих такая форма представления не всегда устраивает. Поэтому при работе с числовыми данными можно задавать различные форматы представления чисел. Однако в любом случае все вычисления проводятся с предельной, так называемой двойной, точностью. Для установки формата представления чисел используется команда » format name где name — имя формата. Для числовых данных name может быть следующим сообщением: short — короткое представление в фиксированном формате (5 знаков), short e — короткое представление в экспоненциальном формате (5 знаков мантиссы и 3 знака порядка), long — длинное представление в фиксированном формате (15 знаков), long e — длинное представление в экспоненциальном формате (15 знаков мантиссы и 3 знака порядка), hex — представление чисел в шестнадцатеричной форме; bank — представление для денежных единиц.
Для иллюстрации различных форматов рассмотрим вектор, содержащий два элемента-числа:
х=[4/3 1.2345е-6]
В различных форматах их представления будут иметь следующий вид:
format short format short e format long format long e format bank
1.3333 1.3333E+000 1.333333333333338 1.333333333333338E+000 1.33
0.0000 1.2345E-006 0.000001234500000 1.234500000000000E-006 0.00
Задание формата сказывается только на форме вывода чисел. Вычисления все равно происходят в формате двойной точности, а ввод чисел возможен в любом удобном для пользователя виде.