Главная Регистрация Вход Электротермические Установки и Системы Суббота, 27.05.2017, 20:31
  Решение СЛАУ в Delphi - Форум Пишите нам на el-03@mail.ru | Приветствую Вас Гость | RSS

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Программирование и проектирование » Языки программирования » Решение СЛАУ в Delphi
Решение СЛАУ в Delphi
FedinMAДата: Суббота, 26.04.2008, 21:52 | Сообщение # 1
Асс. каф. ФЭМАЭК
Группа: Модераторы
Сообщений: 227
Награды: 1
Репутация: 11
Статус: Offline
Поскольку с решением СЛАУ при написании программ сталкиваешься довольно часто, надо бы обсудить этот вопрос. Особенно интересует решение СЛАУ высокого порядка, в т.ч. плохообусловленной. Сам обычно решаю методом Гаусса.
Вот фрагмент программы, написанной в прошлом году:

procedure TForm1.Button1Click(Sender: TObject);
var
System, Result: TStringList;
i, j, s, n, p: integer;
x: array[1..2000] of real; // решение системы
summa, k: real;
begin
System:=TStringList.Create; Result:=TStringList.Create;
System.LoadFromFile('input.txt');
// размерность матрицы
n:=StrtoInt(System.Strings[0]);
Gauge1.MaxValue:=(n-1)*2;
// прямой ход
for s:=1 to n-1 do
begin
Gauge1.Progress:=s;
for i:=s+1 to n do
begin
if StrtoCh(System.Strings[i],s)<>0 then begin
k:=StrtoCh(System.Strings[s],s)/StrtoCh(System.Strings[i],s);
for j:=s to n+1 do
System.Strings[i]:=ChIntoStr(System.Strings[i],StrtoCh(System.Strings[i],j)*k-StrtoCh(System.Strings[s],j),j);
end;
end;
end;
System.SaveToFile('treug_matr.txt');

x[n]:=StrtoCh(System.Strings[n],n+1)/StrtoCh(System.Strings[n],n);
p:=0;
// обратный ход
for s:=n-1 downto 1 do
begin
p:=p+1;
Gauge1.Progress:=Gauge1.Progress+p;
summa:=0;
for j:=s+1 to n do
summa:=summa+StrtoCh(System.Strings[s],j)*x[j];
if StrtoCh(System.Strings[s],s)<>0 then
x[s]:=(StrtoCh(System.Strings[s],n+1)-summa)/StrtoCh(System.Strings[s],s) else x[s]:=0;
end;
for i:=1 to n do
Result.Add(FloattoStr(x[i]));
Result.SaveToFile('output.txt');
end;

Поскольку программа неприменима для решения СЛАУ высокого порядка из-за слишком большого времени счета, закончена она так и не была, однако, все работает.

Саму программу можно скачать по ссылке Гаусс.rar

Функции StrtoCh и ChIntoStr осуществляют выделение и вставку числа из строк списка, в который загружаются данные из файла с исходной матрицей, правой частью и размерностью или из которого происходит сохранение результатов в файл соответственно.


Учиться надо так, чтобы это было тебе в радость.
 
JuKOДата: Понедельник, 28.04.2008, 08:33 | Сообщение # 2
Аспирант
Группа: Модераторы
Сообщений: 157
Награды: 2
Репутация: 7
Статус: Offline
а как решить систему уравнений с уравнениями вида A*exp(Bx)*sin(Cx)=В ?

Jedem Das Seine
 
Форум » Программирование и проектирование » Языки программирования » Решение СЛАУ в Delphi
Страница 1 из 11
Поиск:

 

Copyright DEADalus © 2008-2017 Случайным встречам посвящается...
Яндекс цитирования