Рис. 1.5. Сохранение М-файла

Имя сохраняемого файла должно совпадать с именем описанной в нем функции (то есть описанная в нем программа считается функцией и ее описание начинается с указания какого-нибудь имени этой функции, под которым она дальше и будет вызваться для исполнения)

Если какие-то М-файлы уже созданы ранее то их можно посмотреть командой File—Open и выбрать тот который нужен.

Для рассмотрения простейших операций ввода/вывода и текстовых комментариев целесообразно создать m-файл в виде скрипта с именем Kvadr2S: Для ввода 3-х коэффициентов квадратного уравнения a*x^2+b*x+c=0 служат 3 оператора: a=input('a='); b=input('b='); c=input('c='). В результате в командных строках последовательно появятся надписи:

a=

b=

c=,

куда следует записать конкретные значения коэффициентов a,b,c.

Команда clc стирает все предыдущие записи в командных строках Command Window.

clc; disp ('Программа Kvadr2S '); disp ('ОПР.-Е КОРНЕЙ КВ. УР.-Я'); disp ('ИСХОДНЫЕ ДАННЫЕ'); disp ('Коэф.- ты ур.- я a*x^2+b*x+c=0') a=input('a='); b=input('b='); c=input('c='); %вычисление детерминанта det=b^2-4*a*c; %вычисление двух корней x1=(-b-sqrt(det))/2/a;  x2=(-b+sqrt(det))/2/a;  disp ('РЕЗУЛЬТАТЫ РАСЧЕТОВ') if det<0 ss='Получены комплексные корни'; else ss='Получены вещественные корни'; end  disp (ss);  s0='Детерминант уравнения = '; disp(sprintf('%s %d',s0,det)); disp ('Корни уравнения'); if det<0 disp('x1='); disp(x1); disp('x2='); disp(x2);  else  disp(sprintf('x1=%g x2=%e',x1,x2));  end

Оператор вывода disp (x) служит для вывода в рабочую область Command Window чисел и переменных – первые четыре оператора disp программы выводят символьные переменные, заключенные в кавычки, которые характеризуют решаемую задачу - в данном случае это определение корней квадратного уравнения.

Далее следуют два текстовых комментария действий программы, перед которыми

                                                                   ставится знак процента (%):

%вычисление детерминанта

det=b^2-4*a*c;

%вычисление двух корней

x1=(-b-sqrt(det))/2/a;

 x2=(-b+sqrt(det))/2/a;

В конце программы с применением условного оператора if   представлены два варианта вывода в рабочую область Command Window  корней уравнения x1 и x2, в зависимости от того являются ли они вещественными (det>=0) или комплексными (det<0):

А) Если корни комплексно сопряженные, то запись вывода выполняется в 4 строки:

if det<0

disp('x1=');

disp(x1);

disp('x2=');

disp(x2);

и для коэффициентов a=2;b=3;c=4 результаты также выводятся в 4 строки в виде:

x1=

-0.7500 - 1.1990i

x2=

-0.7500 + 1.1990i

Б) Если корни вещественные, то запись вывода выполняется в 1 строку:

else

       disp(sprintf('x1=%g x2=%e',x1,x2));

 end

Функция sprintf ('x1=%g x2=%e',x1,x2)указывает на то, список выводимых переменных x1,x2 будет выводиться в одну строку, с обозначениями и форматами (представлены после знака процент %), приведенными в кавычках.

В данном случае для х1 обозначение будет x1=, а формат g –после обозначения %, а для x2 обозначение будет x2=, а формат e –после обозначения %.

Ниже приведены 5 символов управления форматированием (d – десятичная цифра, а e –представление числа в виде: 10 в степени):

d – десятичное целое со знаком

f – значение со знаком вида [-]dddd.dddd;

e – значение со знаком вида [-]d.dddd e [+|-]ddd;

g – значение со знаком типа e или f в зависимости от значения или точности

s – строка символов.

Форматирование s и f используется при записи вывода значения детерминанта квадратного уравнения:

s0='Детерминант уравнения = ';

disp(sprintf('%s %d',s0,det));

В результате получается вывод значений символьной переменной (s0) и детерминанта квадратного уравнения (det) для коэффициентов a=2;b=3;c=4 получается в одну строку:

Детерминант уравнения = 23.000000,

а для коэффициентов  - a=1;b=7;c=1:

Детерминант уравнения = 45.000000

Для последних коэффициентов (a=1;b=7;c=1) корни уравнения, выводимые в одну строку с использованием оператора:

disp(sprintf('x1=%g x2=%e',x1,x2));

 получаются в виде:

x1=-6.8541 x2=-1.458980e-001

Следует отметить, что эту же программу можно оформить в виде двух программных модулей:

· Функции без параметров Kvadr2F.m, которая является головной и используется для ввода данных и вывода результатов, а также обращения к функции с параметрами func_kvadr_ur.m

· Функции с параметрами Function[x1,x2]= func_kvadr_ur (a,b,c), в которой вычисляются корни квадратного уравнения с произвольными коэффициентами a,b,c.

Ниже приведены коды этих двух m-файлов:

%Функция без параметров %Kvadr2F.m %Функция с параметрами %func_kvadr_ur.m
function [ ] = Kvadr2F() clc; global det; disp ('ОПР.-Е КОРНЕЙ КВ. УР.- Я'); disp ('ИСХОДНЫЕ ДАННЫЕ'); disp ('К.-ты ур.-я   a*x^2+b*x+c=0') a=input('a='); b=input('b='); c=input('c='); [x1,x2] = func_kvadr_ur(a,b,c);  disp ('РЕЗУЛЬТАТЫ РАСЧЕТОВ') if det<0 ss='Получены комп.-е корни'; else ss='Получены веществ.-е корни'; end  disp (ss);  s0='Детерминант уравнения = '; disp(sprintf('%s %f',s0,det)); disp ('Корни уравнения'); if det<0 disp('x1='); disp(x1); disp('x2='); disp(x2);  else disp(sprintf('x1=%g x2=%e',x1,x2));  end  end function [x1,x2]=func_kvadr_ur(a,b,c) global det; %вычисление детерминанта det=b^2-4*a*c; %вычисление двух корней x1=(-b-sqrt(det))/2/a;  x2=(-b+sqrt(det))/2/a; end  

Декларация global det; используется в обоих программных модулях, так как вычисленные значения детерминанта в файле func_kvadr_ur.m необходимы для вывода этой величины в файле Kvadr2F.m.

В заключении этого раздела следует отметить, что встроенная функция MATLAB roots(p), где p =[ a,b,c ] -- последовательность коэффициентов уравнения многочлена (в данном случае квадратного, т.е. второй степени), может решить рассмотренную выше задачу следующим образом в рабочей области Command Window:

для вещественных корней: для комплексных корней:
>> a=1;b=7;c=1; >> p=[a,b,c]; >> result=roots(p) result = -6.8541 -0.1459 >> result=roots([2,3,4]) result = -0.7500 + 1.1990i -0.7500 - 1.1990i  

Программа, написанная на языке MATLAB, сохраняется в файл с расширением.m (это так называемый М-файл) и называется M-программой. М-программа состоит из операторов на встроенном в MATLAB языке программирования (M-языке программирования) и обращений к стандартным и нестандартным (создаваемыми пользователями) функциям MATLAB.

Следует отметить две особенности M-языка программирования:

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

function Start_1 aperemenaya=3.4 amatrica(2,3)=0 amatrica(1,2)=9 z=roots([1,4,5,9,-10]) end результаты в Command Window aperemenaya = 3.4000 amatrica = 0 0 0 0 0 0 amatrica = 0 9 0 0 0   0 z = -3.5326 -0.5758 + 1.9507i -0.5758 - 1.9507i 0.6843

б) методы вычислительной математики оформлены в виде стандартных функций расчетов, для применения которых в тексте программы к ним надо обратиться с конкретными фактическими значениями аргументов. Например, для определения всех корней уравнений многочленов произвольной степени необходимо обратиться к функции roots следующим образом: z=roots ([1,4,5,9,-10])

Здесь в круглых и квадратных скобках указываются 5 коэффициентов уравнения многочлена 4-ой степени следующего вида:

1*x^4+4*x^3+5*x^2+9*x-10=0:

M-программу необходимо написать в соответствующем редакторе (Editor) М-файлов. Редактор (Editor) можно открыть так: File--New--M-file.

После того как программа готова ее сохраняют (File—Save as). Причем сохранить надо обязательно именно с тем именем файла, которое не отличается (полностью по буквам совпадает) с именем функции, описанной в программе.

При написании программы ее следует оформлять как описание функции, имеющей список исходных аргументов (их значения передаются в функцию и должны быть определены до ее вызова), а также список возвращаемых переменных (их значения вычисляются при работе функции). Текст функции заканчивается словом end. Если возвращаемое значение одно, то можно написать заголовок так: function y=ext(x) где слово function является обязательным, у имя возвращаемой переменной, х имя аргумента, ext имя функции выбранное ее составителем по своему усмотрению. При сохранении в М-файл, конечно, файл будет называться так же как и функция и иметь расширение .m то есть ext.m.

Если возвращаемых значений много, то их заключают в квадратные скобки function[a,b,c]=ertVert(x,y,z) и когда необходимо вызвать функцию, например, в Command Window, то сначала определяют значения аргументов x,y,z, и уже затем вызывают функцию (без использования слова function, просто [a,b,c]=ertVert(x,y,z) и получают вывод в окне Command Window значений возвращаемых переменных).

Сначала рассмотрим ввод-вывод для программ, не снабженных индивидуальным визуальным интерфейсом. (Они уже упоминались чуть выше). Для ввода используется команда x=input(‘x =?’) где х имя переменной, которая вводится. Для вывода используется команда disp(‘a=’) и с ней еще disp(a).  Кроме того, можно не ставить точку с запятой при вычислении переменных и тогда они сразу будут появляться в Command Window. Если ввод-вывод программы не требует указания исходных аргументов и возвращаемых переменных, то скобки пишутся пустыми function[]=ertVert2()

Оператор УСЛОВНЫЙ. if. Оператор УСЛОВНЫЙ в MATLAB проверяет истинно или нет какое-то условие. Если условие истинно, то условный оператор возвращает единицу. Если ложно, то возвращает ноль. Оператор УСЛОВНЫЙ (рис.1.6) описывается в тексте как if. После него пишется условие. Если условие выполняется, то будет выполнено действие, описанное ниже. Однако если условие не выполняется, то не будет выполнено действие, описанное ниже условия. Произойдет переход к слову else, которое располагается ниже всех действий, выполняемых в случае, если условие выполнилось. Слово else означает начало описания всех тех действий, которые будут выполнены, если не выполнилось условие, указанное после слова if. После действий, выполняемых, если не выполнилось условие, указанное после слова if, пишется слово end, завершающее описание всех действий.

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

Сравнение числовых значений двух переменных Пример Command Window Пояснения
х==у (х равно у), «равно» указывается двойным знаком равенства х<у (х меньше у),  х>у (х больше у), х<=у (х меньше или равно у), х>=у (х больше или равно у), x~=y (х не равно у). >> x=10; >> y=20; >> if x==y z=1 else z=0 end z = 0 Так как х<y то условие х==у не выполняется и тогда реализуется вариант действий, описанный после else то есть z=0. Описание завершается словом end. Потом происходит вывод ответа z=0.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: