mp_12a_s2
.docxа) б) в)
Упражнение 1С**. Создать M - функцию, которая для произвольной матрицы проверяет условия сжатости.
function C = C1(C)
N=length(C);
for k=1:N
S_1=0;
for j=1:N
S_1=S_1+abs(C(k,j));
end;
end;
for k=1:N
S_2=0;
for i=1:N
S_2=S_2+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
Упражнение 4. Создать M-функцию для решения уравнения с заданной точностью с выводом последовательности приближений. Входными параметрами являются функция параметр сжатия начальное приближение точность решения С точностью 0.0001 решить уравнение (см. ниже, номер задания равен номеру компьютера). Сравнить с ответом, полученными при непосредственном решении в МatLab.
19. |
|
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
a = -0.5671
>> u_4(@(x)(-exp(x)), 0.5769, 1, 0.0001)
ans =
1.0000 -2.7183 -0.0660 -0.9361 -0.3921
-0.6756 -0.5088 -0.6012 -0.5482 -0.5780
-0.5610 -0.5706 -0.5652 -0.5683 -0.5665
-0.5675 -0.5669 -0.5673 -0.5671 -0.5672
-0.5671
>> fzero(@(x)(x+exp(x)),-0.55)
ans = -0.5671
Упражнение 5. Записать систему уравнений в виде . Проверить выполнение условия сжатости матрицы . Создать M-функцию для решения методом итераций системы уравнений с точностью взяв в качестве начального приближения решения Выходные параметры: приближённое решение и количество итераций. Решить систему уравнений с точностью 0,001. Проверить решение подстановкой.
19. |
. |
function X = u_5(A, B, eps)
N = length(A);
E=eye(N);
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('Условие сжатости матрицы С=-А+Е выполняется');
else 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 = [0.23 7.31 0.41; 0.29 -0.34 7.27; -6.41 -0.23 -0.67]
>> B = [-4.26; 7.51; 6.23]
>> X = u_5(A, B, 0.001)
Уравнение в виде X=CX+B:
x1=+0.77*x1-7.31*x2-0.41*x3-4.26
x2=-0.29*x1+1.34*x2-7.27*x3+7.51
x3=+6.41*x1+0.23*x2+1.67*x3+6.23
Условие сжатости матрицы С=-А+Е не выполняется
X0 =
-4.26
7.51
6.23
X0 =
-64.9926
-26.4833
-8.9452
Количество итераций: 0
X =
-64.9926
-26.4833
-8.9452
>> A=A/7.31
>> B=B/7.31
>> X = u_5(A, B, 0.001)
Уравнение в виде X=CX+B:
x1=+0.9957*x1-0.1368*x2-0.0076727*x3-0.58276
x2=-0.039672*x1+1.0465*x2-0.99453*x3+1.0274
x3=+0.87688*x1+0.031464*x2+1.0917*x3+0.85226
Условие сжатости матрицы С=-А+Е не выполняется
X0 =
-0.58276
1.0274
0.85226
X1 =
-2.0721
1.12
1.1671
Количество итераций: 1
X =
-2.0721
1.1200
1.1671
#
>> A = [1 0.06 -0.02; 0.03 1 -0.05; 0.01 -0.02 1]
>> B = [2;3;5]
>> 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
ans =
1.9092
3.1949
5.0448