ВВЕДЕНИЕ МАТЛАБ (MATLAB) – система компьютерной математики, которая в настоящее время широко применяется исследователями для решения прикладных и теоретических задач на ЭВМ. Название МАТЛАБ происходит от словосочетания “матричная лаборатория» (matrix laboratory), что первоначально соответствовало основному назначению системы – матричным вычислениям. Впоследствии, с развитием системы, в неё были добавлены функции и вычислительные алгоритмы из многих других областей математики. Но основной подход к элементарным операциям, когда число рассматривается как частный случай матрицы, сохранился. В настоящее время МАТЛАБ представляет собой развитую систему, включающую в себя в качестве составных частей инструменты для решения задач из разных областей математики, таких как линейная алгебра, численные методы, динамические системы и т. д. Пользователю предлагается несколько вариантов использования системы. Основным режимом является режим командной строки, при котором команды, набираемые пользователем на клавиатуре в ответ на приглашение системы, выполняются в диалоговом режиме с немедленной выдачей результата. В этом режиме легко получить решение таких задач, как вычисление определителей, обращение и перемножение матриц, решение систем линейных алгебраических уравнений и др. Для выполнения этих и других операций необходимо вызвать соответствующую функцию системы, передав ей входные параметры и, возможно, сохранить результат для последующего использования. Ядро МАТЛАБ содержит более тысячи функций. Помимо них доступно большое количество внешних функций, описанных в расширениях системы. В добавление к ним пользователь может создавать свои собственные функции, используя для этого специально предусмотренный язык программирования. Таким образом, МАТЛАБ является расширяемой системой, и это одно из важных её достоинств. Помимо режима командной строки, являющегося основным режимом работы, некоторые расширения МАТЛАБ предлагают собственные диалоговые средства. Примером такого расширения является PDE Tool – графический интерфейс, предназначенный для решения дифференциальных уравнений в частных производных. Помимо функций, доступных из командной строки, он также предоставляет пользователю графическую среду, работающую в отдельном окне. Выше упоминалось о том, что в МАТЛАБ имеется язык программирования. С его помощью можно создавать и реализовывать собственные алгоритмы, используя все доступные функции системы и все основные приёмы программирования, имеющиеся в других языках, такие как подпрограммы, циклы, ветвления, рекурсии и другие. Запись алгоритма на языке программирования МАТЛАБ сохраняется в файле в текстовом формате, либо в специальном внутреннем представлении. МАТЛАБ обладает развитой графикой. Графическая подсистема МАТЛАБ является объектно-ориентированной. Графики выводятся на экран в отдельных окнах, причём как сами окна, так и составные части графиков (оси, разметка, надписи, линии) являются элементами иерархического дерева объектов. Для построения графиков в МАТЛАБ имеется большой набор функций, позволяющих создавать множество различных типов двумерных и трёхмерных графиков, диаграмм, гистограмм и т. д., причём элементами графического окна можно управлять программно. Как графические объекты рассматриваются также такие элементы, как кнопки, текстовые надписи, поля ввода, полосы прокрутки и т. п. Свойства и методы этих объектов доступны пользователю, что даёт возможность создавать в МАТЛАБ Windows-приложения. Для проектирования форм имеется редактор, вызываемый по команде GUIDE. Вдобавок к развитым графическим средствам МАТЛАБ в качестве одного из своих расширений предоставляет пользователю Virtual Reality Toolbox — пакет для разработки и отображения сцен виртуальной реальности, для которых доступны средства анимации. Это позволяет не только моделировать динамические процессы в Simulink (Simulink – расширение МАТЛАБ, предназначенное для моделирования динамических процессов), но и, подключив потоки выходных данных к входам спроектированной пользователем виртуальной сцены, наблюдать на мониторе анимированную динамику процесса. Современные версии МАТЛАБ имеют развитые средства интеграции с другими языками программирования. Непосредственно из МАТЛАБ-программы можно создавать и использовать объекты Java; для написания S-функций (системных функций МАТЛАБ-Simulink) можно использовать языки высокого уровня C, C++, Ada, Fortran; кроме того функции системы МАТЛАБ можно экспортировать в dll и вызывать из других программ. Также можно использовать вычислительные возможности системы, передавая запросы удалённому компьютеру по сети. МАТЛАБ поддерживает некоторые виды символьных вычислений. Среди них арифметические операции над числами с произвольным количеством разрядов, преобразование выражений, символьное дифференцирование, аналитическое вычисление пределов, интегралов, вычисление сумм рядов. В МАТЛАБ реализованы численные методы решения ряда вычислительных задач, таких как нахождение корней полиномов, решение задачи Коши для систем ОДУ, вычисление определённого интеграла, решение нелинейных уравнений. Список возможностей МАТЛАБ не ограничивается тем, что было перечислено выше, и меняется с выходом каждой следующей версии пакета. На сегодняшний день система МАТЛАБ считается одной из наиболее мощных и развитых систем компьютерной математики. ОСНОВНЫЕ ФУНКЦИИ x = 4 Выражение может формироваться из вызовов функций, арифметических и логических операций, операндами которых могут быть числовые, строковые и логические константы и массивы, переменные, вызовы функций и другие выражения. Большинство операций и функций реализовано таким образом, что их аргументами могут быть как скалярные величины, так и матрицы. При этом результат выполнения операции также будет скалярным или матричным, в зависимости от аргумента. Матрицы в МАТЛАБ записываются перечислением своих элементов внутри квадратных скобок по строкам, строки при этом разделяются точками с запятой. Рассмотрим пример – сложение двух матриц, которое выполняется по аналогии со сложением двух скалярных величин: >>B=[8 7; 6 5]; >>C=A+B C= 9 9 9 9 >>B=[8 7; 6 5]; >>C=A*B C= 20 17 48 41 >>D=A.*B D = 8 14 18 20 Матричное деление матрицы A на матрицу B в МАТЛАБ понимается как нахождение такой матрицы C=A/B, чтобы матрица C*B-A была бы наиболее близка к нулевой матрице в смысле некоторой нормы. Ещё одна матричная операция, а именно транспонирование, записывается в МАТЛАБ так: Простейшая операция над комплексными числами – выделение действительной и мнимой части – показана на примере, дополнительно иллюстрирующем, что многие функции в МАТЛАБ могут принимать и возвращать как скалярные, так и матричные значения. >>Re=real(A) Re= [2 1 0] >>Im=imag(A) Im= [3 -7 -4] >>max(a) ans= 75 >>[m idx]=min(a) m= 2 idx= 3 Ещё одно замечание – по умолчанию любая команда в системе МАТЛАБ приводит к отображению результата. Чтобы результат не выводился, достаточно завершить ввод команды точкой с запятой: >>a=[1 2; 3 4] a= 1 2 3 4 >>a; >>b=[1 2; 3 4]; >>b b= 1 2 3 4 Теперь перечислим некоторые элементарные математические функции.
Зная имя функции, способ её использования можно уточнить в справочной системе МАТЛАБ.
Опять-таки, подробности использования функций не представляет труда уточнить в справочной системе МАТЛАБ. >>p=[2 4 -3 1]; Это запись полинома 2x3 + 4x2 – 3x +1. Для полиномов реализовано большое количество функций, некоторые из которых приведены ниже:
Далее приведём функции, применяемые при численном дифференцировании, интегрировании и решении дифференциальных уравнений:
Для решения задачи Коши предлагается сразу несколько решателей, реализующих различные численные методы: методы Рунге-Кутта различных порядков, методы Адамса, различные линейные многошаговые методы и т. д. Пакет Control System Toolbox — обширный набор средств анализа одномерных и многомерных непрерывных и дискретных систем и объектов; — построение основных характеристик систем: импульсной, передаточной и переходной, реакция на произвольное воздействие; — построение частотных характеристик: диаграмм Боде, Найквиста, Николса и др.; — разработка замкнутых систем регулирования; — проектирование регуляторов; — определение характеристик моделей: управляемости, наблюдаемости, понижение порядка моделей; — доступны вычислительные операции для систем с запаздыванием; — объект верхнего уровня LTI (Linear Time-Invariant System –линейная стационарная система) — потомки объекта LTI для следующих типов моделей: — в tf-форме – задание числителя и знаменателя передаточной функции (tf – transfer function) — в форме zpk (задание нулей, полюсов и коэффициента усиления передаточной функции) — в ss-форме (задание системы в пространстве состояний, путём указания матриц коэффициентов дифференциальных уравнений) — в frd-форме (задание вектора частот и соответствующих значений комплексного коэффициента передачи)
После того, как создан объект LTI (модель задана одной из функций ss, zpk, tf, frd), для его преобразования в другое представление можно использовать соответствующую из этих функций. 2 + 2 s + 10 >> sys=ss(sys) a = x1 x2 x1 -2 -5 x2 2 0 b = u1 x1 1 x2 0 c = x1 x2 y1 1 0 d = u1 y1 1 0 2 -2 -5 >>[K, S, e]=lqr(A,B,Q,R,N) Функция возвращает матрицу K обратных связей такую, что закон управления u=-Kx минимизирует квадратичный критерий качества: для непрерывной ss-модели. Возвращаемый параметр e представляет собой собственные значения замкнутой системы (матрицы A-BK). Аналогичные функций есть для некоторых других критериев оптимизации, а также как для непрерывных, так и для дискретных систем. Построение визуальной статической модели системы в редакторе виртуальных миров. Система МАТЛАБ предоставляет среду создания и редактирования файлов в формате VRML (Virtual Reality Modeling Language), принятом стандарте описания трёхмерных сцен, сформированных из отдельных графических примитивов (элементарных геометрических тел). Редактор V-Realm Builder, поставляемый вместе с МАТЛАБ, позволяет в интерактивном режиме создавать виртуальные сцены и сохранять их в формате VRML. Графические примитивы (сферы, параллелепипеды, конусы и др.) при этом организовываются в иерархические структуры, управляя параметрами которых можно менять размер, форму, положение, условия видимости и другие характеристики представленных объектов, влияющие на отображаемую картину. При этом изменение какого-то параметра в процессе отображения в соответствии с некоторым законом делает картину динамической, то есть пользователь видит движущуюся сцену. Для организации такого взаимодействия в МАТЛАБ-Simulink есть встроенные средства (блок VR-Sink). Приведём пример виртуальной трёхмерной сцены, построенной и сохранённой в формате VRML при помощи V-Realm Builder. Сцена представляет собой стилизованное изображение двух перевёрнутых вертикальных маятников, закреплённых нижними концами на горизонтальной платформе так, что они могут вращаться вокруг точки закрепления в вертикальной плоскости. #Created with V-Realm Builder v2.0 #Integrated Data Systems Inc. Background { DEF Pend2 Transform { } DEF Pend1 Transform { } DEF Platform Transform { geometry Box { Построение математической модели в Simulink с учётом внутренней динамики Для решения задачи стабилизации двух вертикальных перевёрнутых маятников на горизонтальной движущейся платформе одним управлением используется расширение системы МАТЛАБ для моделирования динамических систем – Simulink. Модель включает в себя несколько блоков, соединённых между собой так, что реализуется обратная связь, стабилизирующая маятники в вертикальном положении одновременно одним управлением. Одна из подсистем реализует наблюдатель состояния, вторая – стабилизацию по оценке состояния при помощи обратной связи. Изменяемыми параметрами модели являются массы и длины маятников, масса тележки, ускорение свободного падения, а также целевой спектр устойчивой системы. Параметры задаются в рабочем пространстве МАТЛАБ при помощи m-файла, который представлен ниже. m1=1 % Масса первого маятника Расчётные матрицы получаются из уравнений движения, записанных приближённо для случая малых углов отклонения маятников. В качестве неизвестных компонент вектора состояния взяты соответственно координата и скорость тележки, угол отклонения и скорость его изменения для первого маятника, и то же самое для второго маятника – итого 6 переменных: Далее формируются расчётные матрицы: IC=[0 0 0. 1 0 0.05 0] % начальные условия В качестве параметров L и K используются векторы, вычисляемые при помощи функции place по известным значениям матриц и целевого спектра. Коричневой рамкой выделена подсистема, являющаяся наблюдателем. Графики, полученные в результате расчётаСкорость тележки |
Python | Модуль decimal
Последнее обновление: 04.02.2022
При работе с числами с плавающей точкой (то есть float) мы сталкиваемся с тем, что в результате вычислений мы получаем не совсем верный результат:
number = 0.1 + 0.1 + 0.1 print(number) # 0.30000000000000004
Проблему может решить использование функции round(), которая округлит число. Однако есть и другой способ, который заключается в использовании встроенного модуля decimal.
Ключевым компонентом для работы с числами в этом модуле является класс Decimal. Для его применения нам надо создать его объект с помощью конструктора. В конструктор передается строковое значение, которое представляет число:
from decimal import Decimal number = Decimal("0.1")
После этого объект Decimal можно использовать в арифметических операциях:
from decimal import Decimal number = Decimal("0.1") number = number + number + number print(number) # 0.3
В операциях с Decimal можно использовать целые числа:
number = Decimal("0.1") number = number + 2
Однако нельзя смешивать в операциях дробные числа float и Decimal:
number = Decimal("0.1") number = number + 0.1 # здесь возникнет ошибка
С помощью дополнительных знаков мы можем определить, сколько будет символов в дробной части числа:
number = Decimal("0. 10") number = 3 * number print(number) # 0.30
Строка «0.10» определяет два знака в дробной части, даже если последние символы будут представлять ноль. Соответственно «0.100» представляет три знака в дробной части.
Округление чисел
Объекты Decimal имеют метод quantize(), который позволяет округлять числа. В этот метод в качестве первого аргумента передается также объект Decimal, который указывает формат округления числа:
from decimal import Decimal number = Decimal("0.444") number = number.quantize(Decimal("1.00")) print(number) # 0.44 number = Decimal("0.555678") print(number.quantize(Decimal("1.00"))) # 0.56 number = Decimal("0.999") print(number.quantize(Decimal("1.00"))) # 1.00
Используемая строка «1.00» указывает, что округление будет идти до двух знаков в дробной части.
По умолчанию округление описывается константой ROUND_HALF_EVEN, при котором округление происходит до ближайшего четного числа, если округляемая часть равна 5. Например:
from decimal import Decimal, ROUND_HALF_EVEN number = Decimal("10.025") # 2 - ближайшее четное число print(number.quantize(Decimal("1.00"), ROUND_HALF_EVEN)) # 10.02 number = Decimal("10.035") # 4 - ближайшее четное число print(number.quantize(Decimal("1.00"), ROUND_HALF_EVEN)) # 10.04
Стратегия округления передается в качестве второго параметра в quantize.
Строка «1.00» означает, что округление будет идти до двух чисел в дробной части. Но в первом случае «10.025» — вторым знаком идет 2 — четное число, поэтому, несмотря на то, что следующее число 5, двойка не округляется до тройки.
Во втором случае «10.035» — вторым знаком идет 3 — нечетное число, ближайшим четным числом будет 4, поэтому 35 округляется до 40.
Данное поведение при округлении, возможно, не всем покажется желательным, и в этом случае его можно переопределить, использовав одну из следующих констант:
ROUND_HALF_UP: округляет число в сторону повышения, если после него идет число 5 или выше
ROUND_HALF_DOWN: округляет число в сторону повышения, если после него идет число больше 5
number = Decimal("10. 026") print(number.quantize(Decimal("1.00"), ROUND_HALF_DOWN)) # 10.03 number = Decimal("10.025") print(number.quantize(Decimal("1.00"), ROUND_HALF_DOWN)) # 10.02
ROUND_05UP: округляет 0 до единицы, если после него идет число 5 и выше
number = Decimal("10.005") print(number.quantize(Decimal("1.00"), ROUND_05UP)) # 10.01 number = Decimal("10.025") print(number.quantize(Decimal("1.00"), ROUND_05UP)) # 10.02
ROUND_CEILING: округляет число в большую сторону вне зависимости от того, какое число идет после него
number = Decimal("10.021") print(number.quantize(Decimal("1.00"), ROUND_CEILING)) # 10.03 number = Decimal("10.025") print(number.quantize(Decimal("1.00"), ROUND_CEILING)) # 10.03
ROUND_FLOOR: не округляет число вне зависимости от того, какое число идет после него
number = Decimal("10. 021") print(number.quantize(Decimal("1.00"), ROUND_FLOOR)) # 10.02 number = Decimal("10.025") print(number.quantize(Decimal("1.00"), ROUND_FLOOR)) # 10.02
НазадСодержаниеВперед
Округлить вниз, вверх и до ближайшего целого числа
В этой статье мы рассмотрим различные способы округления чисел в MATLAB. Подводя итог, можно округлить вниз, вверх, до ближайшего целого числа и до X знаков после запятой, используя функции Floor, ceil, fix и округления MATLAB. В частности, вы научитесь:
- Округлять до ближайшего целого числа, используя раунд функция
- Округление в меньшую сторону с использованием функций floor и fix
- Округлить с помощью функции ceil
- Округлить до X знаков после запятой
Округление до ближайшего целого числа: функция округления
- Округление до ближайшего целого числа для положительных и отрицательных значений: если вы хотите округлить число до ближайшего целого числа в MATLAB, вам нужно использовать функцию округления . . Короче говоря, это будет округлено до ближайшего целого числа для отрицательных и положительных значений.
- Пример функции округления: , если вы возьмете число 4,3, округление выведет 4, но если вы используете число 4,6, функция округления выдаст 5.
Более того, для значений, которые максимально близки к их вышеуказанному значению что касается их нижнего значения, оно будет округлено до самого дальнего целого числа от нуля:
Округление в меньшую сторону в MATLAB: Floor and Fix
- Округление вниз для положительных и отрицательных значений: сначала , если вы хотите округлить положительное и отрицательное число, вы можете использовать функцию MATLAB floor :
- Округление до ближайшего значения к 0: однако, если вы хотите округлить число до ближайшего целого значения к 0, вы можете использовать функцию fix MATLAB. десятичное;
Например, чтобы округлить до 3 знаков после запятой, вам просто нужно установить переменную decimal в 3, а для округления до 4 знаков после запятой запустить приведенный выше код для decimal=4. Кроме того, вот простой пример:
- Округление до любого ближайшего желаемого значения: вы также можете обобщить код до ближайшего желаемого значения. Другими словами, это не обязательно должно быть целое число. Например, предположим, что вы хотите округлить до ближайшей четверти:
ближайшее значение = 0,25; значение = округлое (значение/ближайшее значение)*ближайшее значение;
Наконец, это будет:
Основные выводы:
- Чтобы округлить в MATLAB, используйте:
- этаж для округления в меньшую сторону в сторону меньшего целого числа:
4,6 -> 4 -4,6 -> -5 - исправить для округления до 0:
4. 6 -> 4 -4.6 -> -4
- этаж для округления в меньшую сторону в сторону меньшего целого числа:
- Чтобы округлить в MATLAB, используйте ceil:
-4.3 -> -4 -4.6 -> -4
9десятичная дробь; - Чтобы округлить до ближайшего желаемого значения, используйте:
значение = округление (значение/ближайшее значение)*ближайшее значение;
Если вам понравилась эта статья, вот другие статьи, которые могут вам также понравиться:
- Синтаксис цикла for в MATLAB на простых примерах
- Функция fprintf MATLAB: Руководство для начинающих
- Учебное пособие по MATLAB Vector: создание, добавление, объединение и извлечение
Если вы хотите узнать больше об инструментах, которые мне помогли перестаньте тратить время на бессмысленную работу (например, создание отчетов Excel, документов Word или создание понятных и простых пользовательских интерфейсов) Я написал об этом небольшой справочник:
следующий → ← предыдущая Наступил век больших данных, и каждый день новые компании пытаются использовать свою информацию, чтобы сделать лучший выбор. Многие предприятия используют надежную среду обработки данных Python для анализа своих данных, о чем свидетельствует растущая известность Python в мире анализа данных. Каждый специалист по данным должен знать, как набор данных может быть искажен. Выводы, сделанные на основе необъективных данных, могут привести к дорогостоящим ошибкам. Смещение может входить в набор данных различными способами. Мы, безусловно, знакомы с такими фразами, как смещение отчетности, смещение выборки и смещение выборки, если мы формально изучали статистику. Еще одна важная погрешность, которую следует учитывать при работе с количественными данными, — погрешность округления. Встроенная функция round()Метод round() в Python принимает два числовых ввода, n и ndigits, и возвращает число, заданное n, округленное в меньшую сторону до ndigits. Поскольку параметр ndigits по умолчанию равен нулю, его отсутствие дает значение, округленное до ближайшего целого числа. Как вы увидите, функция round() не всегда работает должным образом. Допустим, мы хотим округлить число до 4,5. Число будет округлено до ближайшего целого числа, 5. Число 4,74, с другой стороны, будет уменьшено до одного десятичного числа, что даст 4,7. При работе с числами с плавающей запятой с большим количеством знаков после запятой очень важно быстро и легко округлять числа. Функция Python round() в конечном итоге делает вещи простыми и понятными. Синтаксис: округлить(число, количество цифр) Параметры:
Код # Округление целых чисел принт (круглый(17)) # Для плавающего типа принт (круглый(23,71)) # задаем также второй параметр # когда последняя цифра равна 5 печать (круглый (7. 465845, 5)) # когда последняя цифра больше 5 печать (раунд(7.47786, 4)) # когда последняя цифра меньше 5 печать (округление (7,473772, 5)) Вывод: 17 24 7.46584 7,4779 7.47377 В некоторых случаях функция round() не работает должным образом. Код печать (круглый(1,5)) принт (круглый(2)) печать (круглый (2,5)) Вывод: Алгоритм round() округляет 1,5 до 2 и 2,5 до 2. Это не ошибка; так работает алгоритм round(). Усечение десятичных дробейУсечение — один из самых простых способов округления числа путем уменьшения его до определенного числа десятичных знаков. В этом алгоритме каждая цифра сразу после определенного места заменяется на 0. Функция truncate() работает как с положительными, так и с отрицательными значениями. Мы можем использовать следующий метод для создания функции усечения:
Код # сначала определяем функцию усечения # установив десятичные разряды по умолчанию равными 0, все десятичные разряды будут обрезаны и будет возвращена только целая часть def усечение (п, десятичное_место = 0): v = 10 ** десятичное_место вернуть int(n * v)/v печать (усечение (56,9)) печать (усечение (-7,396, 1)) печать (усечение (8.525, 2)) # если мы передаем отрицательное число во втором аргументе, оно усекает n влево печать (усечение (535,643, -1)) печать (усечение (-56236,753, -4)) Вывод: 56,0 -7,3 8,52 530,0 -50000,0 Метод trunc(), часто известный как функция truncate, представляет собой функцию Python Math, которая удаляет десятичные значения из выражения и возвращает целочисленный результат. Поскольку эта функция является частью математического пакета Python, мы должны импортировать математику, чтобы использовать ее. Синтаксис math.trunc(число) У этой операции есть только один параметр. В этом случае число может быть как положительным, так и отрицательным. Код импортировать математику п = 45,3467 # использование встроенной функции trunc математического модуля для усечения десятичных знаков числа n print(«Усеченное число: «, math.trunc(n)) Вывод: Усеченное число: 45 ОкруглениеДругим таким подходом является «округление», при котором значение округляется до определенного числа цифр. Например:
В математике слово потолок часто используется для описания ближайшего целого числа, большего или равного определенному числу. В этом уроке мы будем использовать две функции для округления: функцию ceil() и операцию math(). Между двумя последовательными целыми числами существует нецелое значение. Рассмотрим значение 6,2, которое будет находиться где-то между 6 и 7. Потолок — это верхняя конечная точка интервала, а пол — его нижняя конечная точка. В итоге 6.2 потолок 7, а 6.2 этаж 6. Метод Python math.ceil() используется для применения метода потолка. Обычно он возвращает ближайшее целое число, которое больше заданного числа или равно ему. Код импортировать математику c1 = math.ceil(6.2) print(«Потолок для 6.2: «, c1) c2 = математика.ceil(6) print(«Потолок для 6: «, c2) c3 = математика. ceil(-0,8) print(«Потолок для -0.8: «, c3) Вывод: Потолочный для 6.2:7 Потолок на 6:6 Потолок для -0,8:0 Давайте сосредоточимся на коде, который использует функцию round_up() для выполнения подхода «округления в большую сторону»: Мы можем использовать следующий метод для создания функции округления:
Код # импортируем нужную библиотеку импортировать математику # определяем функцию для округления десятичных дробей в большую сторону def round_up (число, десятичное_место = 0): минусы = 10 ** десятичное_место вернуть math. ceil(число * минусы) / минусы # применение к положительным числам печать (округление (5.1)) печать (округление (5.73, 1)) печать (округление (5.246, 2)) # применение к отрицательным числам печать (округление (46,25, -1)) печать (округление (754,357, -2)) Вывод: 6,0 5,8 5,25 50,0 800,0 Округление в большую сторону обычно сдвигает значение вправо вдоль числовой строки, тогда как округление в меньшую сторону обычно перемещает значение влево. Округление в меньшую сторонуУ нас есть подход, называемый округлением в меньшую сторону, который аналогичен округлению в большую сторону.
В Python мы можем округлять в меньшую сторону, используя тот же механизм, что и для усечения или округления в большую сторону. Мы должны сначала переместить десятичную точку, прежде чем округлять целое число. Наконец, верните десятичную точку. После перемещения десятичной точки можно использовать функцию math.ceil() для округления максимального значения числа. Чтобы «округлить в меньшую сторону», мы должны сначала округлить пол полученного числа после того, как десятичная точка была перемещена. math.floor() предоставляет наименьшее целое число, меньшее или равное определенному числу. Код импортировать математику c1 = математический пол (6.2) print(«Минимальное значение для 6.2: «, c1) c2 = математический пол (6) print(«Минимальное значение для 6: «, c2) c3 = математический пол (-0,8) print(«Минимальное значение для -0.8: «, c3) Вывод: Минимальное значение для 6.2: 6 Пол значение для 6: 6 Минимальное значение для -0,8: -1 Мы можем использовать следующий метод для реализации функции округления в меньшую сторону:
Код # импортируем нужную библиотеку импортировать математику # определение функции для округления десятичных дробей в меньшую сторону def round_down (число, десятичное_место = 0): минусы = 10 ** десятичное_место вернуть math.floor(число * минусы) / минусы # применение функции к положительным и отрицательным значениям печать (округление вниз (4.6)) печать (округление вниз (3,74, 1)) печать (округление_вниз (-5,7)) Вывод: 4.0 3,7 -6,0 Смещение округленияСуществует три метода округления: truncate(), round_down() и round_up(). Всякий раз, когда речь идет о поддержании приемлемого уровня точности для определенного числа, все три из этих стратегий довольно просты. Существует одно ключевое различие между truncate(), round_down() и round_up(), которое показывает ключевой компонент округления: симметричность относительно нуля. Имейте в виду, что round_up() асимметричен около нуля. В математике функция f(n) симметрична относительно нуля, если f(n) + f(-n) = 0 для любого значения n. Например, округление в большую сторону (5,5) возвращает 6, тогда как округление в большую сторону (-5,5) возвращает -5. Ни функция round_down(), ни функция round_up() не являются симметричными относительно 0,9.0013 Метод truncate(), наоборот, симметричен около нуля. Это связано с тем, что truncate() удаляет оставшиеся цифры после перемещения десятичной позиции вправо. Это эквивалентно перемещению значения вниз, когда исходное число положительное. Отрицательные числа округляются в большую сторону. В результате truncate(5.5) дает 5, а truncate(-5.5) дает -5. Понятие смещения округления вводится принципом симметрии, который показывает, как округление влияет на числовые значения в наборе данных. Поскольку число постоянно округляется в сторону положительной бесконечности, метод «округления в большую сторону» демонстрирует смещение в сторону положительной бесконечности. Точно так же метод «округления в меньшую сторону» имеет смещение в сторону отрицательной бесконечности. Для положительных чисел метод «усечения» имеет смещение в сторону отрицательной бесконечности, в то время как для отрицательных значений он имеет смещение в сторону положительной бесконечности. В целом считается, что алгоритмы округления с такой тенденцией имеют смещение в сторону нуля. Давайте посмотрим, как это работает на практике. Возьмите список плавающих чисел ниже: numeric_values = [3,52, -5,36, 0,96, -2,63, 8,24, -9,43, 6,35, 5,86] Давайте воспользуемся функцией Statistics.mean() для вычисления среднего значения numeric_values. Код статистика импорта среднее значение = статистика. среднее (числовые_значения) print («исходное значение: «, среднее значение) Вывод: исходное среднее значение: 0,93875 Теперь, используя понимание списка, выполните truncate(), round_down() и round_up(), чтобы округлить каждое число числовых значений списка до одного десятичного знака и вычислить пересмотренное среднее значение: Код roundingUp_data = [round_up(x, 1) для x в numeric_values] печать (округление_данных) print («Округленное среднее значение: «, Statistics. mean(roundingUp_data)) roundingDown_data = [round_down(x, 1) для x в numeric_values] print («Округленное значение dwn: «, Statistics.mean(roundingDown_data)) truncate_data = [усечение (x, 1) для x в numeric_values] print(«Усеченное среднее: «,statistics.mean(truncate_data)) Вывод: [3,6, -5,3, 1,0, -2,6, 8,3, -9,4, 6,4, 5,9] Округленное среднее значение: 0,9875000000000002 Округленное среднее dwn: 0,8874999999999998 Усеченное среднее: 0,9249999999999998 Пересмотренное среднее составляет 0,98, 0,88 и 0,924 при округлении значений в numeric_values. Округление в меньшую сторону снижает среднее значение примерно до 0,887. Среднее значение усеченных цифр составляет около 0,924, что является ближайшим к исходному среднему значению. Это не означает, что мы должны усекать каждый раз, когда округляем различные значения, сохраняя среднее значение как можно ближе. В результате отношение количества положительных и отрицательных чисел близко к 1. На множестве всех положительных чисел метод truncate() будет действовать аналогично round_up(), а на множестве всех отрицательных чисел он будет вести себя аналогично round_down(). Этот экземпляр демонстрирует влияние смещения округления на числа, полученные из округленных данных. Делая выводы из округленных данных, мы должны учитывать эти последствия. При округлении мы обычно хотим округлить до ближайшего числа с определенной точностью, а не просто округлить его в большую или меньшую сторону. Если бы нас попросили округлить числа 2,63 и 2,68 до ближайшего десятичного знака, мы бы, скорее всего, ответили 2,6 и 2,7. Методы truncate(), round_down() и round_up() не выполняют ничего похожего. Пункты, чтобы помнитьКруглые данные после завершения сбораЕсли мы работаем с огромным объемом информации, хранение может стать проблемой. Например, в промышленной печи монитор температуры будет использоваться для записи температуры каждые двадцать секунд с точностью до восьми знаков после запятой. |