Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Способы ввода данных и вывода результатов




Основы программирования в MATLAB

 

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

for count = start:step:final

команды MatLab

end

 

Здесь count – переменная цикла; start – её начальное значение; final – конечное значение; step – шаг на который увеличивается (или уменьшатся) переменная count. Если шаг равен 1, то его можно не указывать.

Например, создадим матрицу Q, размера , элементы которой вычисляются по формуле: , для этого в М-файле hil создадим цикл:

------------------------------------------------------------------------------------------------------------------------

% Задание размера матрицы Q

n = 4;

% Инициализируем матрицу Q и заполняем её нулями

Q = zeros(n);

% Вычисляем элементы матрицы Q

for i = 1:n

for j = 1:n

Q(i, j) = 1/(i + j - 1);

end

end

% Отображаем матрицу на экране

disp('Матрица Q = ')

disp(Q)

------------------------------------------------------------------------------------------------------------------------

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

while условие цикла

команды MatLab

end

В условии цикла используются операции отношения или логические операторы:

Обозначение Операции отношения
= = равенство
< (>) Меньше (больше)
< = (> =) Меньше или рано (больше или равно)
~ = Не равно

 

Логические операторы Условие Запись в MatLab Эквивалентная запись
Логическое « и » and (x<3, k = = 4) (x<3) & (k = = 4)
Логическое « или » or (x = = 1, x = = 2) (x = = 1) | (x = = 2)
Логическое « нет » not ( x = =2) ~ (x = = 2)

 

Найдем сумму диагональных элементов матрицы Q. Набираем команды внимательно, чтобы не произошло зацикливание программы. В случае зацикливания надо принудительно прервать выполнение M-файла. Для этого следует нажать клавиши Ctrl+C или Ctrl+Break.

Продолжаем М-файл hil.

------------------------------------------------------------------------------------------------------------------------

s = 0;

k = 1;

while k <= n

s = s + Q(k, k);

k = k+1;

end

% Отображаем сумму на экране

disp('Сумма диагональных элементов матрицы Q = ')

disp( s );

-----------------------------------------------------------------------------------------------------------------------

У цикла while нет переменной цикла, в отличие, от цикла for, поэтому пришлось до начала цикла присвоить переменной k значение нуль, а затем увеличивать k на единицу.

 

Оператор ветвления if

Оператор ifможет применяться в простом виде

if условие

команды MatLab

end

Например, напишем файл-функцию Rfun для вычисления выражения

проверяющую значение аргумента.

------------------------------------------------------------------------------------------------------------------------

function f = Rfun(x);

if abs(x) < 1

warning ('результат комплексный')

end

f = sqrt(x^2-1);

-----------------------------------------------------------------------------------------------------------------------

Команда warningслужит для вывода предупреждения в командное окно.

Теперь вызов Rfun от аргумента, меньшего единицы по модулю, приведет к выводу в командное окно предупреждения:

>> y = Rfun(0.2)

Warning: результат комплексный

y =

0 + 0.9798i

 

В общем виде оператор ветвления представляет конструкцию

If - elseif – else

 

Напишем файл-функцию ifdem, демонстрирующую работу if - elseif – else.

-----------------------------------------------------------------------------------------------------------------------

function ifdem(a);

if (a == 0)

disp('a равно нулю')

elseif a == 1

disp('a равно 1')

elseif a == 2

disp('a равно 2')

elseif a >= 3

disp('a больше или равно 3')

else

disp('a меньше 3, но не равно 0, 1, 2')

end

----------------------------------------------------------------------------------------------------------------------

В зависимости от выполнения того или иного условия работает соответствующая ветвь программы, если все условия неверны, то выполняются команды, размещенные после else.

Вызовем функцию ifdem с аргументом 1.2:

>> ifdem(1.2)

a меньше 3, но не равно 0, 1, 2

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

Например, напишем программу prch, определяющую является ли заданное число N простым.

------------------------------------------------------------------------------------------------------------------------

N = input('Ведите число: ')

или

function prch(N);

% Предполагаем, что число простое (pr=1)

pr = 1;

% Перебираем все возможные делители числа N от 2 до N/2

for i=2:N/2

% Если N делится на i,

if mod(N,i) == 0

% то число N не является простым (pr=0)

pr =0;

% и прерывается выполнение цикла

break;

end

end

% Если pr равно 1, то N - простое число

if pr == 1

disp('ПРОСТОЕ ЧИСЛО')

else

disp('НЕ ЯВЛЯЕТСЯ ПРОСТЫМ ЧИСЛОМ')

end

------------------------------------------------------------------------------------------------------------------------

Прервать не только цикл, но и программу можно также оператором error.

Например, изменим начало программы prch.

------------------------------------------------------------------------------------------------------------------------

N = input('Ведите число: ')

ost = round(N)- N;

if (N > 0) & (ost == 0)

% Предполагаем, что натуральное число простое (pr=1)

pr = 1;

else

error('ЧИСЛО N НЕ ЯВЛЯЕТСЯ НАТУРАЛЬНЫМ')

end

% Перебираем все возможные делители числа N от 2 до N/2

 

........

------------------------------------------------------------------------------------------------------------------------

Теперь, если ввести число, не являющимся натуральным, то программа прервется и укажет об ошибке ввода.

 

4. Оператор альтернативного выбора switch

Одним из способов организации разветвлений является оператор switch, имеющий следующую структуру

switch параметр

case значение1

операторы 1

case значение2

операторы 2

case значение3

операторы 3

....

otherwise

операторы

end

 

Если значение параметра равно значению 1, то выполняются операторы 1, иначе, если параметр равен 2, то выполняются операторы 2 и т.д. Если значение параметра не совпадает ни с одним из значений в группах case, то выполняются операторы, которые идут после слова otherwise.

Например, выведем на экран название дня недели, соответствующее заданному числу D, при условии что в месяце 31 день и 1-ое число – понедельник.

------------------------------------------------------------------------------------------------------------------------

D = input('ВВЕСТИ ЧИСЛО ОТ 1 ДО 31: ')

или

function day_week(D)

md = mod(D,7); %ВЫЧИСЛЕНИЕ ОСТАТКА ОТ ДЕЛЕНИЯ D НА 7

switch md

case 1

disp('ПОНЕДЕЛЬНИК')

case 2

disp('ВТОРНИК')

case 3

disp('СРЕДА')

case 4

disp('ЧЕТВЕРГ')

case 5

disp('ПЯТНИЦА')

case 6

disp('СУББОТА')

otherwise

disp('ВОСКРЕСЕНЬЕ')

end

------------------------------------------------------------------------------------------------------------------------

 

Функции от функций

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

Например, напишем файл-функцию, которая проверяет попадает ли значение функции в точке в заданный интервал .

------------------------------------------------------------------------------------------------------------------------

function str = znach (’fname’, ymin, ymax, x)

% проверка входных аргументов

if ymin >= ymax

error('нижняя граница должна быть меньше верхней')

end

y = feval(fname, x)

if (y >= ymin) & (y <= ymax)

str = 'значение функции попадает в заданный интервал';

else

str = 'значение функции не попадает в заданный интервал';

end

------------------------------------------------------------------------------------------------------------------------

Замечание. В этой программе str – строковая переменная и её значения набирают в апострофах.

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

Например, наберем в командной строке последовательность операторов:

>> r = znach('sin', 0.2, 0.5, pi/5)

y =

0.58779

значение функции не попадает в заданный интервал

 

Способы ввода данных и вывода результатов

Ввод данных:

1.Исходные данные можно задавать с помощью оператора присваивания.

------------------------------------------------------------------------------------------------------------------------

% Исходные данные:

a = -2.5;

b = 1.32;

Fi = 3.89e-3;

A = [1.2 3.2 4.5; 2.3 7.8 4.4];

.

.

.

-----------------------------------------------------------------------------------------------------------------------

2. Интерактивный ввод осуществляется с помощью команды input – запрос на ввод с клавиатуры. Если в M-файле набрать команду

------------------------------------------------------------------------------------------------------------------------

a = input('Ведите значение a = ')

% ввод значения с клавиатуры и занесение введенного значения в а

.

.

------------------------------------------------------------------------------------------------------------------------

то, в командном окне появится надпись

 

Ведите значение a = |

 

далее следует ожидание ввода пользователем значения a.

Вывод результатов.

1. Вывод на экран можно осуществить с помощью команды disp.

------------------------------------------------------------------------------------------------------------------------

.

.

.

disp(' Решение x = ')

disp(x)

------------------------------------------------------------------------------------------------------------------------

Результат на экране будет выведен в том формате, который был выбран заранее или по умолчанию.

2. Функция fprintf позволяет управлять видом записи чисел. Схема использования fprintf для вывода на экран при работе с числовыми переменными такова:

fprintf('формат', список переменных).

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

------------------------------------------------------------------------------------------------------------------------

x = pi/4;

y = sin(x);

fprintf('x = %7.4f, y = %11.8f\n', x, y)

------------------------------------------------------------------------------------------------------------------------

В результате, в командном окне увидим

x = 0.7854, y = 0.70710678

>>

Последовательность %7.4f задает формат вывода переменной x, которая расположена первой в последовательности вывода. Знак процента указывает на начало формата, цифра 7 обозначает, что всего под значение переменной x отводится 7 позиций (включая знак и десятичную точку), цифра 4 после разделителя-точки обеспечивает точность отображения результата ─ четыре цифры после десятичной точки. Спецификатор f указывает на то, что следует вывести число в формате с плавающей точкой. Аналогичным образом работает формат %11.8f для вывода y.

Для вывода целого числа используется формат %d.

Завершение строки с форматами символом \n приводит к последующему выводу данных с новой строки.

Формат fprintf работает с матрицей по столбцам. Например, напечатаем таблицу значений функции sin(x).

------------------------------------------------------------------------------------------------------------------------

clear all

clc

%Печать заголовка таблицы

fprintf(' ТАБЛИЦА ЗНАЧЕНИЙ ФУНКЦИИ sin(x)\n')

fprintf(' -----------------------------\n')

fprintf(' | x | y |\n')

fprintf(' -----------------------------\n')

%создание вектора значений аргумента

x = 0:pi/4:2*pi;

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

%вторая - значение функции

M = [x; sin(x)];

fprintf(' | %8.5f | %8.5f |\n', M)

fprintf(' -----------------------------\n')

------------------------------------------------------------------------------------------------------------------------





Рекомендуемые страницы:

Воспользуйтесь поиском по сайту:



©2015- 2021 megalektsii.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.