ЛР1. Лаб работа 1. Лабораторная работа введение в матлаб цель работы освоение базовых операторов и отладка программ в среде конечного пользователя Матлаб.
Скачать 367.55 Kb.
|
- ans - результат последней операции без знака присваивания - i, j - мнимая единица - pi - число π (3.141592653589793); - inf - машинный символ бесконечности (∞); - NaN - неопределенный результат (0/0, ∞/∞, 1 ∞ и т.п.); - realmin - наименьшее число с плавающей точкой (е - realmax - наибольшее число с плавающей точкой (е. Любая переменная до использования в формулах и выражениях должна быть определена. Для определения переменной необходимо набрать ее имя, символ «=» и значение переменной. Здесь знак равенства – это оператор присваивания, действие которого не отличается от других языков программирования. Основные математические функции 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) арккосинус Выражениев правой части оператора присваивания может быть числом, арифметическим выражением, строкой символов или символьным выражением. Отметим, что если речь идет о символьной или строковой переменной, то выражение в правой части оператора присваивания следует брать в одинарные кавычки. Если символ «;» в конце выражения отсутствует, тов качестве результата выводится имя переменной и ее значение. Наличие символа «;» передает управление следующей командной строке. Это позволяет использовать имена переменных для записи промежуточных результатов в память компьютера. Упражнение 1 В командном окне − Ввести численные переменные а в x=1 y=2, вычислить z=(x+y)-a/b − Ввести символьные переменные с − Ввести строковую переменную h= мама мыла раму − Полученный листинг скопировать в отчет Листинга а = 2.3000 » b=-34.7 b = -34.7000 » х=1;у=2; » z=(х+у)-а/b z = 3.0663 >>%------------------------------------------------ Определение символьной переменной » с='а' c= а Определение строковой переменной » мама мыла раму' h = мама мыла раму − Ввести формулы 25,7-14,6 затем 2 x ans затем x=ans/2 − Полученный листинг скопировать в отчет Листинг 2 » 25.7-14.6 ans = 11.1000 » %3начение системной переменной равно 11.1000 » 2*ans ans = 45.1200 » %3начение системной переменной равно 22.2000 » ха х = 3.1355 » %3начение системной переменной не изменилось и равно 22.2000 » ans 22.2000 Упражнение 3 В командном окне − Ввести численные переменные ABC=1, abc=2, Abc=3, aBc=4, вычислить x= ABC+abc+Abc+aBc, вычислить у ABC*abc*Abc*aBc − Полученный листинг скопировать в отчет Листинг 3 >> ABC=1 ABC = 1.0000 >> abc=2 abc = 2.0000 >> Abc=3 Abc = 3.0000 >> aBc =4 aBc = 4.0000 Массивы Xk. Если параметр dx в конструкции отсутствует nаmе= Xn:Xk это означает, что по умолчанию он принимает значение, равное единице, то есть каждый следующий элемент массива равен значению предыдущего плюс один. Переменную, заданную как массив, можно использовать в арифметических выражениях ив качестве аргумента математических функций. Результатом работы таких операторов являются массивы. Упражнение 4 В командном окне − Ввести вектор Х с начальным значением Xn=-3,5, шагом dx=1,5 и конечным значением Вычислить массив значений Y= sin(X/2) − Ввести вектор A с начальным значением 0, шагом 1 и конечным значением 5 − Полученный листинг скопировать в отчет Листинг 4 >>Xn=-3.5;dx=1.5;Xk=4.5; >> X=Xn:dx:Xk X=-3.5000 -2.0000 -0.5000 1.0000 2.5000 4.0000 >> Y=sin(X/2) Y= -0.9840 -0.8415 -0.2474 0.4794 0.9490 0.9093 >> A=0:5 − Ввести матрицу А, состоящую из трех строк потри элемента в каждой строка 1: 1 2 3; строка 2: 4 5 6; строка 3: 7 8 9 − Вычислить формулу А в степени А деленное на А Полученный листинг скопировать в отчет Листинг 6 >> A=[1 2 3;4 5 6;7 8 9] A= 1 2 3 4 5 6 7 8 9 >> A(1,2)^A(2,2)/A(3,3) ans= 3.5556 Условный оператор if Для того чтобы иметь возможность реализовать логику в программе используются условные операторы. Умозрительно эти операторы можно представить в виде узловых пунктов, достигая которых программа делает выбор по какому из возможных направлений двигаться дальше. Например, требуется определить, содержит ли некоторая переменная arg положительное или отрицательное число и вывести соответствующее сообщение на экран. Для этого можно воспользоваться оператором if (если, который и выполняет подобные проверки. Оператор if-end if выражение операторы Если значение параметра выражение соответствует значению истинно, то выполняются операторы, иначе они пропускаются программой. Следует отметить, что выражение является условным выражением, в котором выполняется проверка некоторого условия. В таблице ниже представлены варианты простых логических выражений оператора if. Таблица. Простые логические выражения if a < b Истинно, если переменная a меньше переменной b и ложно в противном случае. if a > b Истинно, если переменная a больше переменной b и ложно в противном случае. if a == b Истинно, если переменная a равна переменной b и ложно в противном случае. − Применить оператор if-end для программы, которая в зависимости от заданного значения переменной X присваивает переменной signX: - значение плюс, если значение переменной X больше нуля - значение минус, если значение переменной X меньше нуля - значение ноль, если значение переменной X равно нулю − Записать программу в файл PR1-7_FIO_GR.m − Определить переменную signX для трех значений X: 5, -3, 0 − Вывести значения Хи, используя оператор disp − Текст программы и полученные листинги скопировать в отчет Программа X = 5; %X=-3; %X=0; disp(X); if x > 0 плюс end if x < 0 минус end if x == 0 ноль end disp(signX) Листинг 7 5 плюс -3 минус 0 ноль Оператор if-else-end if выражение операторы % выполняются, если истинно условие else операторы % выполняются, если условие ложно end Упражнение 8 В окне Редактора (Editor) X = 5; %X=-3; %X=0; disp(X); if x > 0 плюс % выполняется, если x > 0 elseif x < 0 минус % выполняется, если x < 0 else end ноль % выполняется, если x = 0 disp(signX) Листинг 9 5 плюс -3 минус 0 ноль Логические операторы Для реализации составных условий в MatLab используются логические операторы & - логическое И | - логическое ИЛИ - логическое НЕ Рассмотрим пример использования составных условий. Пусть требуется проверить попадание переменной x в диапазон от 0 до 2. Программа запишется следующим образом Упражнение 10 В окне Редактора (Editor) − Применить оператор if-else-end с логическим оператором ‘&’ (И) для программы, которая проверяет попадание переменной Х в диапазон от 0 до 2. При попадании переменной valueX присваивается значение ‘TRUE’, в противном случае – ‘FALSE’ − Записать программу в файл PR1-10_FIO_GR.m − Определить переменную valueX для двух значений X: 5, 1 − Вывести значения Хи, используя оператор disp − Текст программы и полученные листинги скопировать в отчет Программа X = 5; %X=1; disp(X); if x >= 0 & x <= 2 valueX=‘TRUE’; else valueX=‘FALSE’; end disp(valueX) 5 FALSE 1 Упражнение 11 В окне Редактора (Editor) − Применить оператор if-else-end с логическим оператором ‘|’ (ИЛИ) для программы, которая проверяет выход переменной Х заграницы диапазона от 0 до 2. При выходе переменной valueX присваивается значение ‘TRUE’, в противном случае Записать программу в файл PR1-11_FIO_GR.m − Определить переменную valueX для двух значений X: 5, 1 − Вывести значения Хи, используя оператор disp − Текст программы и полученные листинги скопировать в отчет Программа X = 5; %X=1; disp(X); if x < 0 | x > 2 valueX=‘TRUE’; else valueX=‘FALSE’; end disp(valueX) Листинг 11 5 TRUE 1 Круглые скобки в программировании используются для изменения приоритетов выполнения операторов. Подобно арифметическим операторам, логические также могут быть изменены пожеланию программиста. Благодаря использованию круглых скобок, сначала выполняется проверка внутри них, а, затем, за их пределами. Приоритет логических операций следующий - НЕ () – самый высокий приоритет - И (&) – средний приоритет - ИЛИ (|) – самый низкий приоритет. Оператор цикла while Язык программирования MatLab имеет два оператора цикла while и for. while условие операторы − Применить оператор цикла while для подсчета суммы ряда. Суммирование выполнять до тех пор пока счетчик i не превышает 20, либо значение суммы S меньше 20. − При выходе переменной valueX присваивается значение ‘TRUE’, в противном случае – ‘FALSE’ − Записать программу в файл PR1-12_FIO_GR.m − Вывести значения i и S, используя оператор disp − Текст программы и полученные листинги скопировать в отчет Программа S = 0; % начальное значение суммы i=1; % счетчик суммы while i <= 20 & S <= 20 % цикл работает пока i<=20 и S<=20 S=S+i; % подсчитывается сумма i=i+1; % увеличивается счетчик наконец цикла disp(i);disp(S) % отображение суммы 21 на экране Листинг 12 5 Оператор цикла for При переборе значений счетчика в заданном диапазоне и с заданным шагом в программировании применяется оператор цикла for, который простои нагляднее реализует цикл со счетчиком. for счетчик = начальное значение>:<шаг>:<конечное значение операторы цикла end Упражнение 13 В окне Редактора (Editor) − Применить оператор цикла for для нахождения наибольшего элемента вектора из четырех элементов 3, 6, 5, 3. − Записать программу в файл PR1-13_FIO_GR.m − Вывести номер и значение наибольшего элемента вектора, используя оператор disp − Текст программы и полученные листинги скопировать в отчет Программа % текущее максимальное значение for i=1:length(a) % цикл от 1 до конца вектора с % шагом 1 (по умолчанию) if m < a(i) % если a(i) > m m = a(i);n=i; % то m = a(i) end % конец условного оператора if end disp(n); % конец цикла for disp(m); Листинг 13 2 6 Отладка программы MATLAB Для графической отладки вашей программы MATLAB используйте редактор / отладчик. Кроме того, вы можете использовать функции отладки в окне команд. Оба метода являются взаимозаменяемыми. Прежде чем начать отладку, убедитесь, что ваша программа сохранена и что программа и любые файлы, которые она вызывает, существуют в вашем пути поиска или в текущей папке. Если вы запустите файл с несохраненными изменениями из редактора, то файл будет автоматически сохранен перед запуском. Если вы запустите файл с несохраненными изменениями из окна командной строки, то программное обеспечение MATLAB запустит сохраненную версию файла. Поэтому вы не видите результатов ваших изменений. Установить точку останова Установите точку останова выполнения файла MATLAB, чтобы проверить значение или переменные, в которых может быть проблема. Удобнее установить точку останова в Редакторе. Существует три различных типа точек останова стандартные, условные и ошибки. Чтобы добавить стандартную точку останова в редакторе, щелкните в колонке точек останова в строке исполняемого файла, в которой вы хотите установить точку останова. Колонка точек останова расположена справа от колонки с номерами строк. Вы также можете использовать клавишу F12 для установки точки останова. Исполняемые строки обозначены дефисом (-) в колонке точек останова. Например, щелкните в колонке точек останова рядом со строкой 2 в коде ниже, чтобы добавить точку останова в этой строке. Запустить файл После установки точек останова запустите файл из окна команд или редактора. Запуск файла дает следующие результаты Кнопка Run изменится на кнопку Pause . Подсказка в окне командной строки изменится на указание того, что MATLAB находится в режиме отладки и что клавиатура находится под контролем делает паузу на первой точке останова в программе. В редакторе зеленая стрелка справа от точки останова указывает на паузу. Программа не выполняет строку, где происходит пауза, пока не возобновится работа. Например, здесь отладчик делает паузу перед выполнением программы x = ones(1,10);. • MATLAB отображает текущее рабочее пространство в стеке вызовов функций на вкладке « Редактор » в разделе « Отладка ». Если вы используете функции отладки из окна команд, используйте dbstack для просмотра стека вызовов функций. Для получения дополнительной информации об использовании стека вызовов функций см. Выбор рабочей области. Приостановить запуск файла « Продолжить . Приостановка полезна, если вы хотите проверить ход выполнения долго работающей программы, чтобы убедиться, что она работает должным образом. Заметка Нажатие кнопки паузы может привести к паузе в MATLAB в файле, находящемся за пределами вашего собственного программного файла. Нажатие кнопки « Продолжить возобновляет нормальное выполнение без изменения результатов файла. Найти и устранить проблему Пока ваш код приостановлен, вы можете просматривать или изменять значения переменных, или вы можете изменить код. Просмотр или изменение переменной вовремя отладки Просмотрите значение переменной вовремя отладки, чтобы увидеть, дала ли строка кода ожидаемый результат или нет. Для этого поместите указатель мыши слева от переменной. Текущее значение переменной появляется в подсказке данных. Подсказка данных остается на виду, пока вы не переместите указатель. Если у вас возникли проблемы с отображением подсказки сданными, щелкните строку, содержащую переменную, а затем переместите указатель рядом с переменной. Для получения дополнительной информации см. Проверка значений при отладке Вы можете изменить значение переменной вовремя отладки, чтобы увидеть, дает ли новое значение ожидаемые результаты. Когда программа приостановлена, назначьте новое значение переменной в окне команд, браузере рабочей области или редакторе переменных. Затем продолжите выполнение или пошаговое выполнение программы. Например, здесь MATLAB находится в цикле for, где n = 2: 7. Нажмите Продолжить чтобы запустить следующую строку кода. MATLAB запускает строку кода x(n) = 2 * с n = 7. Изменить раздел кода вовремя отладки Вы можете изменить часть кода вовремя отладки, чтобы протестировать возможные исправления без необходимости сохранять изменения. Обычно рекомендуется изменить файл MATLAB после завершения отладки, а затем сохранить изменение и запустить файл. В противном случае вы можете получить неожиданные результаты. Однако есть ситуации, когда вы хотите поэкспериментировать вовремя отладки. Чтобы изменить программу вовремя отладки 1. Пока ваш код приостановлен, измените часть файла, который еще не запущен. Точки останова становятся серыми, указывая на то, что они недействительны. 2. Выделите весь код после строки, в которой MATLAB приостановлен, щелкните правой кнопкой мыши, а затем выберите « Оценить выделение в контекстном меню. После завершения оценки кода остановите отладку и сохраните или отмените любые изменения, сделанные перед продолжением процесса отладки. − Отладить программу. После исправленных команд вставить комментарии с исходными текстами команд. − Записать программу в файл PR1-14_FIO_GR.m − Текст отлаженной программы скопировать в отчет array_1D=1:2:15; array_1d=[1 2 3 4;5 6 7 8;9 10 11 12]; %2array_1d=[1 2 3 4;5 6 7 8;9 10 11 12] x=-pi:1e-2:2*pi; % x=-pi:1,e-2:2*pi; y1= x.^2 y2=x; %y1= x.^2; y2=x; for ii=1:1,2:5 %for ii=1:1.2:5 if ii>2 disp(ii) elseif ii = 3 j=ii-1 end end NN=1; while NN<100 %while Nn<100 NN=NN+1; end for phi_0=0:0.1:pi %for phi_0=0:0,1:pi x = -2*pi: 2e-2: 2*pi; u = sin(x-phi_0) end − Отладить программу. После исправленных команд вставить комментарии с исходными текстами команд. − Записать программу в файл PR1-15_FIO_GR.m − Текст отлаженной программы скопировать в отчет Программа Определить какие из функций %y1(x)= x*x-1 %y2(x)= sqrt(x) %y3(x)= cos(x) % пересекаются на интервале [0.5;2] clear; close all; clc; x=0,5; shethic=0; % счетчик корней cross=0; razn2=0; dx=2; while x <= 2 razn1=cos(x)- sqrt(x); % корень уравнения cos(x)=sqrt(x) if razn2*razn1 <0 shethic=shethic+1; end x=x+dx; % шаг цикла razn2=razn1; end if shethic>0 disp('cos(x) и sqrt(x) пересекаются '); end cross=cross+ shethic; shethic=0; razn2=0; % обнуляем переменные x=0.5; while x <= 2 razn1=cos(x)- x*x+1; % корень уравнения cos(x)=x*x+1 if razn2*razn1 <0 shethic=shethic+1; end x=x+dx; razn2=razn1; end if shethic>0 − Отладить программу. После исправленных команд вставить комментарии с исходными текстами команд. − Записать программу в файл PR1-16_FIO_GR.m − Текст отлаженной программы скопировать в отчет Программа Определить какие из функций %y1(x)= x*x-1 %y2(x)= sqrt(x) %y3(x)= cos(x) % пересекаются на интервале [0.5;2] clear; close all; clc; x=0.5; shethic=0; % счетчик корней cross=0; |