Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 04.11.2014, 00:03   #1 (permalink)
Charlotte
Member
 
Регистрация: 20.04.2014
Сообщений: 63
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation Схема Халецкого

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

задание:
1.png

и
2.png


заранее огромное спасибо за помощь!!!
Charlotte вне форума   Ответить с цитированием

Старый 04.11.2014, 00:03
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Обязательно обратите внимание на аналогичные топики

Что это за схема?
Схема ПНТ
Схема STK 463
Схема в EWB
Схема

Старый 04.11.2014, 16:34   #2 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 766
Записей в дневнике: 1
Сказал(а) спасибо: 11
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

Вот полноценный метод Халецкого реализованный на 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[i];
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[i] := 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[i];
error := Max(error, Abs(X[i] - 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[i] := 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[i]);
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;
Gruvi вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 21:17.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.