Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет по ЯП(1 сем).docx
Скачиваний:
28
Добавлен:
10.05.2015
Размер:
297.9 Кб
Скачать

1.5 Задание 5. Векторные и матричные вычисления.

1.5.1 Цель работы

Научиться работать с векторами и матрицами.

1.5.2 Задача

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

1. Запрограммировать в виде m-функции вычисление выражения из

ЗАДАНИЯ1 при произвольных значениях величин x, n (входные пара-

метры), где x—это вектор произвольной длины, n—скаляр. Результат

вычисления должен быть массивом, соразмерным с x. Рассмотреть 2 ва-

рианта: с одним циклом и вообще без единого цикла.

2. Написать m-функцию, строящую график этого выражения на ин-

тервале [a, b], по k равноотстоящим точкам, для чего воспользоваться

встроенной функцией LINE.

3. Написать m-функцию, возвращающую вектор значений k-го чле-

на степенного ряда из ЗАДАНИЯ2, соответствующий вектору значений

аргумента x.

4. Запрограммировать (в цикле) вычисление частичных сумм sn(x) в

случае векторного аргумента x и одновременное построение их графиков

с помощью функции LINE при n = 2, 4, 8, 16. [Указание: если графики

слишком плотно проходят друг к другу, то можно увеличить диапазон

значений аргумента, чтобы убедиться в том, что расхождения графиков

все же имеют место.]

5. Выполнить заново ЗАДАНИЕ3 (все три пункта. Обойтись без цик-

лов).

6. Выполнить заново ЗАДАНИЕ4 (в 1-ом пункте обойтись без циклов,

а во втором, возможно, совсем обойтись без циклов не удастся).

1.5.3 Решение

1. Используя встроенную команду repmat, создаем матрицу и решаем при помощи матрицы задание.

2. Меняем графопостроитель из 1-ого задания на Line.

3. Добавляем индексацию в задание 2.

4. Доработать 2-ое задание, меняем графопостроитель.

5. Считаем число столбцов в матрице, х - матрица.

1)Пройтись по всей матрице

2)Организовать счетчик

1.5.4 Исходный код

1. function y=m1a(x,n)

y(1:length(x))=0; %В нем хранятся суммы

for i=1:length(x)

s=summa(x(i),n);

y(i)=0.05*sqrt(n+abs(x(i)))*s;

end

end

function s=summa(x,n)

s=0;%В s хранится промежуточная сумма i-ого члена последовательности

for i=1:n

s=s+(exp(n+sqrt(x))*cos(2*x/n))^(1/n);

end

end

function y=m1b(x,n)%ИСХ: х – вектор, п – число слогаемых. РЕЗ: у – вектор.

t=length(x);

k=1:n;

k=repmat(k,t,1);

k=k.';

x=repmat(x,n,1);

l=(exp(k+sqrt(x)).*cos(2*x./n)).^(1./n);

y=l.*sqrt(n+abs(x));

y=y.*0.05;

2. function m2

a=input('Введи левая граница a=');% Левая граница

b=input('Введи правая граница b=');% Правая граница

n=input('Введи число слогаемых n=');% Число слогаемых

ch=input('Введи число точек графика ch=');%Число точек графика

h=(b-a)/(ch-1); %h - шаг

k=1;

z=[];

%строит график

for i=a:h:b

z=m1(i,n);

x(k)=i;

k=k+1;

end

line(x, z)

3. function y=m3(x,n) % Вычисляет по формуле значения из вектора х.

for i=1:length(x)

xn=(x+2)/2*x(i);

cn=x(i);

ch=2;

sp=xn;

while (ch<=n)

xn=(2*ch+x(i))/(fact(2*ch));

cn=-cn*x(i)*x(i);

an=xn*cn;

sp(i)=sp(i)+an;

ch=ch+1;

end

y(i)=sp(i);

end

4. function m4(x)

for n=1:16

line(x, dop(x,n))

n=n*2;

end

function y=dop(x,n) % Сумма n членов при x

% y = СУММА(a1+a2+...+an)

for i=1:length(x)

xn=(x+2)/2*x(i);

cn=x(i);

ch=2;

sp=xn;

while (ch<=n)

xn=(2*ch+x(i))/(fact(2*ch));

cn=-cn*x(i)*x(i);

an=xn*cn;

sp(i)=sp(i)+an;

ch=ch+1;

end

y(i)=sp(i);

end

5. function p=m3_a(x)

i=length(x);

l=x(2:2:i);

p=prod(l);

function y=m3_b(x)

% Создать массив, который расположен между "0", и суммировать

% элементы.

promeG=find(x==0);

new=x(promeG(1):promeG(end));

y=sum(new);

function y=m3_c(ma)

%Дано: ma - массив для сорторовки отрицательных элементов

%Результат: Все положительные элементы остались на месте, отрицательные

%отсорторованны по неубыванию.

mo=find(ma<0);

mo(2,:)=ma(mo);

mo=sort(mo,2);

ma(mo(1,1:length(mo)))=mo(2,1:length(mo)); %Собственно замена всех отрицательных элементов

y=ma;

6. function y=m4a(x)

% ИСХ: х – матрица, РЕЗ: у – число столбцов.

[m,n]=find(x==0);

m=unique(n);%Убирает повторяющиеся элементы

y=length(m);

function y=m4b(x) %ИСХ: х –матрица. РЕЗ: у – номер строки

[m,n]=size(x);

mas(1:m)=0;

for i=1:m

mas(i)=pod_func(x(i,:));

end

y=find(mas==max(mas));

function ss=pod_func(x)

m=length(x);

l(1:m)=0;

for i=1:m

z=find(x==x(i));

l(i)=length(z);

end

ss=max(l); %Находим наибольшее число

1.5.5 Пример работы

2.

3.