Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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

Основы программирования в 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')

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



<== предыдущая лекция | следующая лекция ==>
cvičení – úkoly | Виробництво, розподіл і збут продукції
Поделиться с друзьями:


Дата добавления: 2017-01-28; Мы поможем в написании ваших работ!; просмотров: 2769 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

80% успеха - это появиться в нужном месте в нужное время. © Вуди Аллен
==> читать все изречения...

2239 - | 2103 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.