Progress-servis55.ru

Новости из мира ПК
75 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Функция disp в matlab

Консольный ввод – вывод.

Дата добавления: 2015-06-12 ; просмотров: 2755 ; Нарушение авторских прав

Лабораторная работа №5

Ввод – вывод в системе Matlab.

Консольный ввод – вывод.

Для обеспечения взаимодействия с пользователем в процессе выполнения М-файлов в Matlab используются следующие команды (операторы).

disp – вывод значений указанной переменой или указанного текста в командное окно.

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

Чтобы вывести значения нескольких переменных, например, для печати таблиц, нужно создать единый объект, который содержал бы все эти значения. Это можно сделать, объединением соответствующих переменных в единый вектор, пользуясь операцией создания вектора-строки:

disp ( [x1, x2…xN]).

Аналогично можно объединить несколько текстовых переменных:

disp ([‘столбец 1’, ‘столбец 2’… ‘столбец N’])

Сложнее объединить в одну строку текст и значения переменных, это часто бывает необходимым. Трудности возникают потому, что нельзя объединять текстовые и числовые переменные. Задача решается с помощью функции num2str, которая осуществляет такое преобразование.

ОператорS=num2str(x) преобразует числовое значение переменной в текстовое представление.

Пусть х – числовая переменная. Тогда вывод ее значения с поясняющим текстом обеспечивается вызовом нижеследующим вызовом функции disp:

disp ([‘текст пояснения’, num2str (x)])

Например, если х=0,5, то в результате вызова

disp ([‘значение х: ’, num2str (x)])

значение х: 0,5.

Другой способ достижения этого же результата заключается в использование функции sprintf.

Обращение к ней имеет вид:

S=sprintf (‘текст 1 % frm текст 2’, х)

В результате создается текстовая строка S, состоящая из текста, указанного в тексте1, и значения переменной х в формате frm. Текст из фрагмента ‘текст 2’ размещается после значения переменной х. Эту функцию можно использовать в вызове disp:

>>disp (sprintf (‘текст 1 % frm’, х)).

В нижеследующей таблице приведены спецификаторы формата, используемые в функции sprintf:

СпецификаторОписание
Один символ
%dДесятичное число со знаком
%eПредставление с плавающей точкой, 3.14е+00
%EПредставление с плавающей точкой, 3.14Е+00
%fПредставление с фиксированной точкой
%gБолее компактное, чем в %е или %f представление с подавлением незначащих нулей.
%GТо же, что %g, но Е – на верхнем регистре
%oВосьмеричное представление (без знака)
%sСимвольная строка
%uДесятичное без знака
%xШестнадцатеричное представление, (буква a-f)
%XШестнадцатеричное представление, (буква A-F)

>>Y = sprint (‘Параметр_1 = % g’, X)

Y = параметр_1 = 1е-15

Удобным инструментом выбора некоторой из альтернатив является функция menu, которая создает окно меню пользователя. Функция имеет следующий формат:

К = menu(‘’, ‘Альтернатива_1’, ‘Альтернатива_2’… ‘Альтернатива_N’)

Пример: в результате вызова функции menuс параметрами, как это показано ниже,

К = menu (‘What?’, ‘Go’, ‘Exit’);

на экране появится следующие меню:

Выполнение программы приостанавливается, программа ожидает выбора одной из кнопок с альтернативами. После нажатия какой – либо кнопки выходному параметру присваивается значение номера выбранной альтернативы. Альтернативы нумеруются числами от 1 до N. В зависимости от значения K можно выбрать нужное продолжение программы.

Для ввода данных с клавиатуры удобно использовать функцию input, обращение к которой имеет следующий вид:

x = input (‘текст-подсказка’)

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

Пример script – файла, использующего рассмотренные выше вызовы:

x = input (‘Enter x:’);

В результате выполнения этого script – файла в командном окне будет следующее:

При выполнении данного файла в меню была два раза выбрана кнопка «Go», что привело к тому, функция sin была вычислена два раза, и два раза напечатан результат вычисления. В третий раз была выбрана кнопка «Exit», и script – файл завершил выполнение.

|следующая лекция ==>
Создание файл – функций (процедур).|Файловый ввод – вывод.

Не нашли то, что искали? Google вам в помощь!

Функция disp в matlab

7. Массивы символов.

До сих пор мы мели дело с единственным типом данных — массивами вещественных чисел. Это действительно основной тип данных системы MATLAB, предназначенный для вычислений. В то же время, при рассмотрении графики MATLABа мы столкнулись с типом данных » короткое целое «, обозначаемое с помощью ключевого слова uint8. Этот тип данных специально предназначен для компактного хранения больших массивов целых чисел, что очень характерно для графических задач. Однако производить вычисления с типом данных uint8 нельзя ( по крайней мере в версии системы MATLAB 5.2 ). Если всё же нужно произвести вычисления, то сначала тип данных uint8 приводят явно к типу double, производят вычисления и возвращаются к типу uint8 для дальнейшего хранения.

Во всех языках программирования, и MATLAB здесь не исключение, большую роль играет обработка текстовых данных. Для этой цели в системе MATLAB предусмотрен тип данных char ( то есть «символ» ). Текстовые данные, в том числе и одиночный символ, должны заключаться с обеих сторон апострофами:

c1 = ‘a’; c2=’abcd’; c3 = ‘Hello, World!’;

В результате таких присваиваний создаются переменные ( естественно, это массивы — в системе MATLAB всё является массивами ) типа char:

Из рисунка видно, что текстовые данные в системе MATLAB являются вектор-строками типа char ( одна строка и несколько столбцов по числу содержащихся символов ). Например, переменная c3 является символьным массивом ( часто говорят — строкой символов ) из 13 символов, занимающим 26 байт. Таким образом, под каждый символ отводится 2 байта. Каждый символ кодируется целым числом в соответствии со стандартной системой кодировки ASCII. Легко практически выяснить, какой код соответствует тому или иному символу. Следующий фрагмент

code = double( c1( 1 ) )

code=
9 7

показывает, что символу ‘a’ соответствует десятичное число 97.

Если после того, как переменная c3 получила текстовое значение ‘Hello, World!’, написать

c3 = 3.14;

то переменная c3 станет уже переменной типа double. Так как в сложных и громоздких M-функциях могут возникнуть ситуации, когда заранее неизвестен тип переменной в какой-либо момент времени исполнения функции, то с целью определения типа переменной следует применить функцию isa. Например, следующий вызов этой функции

isa( s3, ‘char’ )

вернёт истину ( единицу ), если переменная s3 является в этот момент строковой (символьной), и вернёт ложь ( нуль ) в противоположном случае.

По отношению к массивам символов справедливы также все операции, которые мы ранее рассмотрели для случая массивов типа double. Например, вместо группового присваивания c2 = ‘abcd’ можно организовать поэлементное присваивание с помощью операции индексации:

c2( 1 )=’a’; c2( 2 )=’b’; c2( 3 )=’c’; c2( 4 )=’d’;

или осуществить операцию конкатенации

c2 = [ ‘abc’ , ‘d’ ]; c2 = [ c2 , ‘ QWERTY’ ];

В тесной связи с рассмотренной операцией конкатенации текстовых строк находится стандартная функция int2str, которая преобразует целые числовые значения в символы, отображающие эти целые числа. Например, вызов функции

res = int2str( 2 )

приведёт к появлению текстовой переменной res со значением ‘2’. В итоге, мы имеем возможность сформировать в цикле набор нескольких имён функций, отличающихся только последним символов — их номером:

name = ‘function’; arg = 10.7;

for k = 1 : 10

Name = [ name ,int2str( k ) ];

res( k ) = feval( Name, arg );

end

и даже вычислить значения всех таких функций при значении аргумента arg. Это осуществляется с помощью стандартной функции системы MATLAB feval, которая принимает в качестве своего первого аргумента текстовую строку с именем M-функции, подлежащей вычислению. Второй и последующие аргументы этой функции служат для передачи в качестве аргументов вычисляемым функциям.

В вышеприведённом фрагменте результаты вычислений десяти функций запоминаются в массиве res.

Если требуется в одной переменной запомнить несколько имён функций ( это возможно в случае их одинаковой длины ) для последующего их исполнения с помощью feval, то можно сформировать текстовый массив размерности 2;

Names( 1, : ) = ‘function1’;

Names( 2, : ) = ‘function2’;

Первая строка этого массива содержит имя первой функции, вторая строка — второй функции. Размер этого массива типа char есть 2 x 9.

Часто текстовые строки используются для вывода в командное окно системы MATLAB для информирования пользователя о ходе выполнения M-функции. Это осуществляется с помощью функции disp, принимающей в качестве аргумента текстовую строку:

x = 7;

message = [ ‘ Variable x = ‘, int2str( x ) ];

disp( message );

Кроме того, в командное окно надо выводить сообщения, предупреждающие пользователя о необходимости ввода с клавиатуры значения переменной:

VarX = input( ‘ VarX = ? ‘ );

Функция input выводит в командное окно текст, являющийся её аргументом, после чего ожидает ввода значения с клавиатуры и нажатия клавиши Enter. Таким образом можно ввести с клавиатуры числовое значение и запомнить её значение в переменной VarX. Внутри строки-аргумента функции input может присутствовать специальный набор из двух символов /n, приводящий к показу сообщения на двух строках (часть сообщения после /n показывается на новой строке ).

Для ввода текстового значения, а не числового, требуется вызывать функцию input с двумя аргументами:

VarStr = input( ‘ StringVar = ‘, ‘s’ );

В результате выполнения этой функции на экране появляется надпись

StringVar =

после чего можно набирать необходимый текст с клавиатуры, заканчивая ввод нажатием клавиши Enter. Если нажать Enter, не введя с клавиатуры никакого текста, то переменная VarStr примет значение пустого массива. Желательно перед использованием этой переменной проверять её на этот случай функцией isempty( VarStr ), возвращающей единицу, когда аргумент является пустым массивом.

Система MATLAB располагает также полным набором функций для «классической» обработки текстов. К таким функциям относятся функции findstr, blanks, deblank, num2str, str2num, strcat, strcmp, strcmpi, strrep, strtok.

Функции num2str, str2num производят преобразования из строк в действительные числа и обратно, функции blanks, deblank, strrep работают с пробелами и повторением символов, функция strcat осуществляет конкатенацию, функции strcmp и strcmpi сравнивают значения двух строк, функции findstr и strtok находят или выделяют в строках подстроки.

Например, в следующем фрагменте находится массив позиций вхождения слова Hello в текст, содержащийся в переменной vStr:

innerStr = ‘Hello’;

vStr=’Hello is the word. Hello is opposite to bye.’;

positions = findstr( vStr, innerStr );

В результате переменная ( массив ) positions принимает следующее значение:

positions =
1 20

В итоге функция findstr обнаружила два вхождения переменной innerStr в текст Vstr. Первое вхождение имеет место начиная с самого первого символа, второе вхождение имеет место на 20-ом символе ( включая пробелы, разумеется ).

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

Основные математические функции MatLab

MatLab содержит в себе все распространенные математические функции, которые доступны по их имени при реализации алгоритмов. Например, функция sqrt() позволяет вычислять квадрат числа и может быть использована в программе следующим образом:

x = 2;
y = 4;
d = sqrt(x^2+y^2); %вычисление евклидового расстояния

Аналогичным образом вызываются и все другие математические функции, представленные в табл. 1.2.

Таблица 1.2. Основные математические функции MatLab

Полезен материал? Поделись:
sqrt(x)вычисление квадратного корня
exp(x)возведение в степень числа e
pow2(x)возведение в степень числа 2
log(x)вычисление натурального логарифма
log10(x)вычисление десятичного логарифма
log2(x)вычисление логарифма по основанию 2
sin(x)синус угла x, заданного в радианах
cos(x)косинус угла x, заданного в радианах
tan(x)тангенс угла x, заданного в радианах
cot(x)котангенс угла x, заданного в радианах
asin(x)арксинус
acos(x)арккосинус
atan(x)арктангенс
piчисло пи
round(x)округление до ближайшего целого
fix(x)усечение дробной части числа
floor(x)округление до меньшего целого
ceil(x)округление до большего целого
mod(x)остаток от деления с учётом знака
sign(x)знак числа
factor(x)разложение числа на простые множители
isprime(x)истинно, если число простое
randгенерация псевдослучайного числа с равномерным законом распределения
randnгенерация псевдослучайного числа с нормальным законом распределения
abs(x)вычисление модуля числа

Почти все элементарные функции допускают вычисления и с комплексными аргументами. Например:

res = sin(2+3i)*atan(4i)/(1 — 6i); % res = -1.8009 — 1.9190i

Ниже показан пример задания вектора с именем a, и содержащий значения 1, 2, 3, 4:

a = [1 2 3 4]; % вектор-строка

Для доступа к тому или иному элементу вектора используется следующая конструкция языка:

disp( a(1) ); % отображение значения 1-го элемента вектора
disp( a(2) ); % отображение значения 2-го элемента вектора
disp( a(3) ); % отображение значения 3-го элемента вектора
disp( a(4) ); % отображение значения 4-го элемента вектора

т.е. нужно указать имя вектора и в круглых скобках написать номер индекса элемента, с которым предполагается работать. Например, для изменения значения 2-го элемента массива на 10 достаточно записать

a(2) = 10; % изменение значения 2-го элемента на 10

Часто возникает необходимость определения общего числа элементов в векторе, т.е. определения его размера. Это можно сделать, воспользовавшись функцией length() следующим образом:

N = length(a); % (N=4) число элементов массива а

Если требуется задать вектор-столбец, то это можно сделать так

a = [1; 2; 3; 4]; % вектор-столбец

b = [1 2 3 4]’; % вектор-столбец

при этом доступ к элементам векторов осуществляется также как и для векторов-строк.

Следует отметить, что векторы можно составлять не только из отдельных чисел или переменных, но и из векторов. Например, следующий фрагмент программы показывает, как можно создавать один вектор на основе другого:

a = [1 2 3 4]; % начальный вектор a = [1 2 3 4]
b = [a 5 6]; % второй вектор b = [1 2 3 4 5 6]

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

a = [a 5]; % увеличение вектора а на один элемент

Недостатком описанного способа задания (инициализации) векторов является сложность определения векторов больших размеров, состоящих, например, из 100 или 1000 элементов. Чтобы решить данную задачу, в MatLab существуют функции инициализации векторов нулями, единицами или случайными значениями:

a1 = zeros(1, 100); % вектор-строка, 100 элементов с
% нулевыми значениями
a2 = zeros(100, 1); % вектор-столбец, 100 элементов с
% нулевыми значениями
a3 = ones(1, 1000); % вектор-строка, 1000 элементов с
% единичными значениями
a4 = ones(1000, 1); % вектор-столбец, 1000 элементов с
% единичными значениями
a5 = rand(1000, 1); % вектор-столбец, 1000 элементов со
% случайными значениями

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

E = [1 0 0; 0 1 0; 0 01]; % единичная матрица 3х3

E = [1 0 0
0 1 0
0 0 1]; % единичная матрица 3х3

Аналогичным образом можно задавать любые другие матрицы, а также использовать приведенные выше функции zeros(), ones() и rand(), например:

A1 = zeros(10,10); % нулевая матрица 10х10 элементов

A2 = zeros(10); % нулевая матрица 10х10 элементов
A3 = ones(5); % матрица 5х5, состоящая из единиц
A4 = rand(100); % матрица 100х100, из случайных чисел

Для доступа к элементам матрицы применяется такой же синтаксис как и для векторов, но с указанием строки и столбца где находится требуемый элемент:

A = [1 2 3;4 5 6;7 8 9]; % матрица 3х3
disp( A(2,1) ); % вывод на экран элемента, стоящего во
% второй строке первого столбца, т.е. 4
disp( A(1,2) ); % вывод на экран элемента, стоящего в
% первой строке второго столбца, т.е. 2

Также возможны операции выделения указанной части матрицы, например:

B1 = A(:,1); % B1 = [1; 4; 7] – выделение первого столбца
B2 = A(2,:); % B2 = [1 2 3] – выделение первой строки
B3 = A(1:2,2:3); % B3 = [2 3; 5 6] – выделение первых двух
% строк и 2-го и 3-го столбцов матрицы А.

Размерность любой матрицы или вектора в MatLab можно определить с помощью функции size(), которая возвращает число строк и столбцов переменной, указанной в качестве аргумента:

a = 5; % переменная а
A = [1 2 3]; % вектор-строка
B = [1 2 3; 4 5 6]; % матрица 2х3
size(a) % 1х1
size(A) % 1х3
size(B) % 2х3

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Для студентов недели бывают четные, нечетные и зачетные. 9950 — | 7737 — или читать все.

Операторы языка Matlab

К основным операторам языка Matlab, кроме рассмотренного ранее оператора присваивания, относятся:

оператор ввода input;

оператор отображения информации на экране disp;

оператор меню menu;

оператор вывода сообщения об ошибке error;

оператор задержки pause;

условный оператор if;

операторы циклов for и while;

оператор выбора switch;

оператор попытки try;

оператор прерывания работы цикла break;

оператор интерпретации строки eval;

оператор интерпретации имени функции feval;

Правила записи операторов

Операторы могут быть записаны в командной строке или в строках создаваемых пользователем m-файлов. В обоих случаях строка может содержать один или несколько операторов. В последнем случае операторы в одной строке отделяются друг от друга символами «,» или «;» («;» подавляет вывод результата на экран, а «,» этого не делает).

Один оператор может быть записан на нескольких строках (например, если он очень громоздкий). В этом случае в конце каждой строки (кроме последней) ставится многоточие «…»

1. Оператор консольного ввода input.

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

» n=input(‘Введите размерность массива n=’);

Введите размерность массива n=5

2. Оператор временного перехода в интерактивный режим keyboard.

Как правило, записывается в программном (script-) файле и очень удобен на стадии отладки программы. Формат вызова:

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

Возврат к выполнению m-файла производится путем вызова оператора возврата в формате

и управление передается оператору, следующему за оператором keyboard.

1. С помощью имени переменной

В этом случае в командной строке следует набрать имя переменной, после которого не записывать символ «;».

2. Оператор вывода disp.

Выводит значение переменной на экран без отображения ее имени.

1 2 3 4 5 6 7 8 9 10

При использовании составного массива в качестве аргумента часто необходимо использовать функцию преобразования int2str(числ_перем), которая округляет значение числовой переменной до ближайшего целого и преобразует последнее в строковую константу:

» disp([‘Размерность массива ‘ int2str(length(k))])

Размерность массива 10

Удобен при выводе в командное окно больших объемов информации. Вызов оператора возможен двумя способами:

pause – ожидает нажатия пользователем произвольной клавиши;

pause(n) – выполняет задержку на n секунд.

Может рассматриваться как разновидность оператора ввода.

переменная = menu (‘заголовок’,’поле1′,’поле2′,…)

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

Оператор цикла for

for имя_перем-парам = выражение

Пример. Текст функции ones(n).

for i = 1:n, x(i)=0, end

Пример 2. Формирование матрицы.

Пример 3. Отрицательный шаг.

Переменная-параметр цикла может быть целочисленной, дробной, а также вектором, например,

for x = [1.25 16 –7 pi –3.45]

В этом случае переменная-параметр цикла будет поочередно принимать значения с первого по последнее.

Параметр цикла может быть также матрицей. В этом случае параметр цикла поочередно приравнивается каждому столбцу матрицы с первого по последний.

Оператор цикла while

Пример. Дано действительное число M>0. Найти минимальное целое n, такое, что n!>M.

Читать еще:  Matlab несколько графиков на одном
Ссылка на основную публикацию
Adblock
detector