Скачиваний:
23
Добавлен:
05.12.2017
Размер:
526.08 Кб
Скачать

Лабораторная работа №54

Лабораторная работа №4

Упражнение 1

Создать M-функции, которые вычисляют расстояние между точками в различных метриках. Проверить их работу для расстояний между точкой и точками и Вычислить расстояния между точками и в различных метриках.

function u_1(x, y)

n = length(x);

p0 = abs(x(1) - y(1));

for i = (2 : n)

tmp = abs(x(i) - y(i));

if (tmp > p0)

p0 = tmp;

end

end

p1 = 0;

for i = (1 : n)

p1 = p1 + abs(x(i) - y(i));

end

p2 = 0;

for i = (1 : n)

p2 = p2 + (x(i) - y(i))^2;

end

p0

p1

p2 = sqrt(p2)

end

>> O = [0, 0];

>> A1 = [3, 4];

>> B1 = [4, 3];

>> A2 = [1, 2, 3, 4];

>> B2 = [7, 3, 4, 200];

>> u_1(O, A1)

p0 = 4

p1 = 7

p2 = 5

>> u_1(O, B1)

p0 = 4

p1 = 7

p2 = 5

>> u_1(A2, B2)

p0 = 196

p1 = 204

p2 = 196.0969

Упражнение 2

Создать M-функцию, строящую изображение замкнутого шара в для различных метрик. Построить шары в метриках

function u_2(x0, r, acc)

subplot(1, 3, 1);

hold on;

subplot(1, 3, 2);

hold on;

subplot(1, 3, 3);

hold on;

for y = (x0(2) - r : acc : x0(2) + r)

for x = (x0(1) - r : acc : x0(1) + r)

p0 = abs(x - x0(1));

if (abs(y - x0(2)) > p0)

p0 = abs(y - x0(2));

end

if (p0 <= r)

subplot(1, 3, 1);

plot(x, y, '.r');

end

p1 = abs(x - x0(1)) + abs(y - x0(2));

if (p1 <= r)

subplot(1, 3, 2);

plot(x, y, '.r');

end

p2 = sqrt((x - x0(1))^2 + (y - x0(2))^2);

if (p2 <= r)

subplot(1, 3, 3);

plot(x, y, '.r');

end

end

end

end

>> u_2([0, 0], 1, 0.03)

Упражнение 3

Положив вывести 10 первых членов последовательности заданной рекуррентной формулой Сделать вывод.

function u_3(x1, n)

for i = (1 : n)

x1 = tan(x1) ;

disp(x1);

end

end

>> u_3(3, 10)

-0.1425

-0.1435

-0.1445

-0.1455

-0.1466

-0.1476

-0.1487

-0.1498

-0.1509

-0.1521

Разница между соседними увеличивается. Следовательно, ряд расходится

Упражнение 4

Создать M-функцию для решения уравнения с заданной точностью с выводом последовательности приближений. Входными параметрами являются функция параметр сжатия начальное приближение точность решения Проверить работу для уравнения из примера 2. С точностью 0.0001 решить уравнение Сравнить с ответом, полученными при непосредственном решении в МatLab.

function x = u_4(f, a, x1, eps)

x(1) = x1;

x(2) = f(x1);

p0 = abs(x(1) - x(2));

i = 3;

while ((a^i * p0) / (1 - a) >= eps)

x(i) = f(x(i - 1));

i = i + 1;

end

x(i) = f(x(i - 1));

end

>> u_4(@(x)(atan(x) + pi), 0.2884, 3, 0.001)

ans =

3.0000 4.3906 4.4885 4.4932 4.4934 4.4934 4.4934

>> u_4 (@(x)((2 * x + 1)^(1 / 5)), 0.5774, 1, 0.0001)

ans =

Columns 1 through 7

1.0000 1.2457 1.2841 1.2897 1.2905 1.2906 1.2906

Columns 8 through 14

1.2906 1.2906 1.2906 1.2906 1.2906 1.2906 1.2906

Columns 15 through 16

1.2906 1.2906

>> fzero(@(x)(x^5 - 2 * x - 1), 1.2)

ans = 1.2906

Упражнение 5

Записать систему уравнений в виде . Проверить выполнение условия сжатости матрицы . Создать M-функцию для решения методом итераций системы уравнений с точностью взяв в качестве начального приближения решения Выходные параметры: приближённое решение и количество итераций. Решить систему уравнений с точностью 0,001.

Проверить решение подстановкой.

function X = u_5(A, B, eps)

N = length(A);

E=eye(N);

% Переход к итерационному виду. (Заменено на С=-A+E)

% for i = (1 : N)

% D(i) = B(i)/A(i,i);

% for j = (1 : N)

% if (i == j)

% C(i,j) = 0;

% else

% C(i,j) = -A(i,j)/A(i,i);

% end;

% end;

% end;

C=-A+E;

% Запишем уравнение в виде X=CX+B

disp('Уравнение в виде X=CX+B:');

for i = 1:N

str = strcat('x', num2str(i),'=');

for j = 1:N

if (C(i,j) ~= 0)

if (C(i,j) > 0) str = strcat(str, '+'); end;

str = strcat(str, num2str(C(i,j)),'*x',num2str(j));

end;

end;

if (B(i) > 0) str = strcat(str, '+'); end;

str = strcat(str, num2str(B(i)));

disp(str);

end;

% Проверяем первое условие

for k = 1:N

S_1(k) = 0;

for j = 1:N

S_1(k) = S_1(k) + abs(C(k,j));

end;

end;

% Проверяем второе условие

for k = 1:N

S_2(k) = 0;

for i = 1:N

S_2(k) = S_2(k) + abs(C(i,k));

end;

end;

% Проверяем третье условие

S_3 = 0;

for i = 1:N

for j = 1:N

S_3 = S_3 + (C(i,j))^2;

end;

end;

if (max(S_1) < 1 || max(S_2) < 1 || sqrt(S_3) < 1)

disp('Условие сжатости матрицы С=-А+Е выполняется');

end;

k = 0;

% в качестве начального приближения решения берём X0=B

X0 = B;

disp('X0 = ');

for i = 1:N

disp([' ',num2str(X0(i))]);

end;

X1 = C*X0 + B;

while (max(X1 - X0) > eps)

X0 = X1;

X1 = C*X0 + B;

k = k + 1;

end;

X=X1;

disp(['X',num2str(k),' = ']);

for i = 1:N

disp([' ',num2str(X(i))]);

end;

disp(sprintf('Количество итераций: %d', k));

end;

>> A = [1, 0.06, -0.02; 0.03, 1, -0.05; 0.01, -0.02, 1];

>> B = [2; 3; 5];

>> X = u_5(A, B, 0.001)

Уравнение в виде X=CX+B:

x1=-0.06*x2+0.02*x3+2

x2=-0.03*x1+0.05*x3+3

x3=-0.01*x1+0.02*x2+5

Условие сжатости матрицы С=-А+Е выполняется

X0 =

2

3

5

X2 =

1.9092

3.1949

5.0448

Количество итераций: 2

>> 1 * X(1) + 0.06 * X(2) - 0.02 * X(3)

ans = 2.0002

>> 0.03 * X(1) + 1 * X(2) - 0.05 * X(3)

ans = 2.9995

>> 0.01 * X(1) - 0.02 * X(2) + 1 * X(3)

ans = 4.9998

Упражнение С1

Создать M-функцию, которая для произвольной матрицы проверяет условия сжатости.

function u_C1(C)

N = length(C);

% Проверяем первое условие

for k = 1:N

S_1(k) = 0;

for j = 1:N

S_1(k) = S_1(k) + abs(C(k,j));

end;

end;

% Проверяем второе условие

for k = 1:N

S_2(k) = 0;

for i = 1:N

S_2(k) = S_2(k) + abs(C(i,k));

end;

end;

% Проверяем третье условие

S_3 = 0;

for i = 1:N

for j = 1:N

S_3 = S_3 + (C(i,j))^2;

end;

end;

if (max(S_1) < 1 || max(S_2) < 1 || sqrt(S_3) < 1)

disp('Условие сжатости матрицы выполняется');

else

disp('Условие сжатости матрицы не выполняется');

end;

end

Упражнение С2

Используя M-функции из упр. 5 и С1, решить систему уравнений с точностью 0.001.

Проверить решение подстановкой.

>> A = [1.11, 0.21, -0.37; 0.13, 0.29, 0.21; 0.63, -0.33, -2.41];

>> B = [1.53; 1.56; 1.42];

>> u_5(A,B,0.001)

Уравнение в виде X=CX+B:

x1=-0.11*x1-0.21*x2+0.37*x3+1.53

x2=-0.13*x1+0.71*x2-0.21*x3+1.56

x3=-0.63*x1+0.33*x2+3.41*x3+1.42

Условие сжатости матрицы C не выполняется

-8-

Соседние файлы в папке Лабораторные (использовать только в случае крайней необходимости)