logo search
Пос_бник АМО

Практичне заняття 2. Розв’язування систем лінійних рівнянь у системі matlab

МATLAB-програма порівняльного розв’язування СЛАР є компактною, але містить багато інформації.

%*********************************************************************

%**** Resolution of linear systems poorly conditioned **********

%*********************************************************************

clear;

for n=1:40;

%for n=1:12;

B=[1./(1:n)]'.*(1+1e-16*randn(n,1)); A=zeros(n);

%*** The Vandermonde matrix A(i,j)=b(i)^(j-1).

for j=1:n; A(:,j)=B.^(j-1); end; %A(:,13:n)=[];

x1=A\B; er1(n)=max(abs((A*x1-B)./B));

[L,U]=lu(A); y=L\B; x2=U\y; er2(n)=max(abs((A*x2-B)./B));

[Q,R]=qr(A); y=Q'*B; x3=R\y; er3(n)=max(abs((A*x3-B)./B));

end;

plot(1:n,er1,'b', 1:n,er2,'g', 1:n,er3,'r');

Увесь текст програми, крім першого і останнього операторів, охоплений циклом за індексом n від 1 до 40 з кроком 1. Оскільки n означає порядок системи, програма формує і розв’язує СЛАР різного порядку. Коментар показує, як задати порядки систем від 1 до 12.

На початку циклу утворено вектор-стовпець В, який є правим вектором системи Аx=В. Операція ділення з попередньою крапкою означає поелементне ділення, що виконується з кожним елементом матриці зокрема. Операція ділення без крапки означає матричне ділення. Це зауваження стосується всіх арифметичних операцій. Символ ' означає транспонування матриці. Вектор В поелементно домножується на близькі до одиниці коефіцієнти, що мають малі псевдовипадкові відхилення (функція randn). Ці відхилення потрібні для надійного розділення розв’язків системи.

Далі формується погано обумовлена квадратна матриця, названа іменем французького математика 18-го сторіччя Вандермонда (Vandermonde). До програми можна включити оператор, що в поданому тексті є коментарем (після символа %). Тоді матриця А буде прямокутною, починаючи з n=13.

Cистема Аx=В розв’язується тричі різними способами. Спочатку з використанням MATLAB-операції \, що означає розв’язування будь-яких СЛАР з автоматичним вибором методу розв’язування. Потім ця ж система розв’язується LU-розкладом та QR-розкладом. Для кожного з розв’язків обраховується похибка: максимальне значення модулів відносних похибок рівнянь з підставленими розв’язками. Значення похибок кожного розв’язку для кожного порядку n системи зберігаються в масивах er1, er2 та er3.

Останній оператор програми будує та виводить у графічне вікно залежності похибок розв’язків від розміру системи (рис. 5 та рис. 6).