• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Схема Халецкого

Charlotte

Новые
Регистрация
20 Апр 2014
Сообщения
63
Реакции
0
Баллы
0
Схема Халецкого

доброй ночи, уважаемые форумчани. Помогите, пожалуйста, решить задание с помощью схемы Халецкого.

задание:
1.png.webp

и
2.png.webp


заранее огромное спасибо за помощь!!!
 
Вот полноценный метод Халецкого реализованный на Delphi.
procedure TForm1.Button1Click(Sender: TObject);
type
Vector = array of Double;
Matrix = array of Vector;

procedure Holetsky(n : Integer; A0 : Matrix; B0, X : Vector; var Error : Double);
var
i, j, m, k, p : Byte;
s, e, maxVal : Double;
A : Matrix;
begin
SetLength(A, n + 1, n + 1);
for i := 0 to pred(n) do
for j := 0 to pred(n) do
A[i, j] := A0[i, j];

for i := 0 to Pred(n) do A[i, n] := B0;
for i := 0 to Pred(n) do
begin
maxVal := 0;
for j := i to Pred(n) do
if maxVal < Abs(A[i, j]) then
begin
maxVal := Abs(A[i, j]);
p := j;
end;

if p <> i then
begin
for j := 0 to n do A[n, j] := A[i, j];
for j := 0 to n do A[i, j] := A[p, j];
for j := 0 to n do A[p, j] := A[n, j];
end;
end;

for j := 1 to n do A[0, j] := A[0, j] / A[0, 0];
for m := 1 to Pred(n) do
begin
for i := m to Pred(n) do
begin
s := 0;
for k := 0 to Pred(m) do s := s + A[i, k] * A[k, m];
A[i, m] := A[i, m] - s
end;
for j := m + 1 to n do
begin
s := 0;
for k := 0 to Pred(m) do s := s + A[m, k] * A[k, j];
A[m, j] := (A[m, j] - s) / A[m, m]
end;
end;
X[n-1] := A[n-1, n];
for i := n - 2 downto 0 do
begin
s := 0;
for k := i + 1 to Pred(n) do s := s + A[i, k] * X[k];
X := A[i, n] - s
end;

error := 0;
for i := 0 to Pred(n) do
begin
s := 0;
for j := 0 to Pred(n) do
if i = j then
s := s + (A0[i, j] + 1) * X[j]
else
s := s + A0[i, j] * X[j];
s := s - B0;
error := Max(error, Abs(X - s));
end;
SetLength(A, 0, 0);
end;

var
A : Matrix;
B, X : Vector;
err : Double;
i, j, n : Integer;
begin
n := StrToInt(Edit3.Text);
SetLength(A, n + 1, n + 1);
SetLength(B, n + 1);
for i := 0 to n - 1 do
begin
for j := 0 to n - 1 do
begin
A[i, j] := StrToFloat(sgA.Cells[j, i]);
end;
B := StrToFloat(sgB.Cells[0, i]);
end;

SetLength(X, n + 1);
Holetsky(N,A,B,X,err);

for i := 0 to Pred(n) do
sgRes.Cells[0, i] := FloatToStr(X);
ShowMessage(Format('Error = %f', [Err]));

SetLength(X, 0);
SetLength(B, 0);
SetLength(A, 0, 0);
end;

// При создании формы заполняю вектор B
procedure TForm1.FormCreate(Sender: TObject);
begin
sgB.Cells[0, 0] := FloatToStr(4*sin(4));
sgB.Cells[0, 1] := FloatToStr(5*(sin(4) - cos(4)));
sgB.Cells[0, 2] := FloatToStr(7*(cos(4) + sin(4)));
sgB.Cells[0, 3] := FloatToStr(3*sin(4));
end;
 
Назад
Сверху