Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Символьные вычисления в Matlab.



Для проведения символьных вычислений необходим тулбокс SYMBOLIC пакета MATLAB.

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

Символьные переменные и функции являются объектами класса sym object, в отличие от числовых переменных, которые содержатся в массивах double array.

Функция sym – формирует символьную переменную или объект

Синтаксис

S=sym(A)

S=sym (A, flag)

x=sym(‘x’)

x=sym (‘x’, real)

x=sym (‘x’, unreal)

Функция sym позволяет преобразовывать значения числовых переменных в символические, например:

> > A=[1.3 -2.1 4.9; 6.9 3.7 8.5];

Соответствующий символьный массив:

> > B=sym(A)

B=[13/10, -21/10, 49/10]

[69/10, 37/10, 17/2]

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

На символьных вычислениях основываются большинство функция MATLAB, например вычисление неопределенных интегралов в MATLAB осуществляется при помощи функции: int(fun, var), где fun – символьное выражение, представляющее собой подынтегральную функцию, а var – переменная интегрирования

 

 

9.Графическое представление функций одной и нескольких переменных.
Для визуализации вычислений в MATLAB широко используется машинная графика. Графика в MATLAB имеется двух типов: 1)обычная двумерная и трехмерная растровая графика; 2) специальная дескрипторная (handle) графика.
Графики в MATLAB строятся в отдельных масштабируемых и перемещаемых окнах. Возьмем вначале простейший пример – построение графика синусоиды. Следует помнить, что MATLAB (как и другие СКМ) строит графики функций по ряду точек, соединяя их отрезками прямых, то есть осуществляя линейную интерполяцию функции в интервале между смежными точками. Зададим интервал изменения аргумента x от 0 до 10 с шагом 0, 1. Для построения графика достаточно вначале задать вектор x=0: 0.1: 15, а затем использовать команду построения графиков plot(sin(x)). Итак, для построения графика синусоиды надо исполнить следующие команды: x=0: 0.1: 15; y=sin(x); plot(x, y) При этом будут построены окно графика и сам

 

 

график синусоидальной функции.
plot строит не истинный график функции sin(x), а лишь заданное числом элементов вектора x число точек. Эти точки затем просто соединяются отрезками прямых того или иного стиля и цвета, то есть осуществляется кусочнолинейная интерполяция данных графика. При 100 точках полученная кривая глазом воспринимается как вполне плавная, но при 10–20 точках она будет выглядеть состоящей из отрезков прямых.
Теперь попытаемся построить графики сразу трех функций: sin(x), cos(x) и sin(x)/x. Прежде всего отметим, что эти функции могут быть обозначены переменными, не имеющими явного указания аргумента в виде y(x): > > y1=sin(x); y2=cos(x); y3=sin(x)/x;
Такая возможность обусловлена тем, что эти переменные являются векторами – как и переменная x. Теперь можно использовать одну из ряда форм команды plot: plot(a1, f1, a2, f2, a3, f3,...), где a1, a2, a3, … – векторы аргументов функций (в нашем случае все они – x), а f1, f2, f3, … – векторы значений функций, графики которых строятся в одном окне. В нашем случае для построения графиков указанных функций мы должны записать следующее: > > plot(x, y1, x, y2, x, y3)
Можно ожидать, что MATLAB в этом случае построит, как обычно, точки графиков этих функций и соединит их отрезками линий. Но, увы, если мы выполним эти команды, то никакого графика не получим вообще. Причина: если x представляет собой массив (вектор), то нельзя использовать оператор матричного деления /. Чтобы все же получить график, надо вычислять отношение sin(x) к x с помощью оператора поэлементного деления массивов./. MATLAB построил графики всех трех функций, в окне командного режима появилось предупреждение о делении на 0 – в момент, когда x=0 – «Warning: Divide by zero.». Таким образом, plot «не знает» о том, что неопределенность sin(x)/x=0/0 устранимая и дает 1.

MATLAB имеет средства для построения графиков и таких функций, как sin(x)/x, которые имеют устранимые неопределенности. Не обсуждая эти средства подробно, просто покажем, как это делается, с помощью другой графической команды – fplot:
fplot('f(x)', [xmin xmax])
Она позволяет строить график функции f(x), заданной в символьном виде, в интервале изменения аргумента x от xmin до xmax без фиксированного шага изменения x.

10.Управление элементами графических окон и изображений
Работая в интерактивном режиме, мы имели дело с графическими окнами ( команда figure ), в которых сама система MATLAB создавала графический объект Axes, на поверхности которого осуществлялась прорисовка осей системы координат и изображение графиков функций ( в том числе трёхмерных ). Для подготовки информации, необходимой для построения графиков функций, мы вводили команды в командном окне MATLABа, получая необходимую числовую информацию и накапливая её в переменных рабочего пространства. Если требуются громоздкие и сложные предварительные вычисления, то такую работу лучше всего оформить в виде отдельных M-функций. Вызывая эти функции из командного окна MATLABа, получаем необходимую информацию и запоминаем её в переменных-массивах системы MATLAB. Затем по команде figure создаём новое графическое окно, после чего командами plot, plot3, mesh, surf или surfl воспроизводим графики. Такая работа требует больших знаний команд и функций системы MATLAB, знаний основ программирования в рамках этой системы. Поэтому повторить все эти действия стороннему пользователю будет затруднительно. Даже самому разработчику для выполнения многочисленных повторяющихся заданий было-бы удобнее иметь некоторый объёдиняющий механизм, позволяющий удобным и наглядным способом выполнять все виды разнородных работ. Для этих целей в системе MATLAB применяются графические элементы управления, располагающиеся на поверхности графических окон и позволяющие вводить и читать числовую и текстовую информацию, нажатием кнопок инициировать выполнение нескольких M-функций сразу с последующим автоматическим показом результатов вычислений на поверхности графического объекта Axes того же графического окна. Из командного окна MATLABа потребуется всего лишь один раз вызвать M-функцию, создающую такое графическое окно.Мы будем рассматривать следующие графические объекты управления: объект Axes, предназначенном для построения графиков функций, а также несколько объектов общего типа uicontrol. К последним относятся командные кнопки, текстовые поля с возможностью редактирования текста и без такой возможности, переключатели и списки. Помимо графических элементов управления в графических окнах можно создавать также дополнительные команды меню ( помимо стандартных команд, присутствующих во всех без исключения графических окнах ), но мы здесь этой возможностью пользоваться не будем. Все перечисленные выше графические объекты выполнены в системе MATLAB по объектной технологии и характеризуются присущим им набором свойств. Меняя последние, мы модифицируем их внешний вид и поведение. Чтобы изменить свойства графических объектов, нужно получить доступ кним по их описателю ( число, уникально идентифицирующее конкретный объект ). Описатель графического объекта возвращают функции, создающие эти объекты. Запомнив эти описатели в глобальных переменных, мы всегда впоследствии будем иметь возможность доступа к ним. Другим, более простым способом получения описателей, является использование специальных функций MATLABа, таких, например, как функция gcf ( Get Current Figure - получить описатель текущего графического окна ). Например, команда figure создаёт графическое окно стандартного ( заданного по умолчанию ) цвета. Если нам требуется изменить цвет на красный, то это легко выполнить, получив описатель окна функцией gcf
Все графические объекты ( они сами являются окнами в смысле операционной системы Windows ) на поверхности графического окна создаются по иерархичнское схеме " родитель - потомство". Родительским окном для элементов управления служит само графическое окно MATLABа. С учётом введённого понятия становится удобным применение для поиска описателей графических объектов функции findobj:
hArray = findobj( hParent, 'имя_свойства', значение_свойства ) Эта функция отыскивает все объекты, являющиеся потомками объекта с описателем hParent и имеющие для свойства 'имя_свойства' значение, указанное в параметре функции значение_свойства. Она возвращает их описатели в массиве hArray.
А теперь создадим для примера командную кнопку на поверхности графического окна:
hF1 = figure;
uicontrol( hF1, 'Style', 'pushbutton', 'String', 'MyButton1', …
'Position', [ 10 10 70 30 ] );
Любой элемент управления создаётся функцией uicontrol ( имя функции, создающей объект, всегда совпадает с именем этого объекта; такие функции в программировании принято называть конструкторами ), у которой первым параметром идёт описатель родительского окна, а затем по очереди перечисляются имена и значения свойств, которым мы явно придаём собственные значения ( а остальные, менее важные для нас свойства получают значения по умолчанию ). В итоге

 

получается следующее графическое окно

 

 


в котором явственно видна кнопка. В функции uicontrol, создающей элемент управления, самым важным параметром после описателя родительского окна является свойство 'Style', так как оно задаёт тип управляющего элемента. Задав для этого свойства значение 'pushbutton', мы создали именно кнопку ( а не редактируемое поле, или что-нибудь ещё ). Имена двух других свойств говорят сами за себя: String задаёт надпись на поверхности кнопки ( в данном случае это MyButton1 ), а Position имеет значением вектор-строку из четырёх чисел и задаёт положение управляющего элемента относительно левого нижнего угла графического окна. < /P

 


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 1649; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.016 с.)
Главная | Случайная страница | Обратная связь