Matlab sym()
By
Priya Pedamkar

Introduction to Matlab sym()
When any symbolic variable is created being associated with an assumption, the symbolic variable and its assumption get stored separately by MATLAB. The sym() in MATLAB is used to create numbered symbolic variables or symbolic variables in different MATLAB functions. Symbolic numbers generated from the sym() function are the exact representations of the input numbers.
Sym() can also be used to refer to an existing symbolic variable and current assumption associated with the variable. If the expected symbolic variable is not used in any MATLAB function previously, then sym() creates the variable without associating any assumptions.
Hadoop, Data Science, Statistics & others
Syntax of Matlab sym()
Syntax of matlab sym() is given: below:
When the syntax MAT = sym(‘mat’,[n1 … nM]) is used, only the symbolic array MAT gets assigned to the MATLAB workspace by the sim() function. In order to assign also the automatically generated elements of MAT, the syms function needs to be used instead of sym().
- creates the row vector: mat = [mat1 mat2 mat3] and
- the symbolic variables in the MATLAB workspace: a1, a2, and a3.
Note:
In the case of multidimensional arrays, sym() function generates automatically generated elements, having the prefix followed by the index for the element being added with ‘ _’ as a delimiter.
Example: a1_3_2.
Adding the command ‘clear x’ actually does not clear the symbolic object with respect to assumptions associated with the variable, such as real, positive, or any assumptions, etc. Hence, to remove assumptions, one of the below options is recommended:
- assume(x,’clear’): all assumptions that affect x, are being removed.
- clear all: clears all MATLAB workspace objects resetting the symbolic engine.
- assume and assumeAlso: Add further flexibility for applying assumptions on the variable.
Expressions such aspi = sym(pi),theta = sym(‘1/10’) etc. create symbolic numbers which enable the program to avoid floating-point approximations. The variable is created as a workspace variable to hold the symbolic value given within the sym() function. It temporarily replaces the name for built-in numeric function having the same name.
Как преобразовать символ в число в Matlab
У меня возникли проблемы с преобразованием символьной переменной в число в Matlab. Каждая ячейка в переменной char содержит одно из двух возможных слов. Мне нужно преобразовать word_one (например) для представления «1» и word_two для представления «2».
Есть ли команда, которая позволит мне это сделать?
Пока я пробовал:
Однако я получаю:
Когда я пытаюсь включить только первую букву (например, «W»), она меняет только первую букву в полном слове (например, 1ord_one).
Есть простой способ сделать это?
Спасибо за вашу помощь — очень ценю любые советы!
4 ответа
Похоже, здесь есть пара потенциальных проблем.
Используйте strcmp() (сравнение строк) вместо текущего оператора эквивалентности. При сравнении строк с помощью == сравнивается элемент за элементом и возвращается логический вектор (где здесь требуется одно логическое значение). При сравнении строк strcmp() вместо этого сравниваются все строки и возвращается одно значение.
Вам также, вероятно, не обязательно преобразовывать массив ячеек. Вы можете сохранить структуру массива ячеек и адресовать каждую ячейку индивидуально.
Попробуйте что-нибудь вроде следующего фрагмента.
Вы можете использовать короткие и простые unique —
Объяснение: unique здесь работает, потому что он создает отсортированный массив ascending order с числовыми массивами. Теперь при использовании с массивами ячеек этот ascending order преобразуется в сортировку alphabetical order . Таким образом, unique(input_cellarr) всегда будет иметь <'Word_one' , 'Word_two'>, потому что one по алфавиту выше, чем two . Следовательно, индексы out всегда будут иметь первый уникальный идентификатор как 1 для ‘Word_one’ и второй идентификатор как 2 для ‘Word_two’ .
Есть несколько способов решить эту проблему. Вот мой подход.
Если вам нужна большая гибкость, вы можете указать значение, соответствующее каждому слову:
Символьные вычисления в Matlab.
Для проведения символьных вычислений необходим тулбокс SYMBOLIC пакета MATLAB.
Если он установлен, то имеется возможность выполнять аналитические преобразования формул с буквенными коэффициентами, производить численные расчеты без округлений, строить графики функций, заданных в неявной форме.
Символьные переменные и функции являются объектами класса sym object, в отличие от числовых переменных, которые содержатся в массивах double array.
Функция sym – формирует символьную переменную или объект
Функция sym позволяет преобразовывать значения числовых переменных в символические, например:
Соответствующий символьный массив:
B=[13/10, -21/10, 49/10]
При переходе от числовых к символическим выражениям используется запись чисел в виде рациональной дроби. В виде рациональной дроби представляются и промежуточные, и окончательные выражения. Это означает, что при использовании рациональных дробей при выполнении символических вычислений всегда получается точный результат, не содержащий погрешность округления.
На символьных вычислениях основываются большинство функция 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