- •Информатика
- •1. Цели работы
- •Теоретические сведения
- •2.1. Введение
- •2.2. . Интерфейс среды matlab
- •2.3. Задания массивов в среде matlab
- •2.4. Стандартные матрицы
- •2.5. Операции над матрицами
- •2.6. Операторы языка matlab
- •2.7. Синтаксис операторов switch и try…except
- •2.8. Использование функций и скриптов
- •3. Выполнение работы
- •4. Контрольные задания
- •5. Задания для самостоятельной работы
- •6. СПисок рекомендуемой литературы
3. Выполнение работы
1. Наберите коды функций, использующихся для построения кода Хаффмана и сжатия по алгоритму Хаффмана:
Построение кода Хаффмана для входных данных.
function CODE = huffman(p)
%Построение кода Хаффмана.
if (ndims(p) ~= 2) | (min(size(p)) > 1) | ~isreal(p) | ~isnumeric(p)
error('P должно быть множеством действительных чисел');
end
global CODE %использование глобальной переменной
CODE = cell(length(p),1);
if length(p)>1
p=p/sum(p);
s = reduce(p);
makecode(s,[]);
else
CODE={'1'};
end;
function s = reduce(p);
for i=1:length(p)
s{i}=i;
end
while numel(s)>2
[p,i]=sort(p);
p(2)=p(1)+p(2);
p(1)=[];
s=s(i);
s{2}={s{1},s{2}};
s(1)=[];
end
function makecode(sc,codeword)
global CODE
if isa(sc, 'cell')
makecode(sc{1},[codeword 0]);
makecode(sc{2},[codeword 1]);
else
CODE{sc}=char('0'+codeword);
end
2. Сжатие на основе предыдущего кода.
Наберите (или скопируйте эти коды, сохранив в виде функций (файлы формата name.m).
3. Теперь посмотрим пример вызова функции.
На рис.(15) показан пример вызова функции кодирования Хаффмана.
Рис.15. Кодирование Хаффмана – результат для введенного массива
4. Контрольные задания
Блок 1.
1. Напишите выражение (или функцию) для вычисления суммы чисел от 1 до 100. Для того, чтобы обрабатывать большие последовательности чисел, например, считать сумму, используется оператор (:).
2. Напишите функцию, определяющую сумму квадратов от 1 до 10.
3. Напишите функцию, определяющую сумму степеней 0.5 чисел из диапазона от 1 до 10 (10.5 и так далее).
4. Пусть A = [2 5 1 6]. Добавьте 3 к элементам, имеющим нечетные индексы (результат запишите в двух векторах).
Блок 2.
Использование оператора if и циклов (самостоятельно изучить).
5. Напишите небольшую функцию, проверяющую, является ли число 73 простым. Используя полученный код, напишите функцию, определяющую первые 20 простых чисел. Можете пользоваться командами mod или rem (остаток от деления). Справка по командам в системе - help rem.
5. Задания для самостоятельной работы
1. Поясните функции команд системы MATLAB:
clc
clear
who
File | Save Workspace As...
save путь_к_файлу\имя_МАТ-файла
File | Load Workspace..
load имя_МАТ-файла
load имя_МАТ-файла имя1, имя2, ...
cd путь_к_новому_каталогу
clear ( 'имя!', тимя2' )
help имя_команды
format long
format short
format rat
2. Какие знаки используются для записи арифметических, логических операций и операций отношения?
Задача 1: дано: а=l; b=2; c=3;
res=( a<b ) + (c ~= b) * (b = = a)
res=?
Задача 2: дано: а = 1; b = 0;
xor( a, b )=?
дано: а=1; b=1;
xor{ a, b )=?
3. Поясните назначение элементарных функций и приведите примеры их использования :
sqrt, ехр , pow2, log, loglO,1оg2, sin, cos, tan, cot, asin, acos , atan, acot, round, fix, floor ceil, mod, rem,
sign , factor isprime, primes, rat , lcm , gcd, perms , nchoosek.
4.Приведите примеры записи комплексных чисел.
5.Поясните назначение элементарных функций: abs, conj , imag, real , angle,isreal.
Задача 1: дано с = 2 + 31; d = 21;
с > d
ans =?
Задача 2: дано с = 51; d = 21;
с <= d
ans =?
с >= d
ans =?
Задача 3: дано с = 2 + 3i; d = 2i;
с & d
ans=?
c | d
ans=?
6. Поясните назначение операции конкатенации и функций length, cat, reshape, ndims, size, ones, : (двоеточие), ' (апостроф) и zeros. Приведите примеры их использования.