Лекции по Matlab

Автор: Пользователь скрыл имя, 12 Ноября 2010 в 00:08, курс лекций

Описание работы

Переменные рабочего пространства. Арифметические выражения. Типы данных. Скрипты и функции. Операторы MATLAB. Работа с файлами. Работа с текстовыми файлами.

Работа содержит 1 файл

Лекции по MATLAB.doc

— 650.00 Кб (Скачать)
s=fclose(f_id) закрытие файла  с номером f_id
s=fclose('all') закрытие всех открытых к этому моменту файлов

     Если  операция закрытие завершена неудачно, то s=-1. 

     Контроль  на достижение конца  файла осуществляется с помощью функции feof:

         k=feof(f_id);

     Если k=0, то в файле еще есть непрочитанные данные.

     Если k=1, то файл исчерпан. 

     Далее рассмотри только работу с текстовыми файлами. 

     Работа  с текстовыми файлами

     У текстовых данных переменная длина  строки. Строка завершается признаком  конца (символы типа CR – возврат каретки – шестнадцатеричный код OD, LF – перевод строки – код 0A).

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

     с=fprintf(f_id,'форматная строка',переменная1, переменная2,…);

     f_id – номер открытого файла.

     с – количество байтов, которые удалось  записать в указанный файл (с учетом двухбайтового символа конца строки).

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

     Указатель формата начинается с символа  '%', за которым могут быть расположены три необязательные компоненты – флажки, ширина (w) и точность (.n). Завершается указатель одним из символов, характеризующих тип преобразования данных (см. табл.).

d преобразование  целочисленного значения в десятичное число со знаком
i преобразование  целочисленного значения в десятичное число со знаком
o преобразование  целочисленного значения в восьмеричное число со знаком
u преобразование  целочисленного значения в десятичное число без знака
x преобразование  целочисленного значения в шестнадцатиричное  число без знака с использованием малых букв a, b, c, d, e, f
X преобразование  целочисленного значения в шестнадцатиричное  число без знака с использованием больших букв A, B, C, D, E, F
f преобразование  числового значения в вещественное число с фиксированной запятой
e преобразование  числового значения в вещественное число с плавающей запятой, признак  порядка – e
E преобразование  числового значения в вещественное число с плавающей запятой, признак порядка – E
g преобразование  числового значения в вещественное число с фиксированной или  плавающей запятой в зависимости  от того, какой формат числа занимает меньше места (незначащие нули в дробной  части не выводятся)
G преобразование  числового значения в вещественное число с фиксированной или  плавающей запятой в зависимости  от того, какой формат числа занимает меньше места (незначащие нули в дробной  части не выводятся)
s преобразование  текстового значения в строку символов
c преобразование  единственного символа

     В качестве флажков могут использоваться следующие символы:

- вывод очередного значения, начиная с левой границы  текущего поля (по умолчанию значение прижимается к правой границе)
+ обязательное  включение знака числа
пробел вывод пробела  вместо знака положительного числа
# формирование  префиксов у восьмеричных и шестнадцатиричных  чисел (восьмеричное начинается с 0, шестнадцатиричное  – с 0x или 0X)

     Среди литеральных констант в командной  строке могут использоваться управляющие Esc-последовательности.

\b забой предыдущего  символа (Backspace)
\f перевод страницы (Form feed)
\n новая строка (New line)
\r возврат каретки (Carriage return)
\t горизонтальная  табуляция (Horizontal tab)

     При отсутствии f_id или при f_id=1 вывод происходит командное окно:

         >>fprintf('%s\n','ABCD');

         ABCD 

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

         >>fprintf('%4d',1,2,3,4);

         1  2  3  4 

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

     Чтение данных из текстового файла может быть произведено с помощью функции

     [a n] = fscanf(f_id,'format',m);

     a – принимающий массив;

     n – количество фактически считанных значений (элементов, а не байтов!);

     f_id – номер открытого файла;

     format – список форматных указателей (как и у fprintf);

     m – количество запрашиваемых данных (если отсутствует или равен Inf, то данные считываются до конца файла).

         k=fopen('a.txt','wt');

         >> a=eye(3,4)

         a =

              1     0     0     0

              0     1     0     0

              0     0     1     0

         >> n=fprintf(k,'%d ',a)  % - сохранение в файл (по столбцам!!!), пробел после %d необходим для отделения чисел

         n =

             24

         >> fclose(k);

         >> k=fopen('a.txt','rt');

         >> [b n]=fscanf(k,'%d',[3 4])

         b =

              1     0     0     0

              0     1     0     0

              0     0     1     0

         n =

             12

         >> frewind(k);     % вернуть указатель на начало файла

         >> [c n]=fscanf(k,'%d',3)   % прочитать 3 значения (1-й столбец)

         c =

              1

              0

              0

         n =

              3

     Задания на функции:

  1. Найти корни квадратного уравнения.
  2. Возвратить последовательность чисел Фибоначчи числа n.
 

     Задания на файлы:

  1. Функция, сохраняющая в указанный файл значения x и sin(x) на интервале [a,b] с шагом h.

    function write(fname,a,b,h)

    k=fopen(fname,'wt');

    x=a:h:b;

    y=sin(x);

    tmp=size(x);

    fprintf(k,'%d ',tmp(2)); %размерность вектора

    fprintf(k,'%f ',[x;y]');

    fclose(k);

  1. Функция, считывающая из указанного файла в переменные x и y значения, записанные в п.1.

    function [x,y]=read(fname)

    k=fopen(fname,'rt');

    n=fscanf(k,'%d',1);

    x=fscanf(k,'%f',n);

    y=fscanf(k,'%f');

    fclose(k);

  1. Функция, считывающая из указанного файла в переменные x и y значения, используя функцию п.2 и строящая график с легендой, заголовком.

    function graf(fname,x,y)

    [x y]=read(fname);

    plot(x,y);

    legend('sin(x)');

    title('Graphic Sin(x)');

 

    Решение совместной системы  линейных уравнений 

     Систему линейных уравнений

     

обычно  кратко записывают в виде Ax=b. Данная система совместа (имеет решение) тогда и только тогда, когда ранг матрицы коэффициентов r=rank(A) равен рангу расширенной матрицы R=rank([A b]) и равен числу переменных.

     Единственное  решение такой системы задается формулой x=A-1b или на языке MATLAB:

     x=inv(A)*b

     Здесь b – матрица, которая может содержать несколько столбцов, т.е. одной матричной операцией можно решить сразу несколько систем линейных уравнений с одной и той же матрицей коэффициентов, но разными наборами правых частей. 

     Пример. Нахождение корней системы линейных уравнений

     >>a=[1 -1 1; 2 0 2; 0 1 1];

     >>b=[1; 4; 2];

     >>x=inv(a)*b

     x=

         1

         1

         1 

     Решение нелинейного уравнения  с одной неизвестной 

     Для решения уравнений вида fun(x)=0, где fun – нелинейная функция, используется функция fzero. Алгоритм ее реализации представляет собой комбинацию метода бисекции (половинного деления), метода секущих и метода обратной квадратичной интерполяции.

     Простейший  формат использования функции fzero:

     x=fzero(fun, x0)

     Здесь fun – указатель на функцию, который может быть задан одним из трех способов:

  • как формула с неизвестным x, заключенная в одинарные кавычки, например, x=fzero('sin(x)',0.1). Ограничение: данная формула может использовать в качестве независимой переменной только x.
  • как имя m-файла (в одинарных кавычках и без расширения m);
  • как указатель на функцию (например, @fun_name).
 

     Аргумент  x0 (начальное приближение) может быть задан одним из двух способов:

  • как вектор [a, b], представляющий интервал (a<b), на концах которого функция fun меняет знак, что гарантирует нахождение, по крайне мере, одного корня на этом интервале;
  • как скалярное значение, в окрестности которого предполагается нахождение корня. Функция fzero при этом сама определить отрезок с центром в заданной точке x0, на концах которого функция fun меняет знак.

     Для облегчения работы по выбору начального приближения, разумнее всего построить  график функции y=fun(x). Например, построим график функции :

x=0:0.1:2*pi;

>> plot(x,x.*exp(-x)+sin(x))

>> grid on

>> title('y=x*exp(-x)+sin(x)')

     Из  графика видно, что один из корней находится на интервале [3, 4]. Поэтому вызовем функцию fzero следующим образом:

>> fzero('x.*exp(-x)+sin(x)',[3, 4])

ans =

    3.2665

Рис. 7. График функции

для локализации  корня

     Если функцию нахождения корня записать в виде отдельного m-файла:, то обращение к функции fzero могло быть следующим:

    function fzero1

      x=fzero(@f1, [3, 4])

Информация о работе Лекции по Matlab