Листинг 5.5 Файл Zeidel.m. function Zeidel(A,b,eps); N=size(A,1); % Приведение системы к нормальному виду C=A'*A; D=A'*b; % Приведение системы к виду, пригодному для итерационного процесса for i=1:N D1(i)=D(i)/C(i,i); end; D1=D1'; % Транспонирование матрицы d1=D1; for i=1:N for j=1:N if i==j C1(i,j)=0; else C1(i,j)=-C(i,j)/C(i,i); end; end; end; % Решение СЛАУ методом Зейделя R1=d1; q1=R1; % Создание матрицы для хранения промежуточных данных t=size(C1); N=t(1,1); q2=zeros(t(1,1),1); % Цикл вычислений p=0; s=0; for i=1:N if abs(q2(i)-q1(i))>s s=abs(q2(i)-q1(i)); end; end; while s>eps q2=q1; p=p+1; for f=1:N v=(C1*q1)+R1; x(f,1)=v(f,1); q1(f,1)=x(f,1); end; s=0; for i=1:N if abs(q2(i)-q1(i))>s s=abs(q2(i)-q1(i)); end; end; q1=x; end; 'Ответы:' q2 'Проверка:' A*q2 'число проходов:' p abs(q2-q1) 2. Задать значения коэффициентов при неизвестных исходной системы линейных уравнений и столбец свободных членов: >> A=[1.23,-3.25,-8.69;7.03,4.81,0.27;4.49,-7.55,12.51]; >> b=[10.33;-6.43;41.53]; 3. Вычислить решение системы линейных уравнений, используя функцию Zeidel(): >> Zeidel(A,b,0.001) ans = Ответы: q2 = 1.6461 -3.7683 0.4543 ans = Проверка: ans = 10.3235 -6.4304 41.5255 ans = число проходов: p = ans = 1.0e-003 * 0.4400 0.5685 0.2488 Ответ: решением системы трех линейных уравнений является вектор , найденный на восьмом шаге итерации. Рассмотрим решение систем линейных уравнений с помощью встроенной функции solve(): solve (' f1', 'f2 ', …, 'fn ', x1, x2, …, xn) где: ü 'fi ' – i-е уравнение системы, i=1, 2, …, n; ü xi – i-е неизвестное, i=1, 2, …, n. Перед функцией solve() необходимо с помощью функции syms определить символьные переменные. Пример 5.4. Пусть необходимо решить следующую систему уравнений:  Программа решения системы уравнений имеет вид: >> syms x1 x2 x3; >> Y=solve('1.23*x1-3.25*x2-8.69*x3=10.33', '7.03*x1+4.81*x2+0.27*x3=-6.43', '4.49*x1-7.55*x2+12.51*x3=41.53') После нажатия клавиши <Enter> получим ответ в следующем виде: Y = x1: [1x1 sym] x2: [1x1 sym] x3: [1x1 sym] Программа задачу решила, но не выдала значения неизвестных х1, х2, х3. Для их получения необходимо воспользоваться командой Y.k, где k – имя неизвестного. В нашем случае решение будет иметь вид: >> Y.x1 ans = 1.6467696870844978837212332256586 >> Y.x2 ans = -3.7690989344414828576791743237764 >> Y.x3 ans = .45398138688708304769095896660916 ПРИМЕРНЫЕ ВОПРОСЫ НА ЗАЩИТЕ РАБОТЫ 1. Какие вы знаете группы методов решения систем линейных уравнений? 2. Какие методы относятся к прямым методам решения систем линейных уравнений? 3. Какие методы относятся к приближенным методам решения систем линейных уравнений? 4. Что значит решить систему уравнений? 5. В чем заключается суть метода Гаусса для решения систем линейных уравнений? 6. В чем заключается суть метода Жордана-Гаусса для решения систем линейных уравнений? 7. В чем заключается суть метода простой итерации для решения систем уравнений? 8. Как привести систему к виду с преобладающими диагональными коэффициентами? 9. В чем заключается суть метода Зейделя для решения систем уравнений? ЗАДАНИЕ 1. Решить СЛАУ методом Гаусса с точностью 0,001. 2. Решить СЛАУ методом простой итерации с точностью 0,001. 3. Решить СЛАУ методом Зейделя с точностью 0,001. 4. Провести сравнительную характеристику методов. 5. Решить СЛАУ в системе MATLAB с помощью встроенной функции. Варианты заданий. |