Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860

Решение системой линейных уравнений с одной переменной

16.11.2018, 12:39. Показов 3377. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как можно найти корни уравнения с одной переменной системой автоматически при этом так, чтобы система не создавала к примеру какую-нибудь временную "табличку-массив памяти" для уравнений типа y=kx+b, где будет она для начала принимать решение иксов и приписывать к нему ответ y. То есть так чтобы система не создавала к примеру временно одномерный массив? элементы которого будут являться матрицами 2*1, где он будет к каждому иксу приписывать значение y.

Вопрос у меня в том, как это прописать в коде так, чтобы это все происходило без использования и выделения памяти.

У меня в моем случае это будет матрица, которая теоретически фактических границ по своим размерностям иметь не будет. Она уже будет приведена к треугольному виду (под главной диагональю будут уже нули). И мне нужно будет сначала решить самое нижнее уравнение с одной переменной. Потом заменить это найденное значение в уравнение выше....и т.д.

Но мне нужно это желательно так сделать чтобы у меня система не создавала временных "таблиц-массивов памяти" с какой-то дозой переменных

b11 b12 b13 b14 ... b1(n+1)
b21 b22 b23 b24 ... b2(n+1)
b31 b32 b33 b34 ... b3(n+1)
...
bs1 bs2 bs3 bs4 ... bs(n+1)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.11.2018, 12:39
Ответы с готовыми решениями:

Решение уравнений с одной переменной
Пожалуйста, я почти сдал сессию, но остались эти задания и мне очень нужна помощь вы их выполнении. Задание Написать программу...

Решение уравнений с одной переменной
Пожалуйста, я почти сдал сессию, но остались эти задания и мне очень нужна помощь вы их выполнении. Задание Написать программу...

Решение уравнений с одной переменной
Задания к зачету помогите кто может пжл) Задание 1Отделите корни заданного уравнения, пользуясь графическим методом (схематически, на...

34
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
16.11.2018, 12:56
Цитата Сообщение от xamelione25 Посмотреть сообщение
У меня в моем случае это будет матрица, которая ... уже будет приведена к треугольному виду (под главной диагональю будут уже нули).
Посмотрите в сторону метода Гаусса-Жордана. Часть от Гаусса у вас уже будет (треугольный вид), выполнив часть от Жордана (приведя матрицу к диагональному виду) в (n+1) столбце получите готовые решения.
На самом деле делить процесс на треугольный вид и следующий за ним диагональный необязательно, их можно смело объединить.

Добавлено через 4 минуты
Можете посмотреть обсуждение здесь: Решение СЛУ с выбором главного элемента по столбцу (Python -> Pascal)
Если используете расширенную матрицу и не нужно получать обратную, то код в циклах существенно упрощается до операций над единственной расширенной матрицей.
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
16.11.2018, 13:00  [ТС]
bormant, Я уже создал словесную блок-схему

Кликните здесь для просмотра всего текста
1. Запрос системы на ввод значений S и N (они не обязательно должны быть равны);
2. Ввод S - количество уравнений в системе;
3. Ввод N - количество неизвестных переменных;
4. Формирование системой количества переменных n+1 (единица — это ввод того значения, чему равняется то или иное уравнение), то есть создание новых переменных (b11 b12 b13 b14 ... b1(n+1)), ввод которых система будет далее запрашивать;
5. Запрос системы на ввод последовательно в строку через пробел значений всех переменных, которые она ранее в п.4 сформировала (b11 b12 b13 b14 ... b1(n+1)). Количество запросов от системы на ввод значений будут соответствовать количеству уравнений S, например
b11 b12 b13 b14 ... b1(n+1)
b21 b22 b23 b24 ... b2(n+1)
b31 b32 b33 b34 ... b3(n+1)
...
bs1 bs2 bs3 bs4 ... bs(n+1)
6. Далее программа находит максимальный элемент из всех элементов первого столбца (индексы которых заканчиваются на 1 (из b11 b21 b31 ... bs1). И меняет это уравнение с максимальным этим элементом местами с первым уравнением (так чтобы оно стало на первое место). То есть фактически меняет местами первые индексы всем значениям между элементами первой строки и элементами строки, в которой имеется тот максимальный элемент в первом столбце. Если данное максимальное число уже находится в первой строке, то программа переходит к п.7
7. После обмена строк местами, программа домножает на требуемое число каждую нижележащюю строку так, чтобы все первые элементы этих строк стали равны первому элементу первой строки. Далее вычитает из всех строк (от 2 до S) первую строку, чтобы во всех этих строках первые члены стали равны 0.
8. Далее программа производит аналогичные итерации как в 6 и 7 пунктах с элементами второго столбца кроме первой строки. Находит строку с максимальным элементом, ставит эту строку на место той строки, которая по своему номеру соответствует номеру рассматриваемого столбца, после домножает все ниже находящиеся строки, и вычитает из всех строк (с 3 и до S) вторую строку.
9. Аналогичные итерации буду происходить до тех пор, пока в матрице в последней строке все числа не станут нулями кроме последних двух. То есть до тех пор, пока все числа, находящиеся ниже главной диагонали, не примут значение равное 0.


Но я запнулся на дальнейшем решении.......ну допустим я уже привел по этой блок-схеме (см. выше) и как мне найти иксы.....но желательно без того, что указано в самом вопросе

Добавлено через 2 минуты
bormant, Короче что мне нужно сделать чтобы система мне смогла решить уравнение вида aX+b=c----------то есть уравнение с одной переменной
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
16.11.2018, 13:09  [ТС]
bormant, У меня короче лаба: нужно сделать решение на паскале для СЛАУ методом Гаусса (обратным и прямым).
Цитата из методички...алгоритм прямого хода метода Гаусса фактически реализуется следующим образом. На первом шаге в первом столбце отыскивается максимальный по модулю элемент. Пусть, например, это будет элемент ai1. Поменяем i-е и первое уравнение местами, так что максимальный элемент окажется в первой строке и первом столбце. Затем алгоритм исключения применяется ко всем уравнениям, кроме первого (фактически это будет i-е уравнение). На следующем шаге мы должны исключить x2 во всех уравнениях, кроме первых двух. Рассмотрим во втором столбце все элементы, начиная со второго, и выберем из них максимальный по модулю элемент. Пусть это будет ak2. Поменяем местами второе и k-е уравнение, так что элемент ak2 станет теперь ведущим элементом, который расположен во второй строке и втором столбце. Исключим x2 во всех уравнениях, кроме первых двух. Аналогичный процесс повторяется до тех пор, пока матрица системы не примет треугольный вид.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
16.11.2018, 13:10
Если есть матрица, приведенная к треугольному виду(вместе со свободными членами), то нужно просто выполнить обратный ход
a-матрица коэффициентов
b-массив свободных членов
Pascal
1
2
3
4
5
6
7
8
9
10
11
writeln('Корни системы:');
x:=b[n]/a[n,n];//последний(нижний) корень
writeln('x[',n,']=',x:0:2);
for k:=n-1 downto 1 do//идем снизу вверх
 begin
  r:=0;
  for j:=k+1 to n do
  r:=r+a[k,j]*x;
  x:=(b[k]-r)/a[k,k];//считаем корень
  writeln('x[',k,']=',x:0:2);//выводим
 end;
1
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
16.11.2018, 13:22  [ТС]
Puporev, Видимо я туплю щас.....а этот метод (гаусса) вообще применим к матрицам неквадратного вида. У меня вопрос касаемый главной диагонали автоматический всплывает....как она там формируется эта диагональ тогда??
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
16.11.2018, 13:26
Вообще система с n неизвестными должна иметь n уравнений. Уравнение должно иметь n коэффициентов, те неизвестные которых нет в уравнении имеют коэффициент = 0.
2x1+x3=5-> 2x1+0x2+x3=5
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
16.11.2018, 13:27  [ТС]
Puporev, все въехал - вопрос аннулирован ...ок спс
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
16.11.2018, 13:44
Цитата Сообщение от xamelione25 Посмотреть сообщение
уравнение вида aX+b=c
Немного не того вида, из приведенного получится aX+(b-c)=0 или aX = (c-b)
А система строится из n уравнений с n неизвестными:
{a11x1 + ... a1nxn = b1
{...
{an1x1 + ... annxn = bn

Добавлено через 2 минуты
А в методичке вам про обратный ход метода Гаусса забыли написать.

Добавлено через 2 минуты
А модификация Жордана хороша тем, что на прямой и обратный ход обработку матрицы делить не надо, обратный ход выполняется в той же матрице, в столбце свободных членов сразу получаем решение.
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
16.11.2018, 13:58  [ТС]
bormant, Так вот я как раз и хочу для начала просто найти ответ на уравнение (см. пример ниже)

2 3 4 5 8 1
0 5 9 5 7 6
0 0 4 2 2 1
0 0 0 5 1 7
0 0 0 0 3 6

так вот я и хочу чтобы мне программа просто нашла сначала то что X5=2
Ну примерно как-то так: из 6 вычитается все то, что является свободными членами (без иксов), а потом делится на тот коэффициент которые стоит рядом с иксом (может быть это чуть чуть неправильно и не по-русски)

Потом его подставила в 1*2 - то есть 4е уравнение уже стало однопеременным итд и по мере нахождения иксов осуществляла их вывод на экран
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
16.11.2018, 14:00
Так я Вам это и написал.
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
16.11.2018, 14:01  [ТС]
Puporev, ну вот я в это параллельно и въезжаю ......идет обработка предоставленной информации моим мозгом.....ожидание)))))
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
16.11.2018, 14:30
IПоследнюю строку разделим на элемент главной диагонали (3). Вычтем
из 4-й строки 5-ю, умноженную на 1;
из 3-й строки 5-ю, умноженную на 2;
из 2-й строки 5-ю, умноженную на 7;
из 1-й строки 5-ю, умноженную на 8.
От x5 избавились, проделаем то же самое с 4 по 1 строку.
Получили в последнем столбце решения для каждого из x.
Что-то это напоминает? Обратный ход по Гауссу? Да и с прямым просто один в один
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
16.11.2018, 14:32  [ТС]
bormant, Идет обработка предоставленной информации мозгом ... Спасибо за предоставленную информацию...пожалуйста подождите)))
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
16.11.2018, 15:33
Лучший ответ Сообщение было отмечено xamelione25 как решение

Решение

Если из Решение СЛУ с выбором главного элемента по столбцу (Python -> Pascal) выкинуть не относящееся к этой теме, всего-то и останется:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{$N+,E-}
const n=5; eps=1e-37;
type
  TFloat = Double;
  TMatrix = array [1..n,1..n+1] of TFloat;
 
function mGauss(var a: TMatrix): Boolean;
var
  i, j, k: Integer; t: TFloat;
begin
  mGauss:=False;
  for k:=1 to n do begin
    t:=a[k,k]; if Abs(t)<eps then Exit;
    for j:=n+1 downto k do a[k,j]:=a[k,j]/t;
    for i:=1 to n do if i<>k then begin
      t:=-a[i,k]; for j:=k to n+1 do a[i,j]:=a[i,j]+t*a[k,j];
    end;
  end;
  mGauss:=True;
end;
Pascal
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const
  a: TMatrix = (
    (2, 3, 4, 5, 8, 1),
    (0, 5, 9, 5, 7, 6),
    (0, 0, 4, 2, 2, 1),
    (0, 0, 0, 5, 1, 7),
    (0, 0, 0, 0, 3, 6));
var i, j: Integer;
begin
  WriteLn('A =');
  for i:=1 to n do begin
    for j:=1 to n+1 do Write(a[i,j] :8:0); WriteLn;
  end;
  WriteLn('X =');
  if mGauss(a) then begin
    for i:=1 to n do Write(a[i,n+1] :8:4); WriteLn;
  end else WriteLn('Решение не найдено');
end.
Причем это полное решение, вместе с прямым и обратным ходом.
1
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
17.11.2018, 14:04  [ТС]
bormant, Объясни пожалуйста:

1. Объясни значение того что написано во второй строке кода
Цитата Сообщение от bormant Посмотреть сообщение
Pascal
1
const n=5; eps=1e-37;
Почему здесь ты задаешь именно 5....тем более мы же ранг матрицы сами задаем в начале вручную???
И какую роль здесь выполняет
Pascal
1
eps=1e-37
2. И почему ты именно так записал
Цитата Сообщение от bormant Посмотреть сообщение
Pascal
1
2
TFloat = Double;
* TMatrix = array [1..n,1..n+1] of TFloat;
???
Здесь есть какая-та принципиальная разница в данной форме написания или нет?
Или такое написание тоже тоже допустимо... или не желательно
Pascal
1
TMatrix = array [1..n,1..n+1] of Double;
???
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
17.11.2018, 18:26
Цитата Сообщение от xamelione25 Посмотреть сообщение
Почему здесь ты задаешь именно 5
В примере из сообщения #10 была матрица коэффициентов 5х5, соответственно расширенная 5х6 (n x (n+1)).
Цитата Сообщение от xamelione25 Посмотреть сообщение
И какую роль здесь выполняет
Pascal
1
eps=1e-37;
Роль малой величины, меньше которой значение считаем за 0. Сравнивать действительные числа на равенство, в том числе и с 0 -- плохая идея.
Pascal
13
  t:=a[k,k]; if Abs(t)<eps then Exit;
По 2: этот тип используется в двух местах -- в объявлении массива и для объявления временной переменной t внутри функции mGauss.
Pascal
type
  TFloat = Double;
var
  TMatrix = array [1..n,1..n+1] of TFloat;
...
function mGauss(var a: TMatrix): Boolean;
var t: TFloat;
По смыслу они должны иметь одинаковый тип. Когда используется отдельно объявленный TFloat, достаточно задать желаемый тип только в одном месте, и программа останется корректной:
Pascal
1
2
3
TFloat = Double;
TFloat = Single;
TFloat = Extended;
Иначе придется вносить изменения и в объявление массива, и в объявление временной переменной t внутри функции, что легко забыть.
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
17.11.2018, 20:21  [ТС]
bormant,
В примере из сообщения #10 была матрица коэффициентов 5х5, соответственно расширенная 5х6 (n x (n+1))
А смысл в ней вообще .... Мы же в начале работы программы сами вручную задаём ранг матрицы

Добавлено через 1 час 22 минуты
bormant, Я просто не пойму функциональной целесообразности в ней вообще....я ради интереса вообще проверял-тестировал эту прогу на матрице 3*3
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
17.11.2018, 21:45
Цитата Сообщение от xamelione25 Посмотреть сообщение
А смысл в ней вообще .... Мы же в начале работы программы сами вручную задаём ранг матрицы
В моем минимальном примере ничего такого нет ;-)
А смысл простой -- тема в общем разделе паскаля, но не в любом трансляторе паскаля есть динамические массивы, поддержанные на уровне языка. Поэтому код такой, который подходит для любых. Это не значит, то нельзя написать универсально реализацию динамического массива, но тогда за деревьями можно не увидеть леса. А в таком виде ничего лишнего -- только основная идея.
0
 Аватар для xamelione25
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,860
17.11.2018, 21:52  [ТС]
bormant, то есть ты его просто обобщил этот код (написал его в такоей форме)...чтобы он подходил под все версии паскалей??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.11.2018, 21:52
Помогаю со студенческими работами здесь

Решение уравнений с одной переменной
Здравствуйте! Написала программу отделения корней методом Дихотомии (половинного деления). Не могу справиться с пунктами: Входные...

Программирование. Решение уравнений с одной переменной
Отделить корни скалярного уравнения. Решить уравнение методами, перечисленными ниже, с точностью . 1. Половинного деления; 2. Методом...

Решение уравнений с одной переменной методом Ньютона (метод касательных)
1. Отделить корни уравнения графическим способом. 2. Отделить корни уравнения аналитическим способом. 3. Уточнить один корень...

Задать системой линейных уравнений подпространство
В линейном пространстве L выбран базис e1, e2 , K, e(n) . Два его подпространства L1, L2 заданы системами линейных уравнений. Наибольший...

Решить приближенно уравнение Фредгольма, заменив его системой линейных уравнений
Имеется задачка: Решить приближенно уравнение Фредгольма, заменив его системой линейных уравнений. Интеграл заменить по формуле трапеций...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru