0 / 0 / 0
Регистрация: 13.05.2012
Сообщений: 11

Как решить систему линейных уравнений с трехдиагональной матрицей методом прогонки?

21.11.2012, 22:01. Показов 28494. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана матрица:

x0+2x1 =2
3x0+5x1+3x2 =4
2x1+3x2+3x3 =3
x2+x3+3x4=3
x3+x4 =1

Как сделать решение в матлабе?при помощи excel
Я не понимаю
 Комментарий модератора 
Внимательнее выбирайте разделы для размещения тем!
Перемещено.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2012, 22:01
Ответы с готовыми решениями:

Решить систему линейных уравнений методом Крамера
Господа программисты как это сделать? Я полный ноль в программировании и не представляю что нужно сделать тут! Если кто-либо может помочь...

Методом Гаусса решить систему линейных уравнений
\begin{cases} 2x_1+4x_2+3x_3=-3 \\ x_1-2x_2-5x_3=0 \\ 2x_1+3x_2+x_3=6 \end{cases}

решить систему линейных уравнений методом Ньютона
Скажите можно решить систему линейных уравнений методом Ньютона? Мне задали задание к курсовой работе по информатике, а я никак немогу...

16
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
22.11.2012, 09:32
Заяц, уж не знаю, что значит "метод прогонки", но в матлабе решить систему не сложно!
Для этого нужно выписать матрицу коэффициентов и вектор-столбец правой части
(как тут: линейные системы )
А чтобы матрицу было удобней составлять допишем нулевые элементы, получим систему:
Code
1
2
3
4
5
1*x0 + 2*x1 + 0*x2 + 0*x3 + 0*x4 =  2;
3*x0 + 5*x1 + 3*x2 + 0*x3 + 0*x4 =  4;
0*x0 + 2*x1 + 3*x2 + 3*x3 + 0*x4 =  3;
0*x0 + 0*x1 + 1*x2 + 1*x3 + 3*x4 =  3;
0*x0 + 0*x1 + 0*x2 + 1*x3 + 1*x4 =  4;
Теперь решаем систему:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clear
 
% матрица коэф-тов
A = [ 1 2 0 0 0
        3 5 3 0 0
        0 2 3 3 0
        0 0 1 1 3
        0 0 0 1 1];
 
% вектор-столбец правой части
b = [2
       4
       3
       3
       4];
 
% решение с помошью обратного деления:
x = A\b
Но не торопись. Как ты знаешь, система может иметь одно решение, иметь бесконечное множество решений и вовсе не иметь решений.
Чтобы это узнать, нужно рассчитать определитель и ранг матрицы коэфф-тов.
Если определитель равен нулю (на ноль делить низзя!) или ранг матрицы больше ее размера
(неизвестных больше чем уравнений), то решений нет.
Если определитель не равен нулю, но ранг маньше размера (если размер матрицы NxN, а ранг r<N), то получим бесконечное число решений, т.е. получим вектор длинны r значений одних переменных, а остальные будут выражаться, например: у матрицы 3х3 ранг получился равен 2, то x = [x0; 2*x0+1; x0+5], вместо x0 можно подставить любое число и получить решение (поэтому и говорят, что их бесконечно много).
И наконец, если определитель не равен нулю и ранг равен размеру, то имеем единственное решение.
С учетом всего вышесказанного можно записать:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
clear
 
% матрица коэф-тов
A = [ 1 2 0 0 0
        3 5 3 0 0
        0 2 3 3 0
        0 0 1 1 3
        0 0 0 1 1];
% вектор-столбец правой части
b = [2
       4
       3
       3
       4];
% вычисляем определитель
D = det(A);
% вычисляем ранг
r = rank(A);
% размер матрицы
N = size(A,1);
 
if D == 0 % если определитель равен нулю
      disp('Определитель равен нулю.')
      disp('Решений нет.')
elseif r > N % если ранг больше размера
      disp('Переменных больше, чем уравнений.')
       disp('Решений нет.')
elseif r<N % если пределитель меньше размера
      disp('Имеем бесконечное число решений')
else % и если все как положено
      x = A\b
end
Что неясно - спрашивай!
3
 Аватар для Sabbat
135 / 22 / 1
Регистрация: 19.10.2012
Сообщений: 42
23.02.2013, 11:19
Лучший ответ Сообщение было отмечено как решение

Решение

Один из вариантов прогонки, для данного вопроса.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
clc, clear all
% MX=V, M - трехдиагональная матрица
M =[1 2 0 0 0
    3 5 3 0 0
    0 2 3 3 0 
    0 0 1 1 3   
    0 0 0 1 1]     
V=[2 4 3 3 1]'
 
A=diag(M,-1); % - поддиагональ матрицы коэффициентов
B=diag(M);    % - главная диагональ матрици коэффициентов
C=diag(M,1);  % - наддиагональ матрицы коэффициентов
D=V;          % - вектор правой части системы
n=length(B);
Cz=zeros(1,n);
Dz=zeros(1,n);
Cz(1)=C(1)/B(1);
for j=1:n-2
    Cz(j+1)=C(j+1)/(B(j+1)-A(j)*Cz(j));
end
Dz(1)=D(1)/B(1);
for j=1:n-1
    Dz(j+1)=(D(j+1)-A(j)*Dz(j))/(B(j+1)-A(j)*Cz(j));
end
X(n)=Dz(n);
for j=n-1:-1:1
    X(j)=Dz(j)-Cz(j)*X(j+1);
end
X'             % - вектор-столбец решений
2
9 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 3
10.05.2014, 10:49
вот самый точный метод прогонки.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
clc,clear all
A=xlsread('lab_1.xls',1,'A1:D4')
b=xlsread('lab_1.xls',1,'E1:E4')
 
D = det(A);
% вычисляем ранг
r = rank(A);
% размер матрицы
N = size(A,1);
 
if D == 0 % если определитель равен нулю
      disp('Определитель равен нулю.')
      disp('Решений нет.')
elseif r > N % если ранг больше размера
      disp('Переменных больше, чем уравнений.')
       disp('Решений нет.')
elseif r<N % если пределитель меньше размера
      disp('Имеем бесконечное число решений')
else % и если все как положено
      x = A\b
end
 [n,n]=size(A);
%z=zeros(n,1);
%A=[z,A,z];
P(1)=1;% от сюда
Q(1)=1;
for i=2:n-1 
zn=-A(i,i)-A(i,i-1)*P(i-1);
P(i)=A(i,i+1)/zn;
Q(i)=(A(i,i-1)*Q(i-1)-b(i))/zn;
end
Q(n)=(A(n,n-1)*Q(n-1)-b(n-1))/A(n,n)-A(n,n-1)*P(n-1);
x(n)=Q(n);
for i=n-1:-1:1
x(i)=P(i)*x(i+1)+Q(i);
end % до сюда, ручное просчитывание, по тому ,как в теории
x1=linsolve(A,b),%проверка
xlswrite('lab_1.xls',x,2,'A1:A4')
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
10.05.2014, 15:50
Yusaki, большое спасибо!
0
0 / 0 / 0
Регистрация: 06.07.2014
Сообщений: 6
10.07.2014, 08:41
а можно не большое пояснение к строчкам с 14 по 28? ооочень нужно)
0
Всегда онлайн
 Аватар для Maikl2020
49 / 49 / 10
Регистрация: 13.04.2014
Сообщений: 1,445
06.10.2014, 12:13
Yusaki, Здравствуйте, пожалуйста вы можете сказать, метод прогонки для нелинейный дифференциальный уравнения в MATLAB ест?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
06.10.2014, 12:24
Цитата Сообщение от Maikl2020 Посмотреть сообщение
Здравствуйте, пожалуйста вы можете сказать, метод прогонки для нелинейный дифференциальный уравнения в MATLAB ест?
Метод прогонки это частный случай метода Гаусса для трех-диагональных СЛАУ.
Если ваше ДУ аппроксимацией сводится к такой системе,то можно решать прогонкой.
0
Всегда онлайн
 Аватар для Maikl2020
49 / 49 / 10
Регистрация: 13.04.2014
Сообщений: 1,445
06.10.2014, 12:29
S_el, Ест где нибудь четкий например, что я тоже сводил свою уравнению к такой системе.
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
06.10.2014, 13:03
Maikl2020, не путай системы линейных уравнений и диффур!
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
06.10.2014, 18:13
Цитата Сообщение от Maikl2020 Посмотреть сообщение
Ест где нибудь четкий например, что я тоже сводил свою уравнению к такой системе.
далеко не каждое уравнение ДУ в ЧП можно свести к трех-диагональной СЛАУ.
Теорию можете прочитать в : Самарский А.А. - Теория разностных схем.
1
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
04.12.2015, 15:55
Yusaki, ваш "самый точный метод прогонки" неправильно реализован.
Вот исправленный вариант:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function X= mSh(A,B)
 
[n,n]=size(A);
 
P = zeros(1,n-1);
Q = zeros(1,n);
zn = A(1);
i = 1;
Q(1) = B(1)/zn;
 
while(i<n)
      if (i==1)
          P(i) = -A(i,i+1)/zn;
      else
        zn = A(i,i)+A(i,i-1)*P(i-1);
        P(i) = -A(i,i+1)/zn;
        Q(i)= (B(i)-A(i,i-1)*Q(i-1))/zn;
      end
        i=i+1;
end
zn =  A(n,n)+A(n,n-1)*P(n-1);
Q(n)=(B(n)-A(n,n-1)*Q(n-1))/zn;
X(n)=Q(n);
for i=n-1:-1:1
X(i)=P(i)*X(i+1)+Q(i);
end 
 
end
1
0 / 0 / 0
Регистрация: 20.12.2019
Сообщений: 123
28.11.2020, 22:14
код строит только матрицу но нет решения
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
28.11.2020, 22:24
Invisability, решение записывается в вектор X. Онлайн-компилятор - https://ideone.com/GACbLk

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
A = [ 1 2 0 0 0
        3 5 3 0 0
        0 2 3 3 0
        0 0 1 1 3
        0 0 0 1 1];
% вектор-столбец правой части
B = [2
     4
     3
     3
     4];
 
[n,n]=size(A);
 
P = zeros(1,n-1);
Q = zeros(1,n);
zn = A(1);
i = 1;
Q(1) = B(1)/zn;
 
while(i<n)
      if (i==1)
          P(i) = -A(i,i+1)/zn;
      else
        zn = A(i,i)+A(i,i-1)*P(i-1);
        P(i) = -A(i,i+1)/zn;
        Q(i)= (B(i)-A(i,i-1)*Q(i-1))/zn;
      end
        i=i+1;
end
zn =  A(n,n)+A(n,n-1)*P(n-1);
Q(n)=(B(n)-A(n,n-1)*Q(n-1))/zn;
X(n)=Q(n);
for i=n-1:-1:1
X(i)=P(i)*X(i+1)+Q(i);
end 
 
disp(X)
Вывод:
Code
1
6.28571  -2.14286  -1.38095   3.80952   0.19048
1
0 / 0 / 0
Регистрация: 20.12.2019
Сообщений: 123
28.11.2020, 22:37
Здравствуйте. А как можно сделать чтоб было подробное решение с промежутачными расчетами(как на сайтах по калькулятору матриц) ?

Добавлено через 1 минуту
там все правильно было, я не вызвал функцию в консоль mSh(A,B)
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
28.11.2020, 22:50
Цитата Сообщение от Invisability Посмотреть сообщение
как можно сделать чтоб было подробное решение с промежутачными расчетами(как на сайтах по калькулятору матриц) ?
Выводить на каждом шаге все нужные вам значения. Если это значение входит в состав длинного выражения - сохранять в отдельную переменную.
0
0 / 0 / 0
Регистрация: 20.12.2019
Сообщений: 123
08.12.2020, 13:57
Подскажите а куда вставить прогоночные коэффициенты n=5 a(i)=1, b(i)=2(i)-1. c(i)=1, d(i)=3(i)/2
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.12.2020, 13:57
Помогаю со студенческими работами здесь

Решить систему линейных уравнений матричным методом
Решить систему линейных уравнений x=b матричным методом. x-3y+z-13b+7c=16 2x-2y-9a+3b+4c=-12 -5x+2y-3z-15a+6b-4c=-6 ...

Решить систему линейных уравнений методом Гаусса
Здравствуйте! Дана задачка по численным: &quot;Решить систему линейных уравнений методом Гаусса&quot; У меня есть похожий код программы,...

Решить систему линейных уравнений вида Ax=b методом Зейделя
2)Решить систему линейных уравнений вида Ax=b методом Зейделя 6.9 0,0319 0,039 0,461 0,0191 6,0 0,0333 0,405 0,0134 0,0205 5,1...

Решить систему линейных уравнений методом обратной матрицы
Подскажите пожалуйста, вот задание Решите систему линейных уравнений методом обратной матрицы 4y-6x-21=0 z-3y+2x=-5 4x+y-z+10=0 ...

Решить любую систему линейных уравнений методом Гаусса
создать программу, которая решает любую систему линейных уравнений методом гаусса с выбором главного элемента в столбце.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru