[Ответить в тред] Ответить в тред

03/04/16 - Набор в модераторы 03.04 по 8.04
26/03/16 - Конкурс: Помоги гомункулу обрести семью!
15/10/15 - Набор в модераторы 15.10 по 17.10


[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 83 | 2 | 9
Назад Вниз Каталог Обновить

Аноним 19/06/16 Вск 12:45:59  129987064  
14663295596160.jpg (56Кб, 1000x664)
Анон, выручай! Нужна программа на паскале, решающая систему алгебраических уравнений матричным методом. Нужен именно матричный. Скиньте, если кто делал когда-нибудь.
Аноним 19/06/16 Вск 12:47:43  129987172
Бамп.
Аноним 19/06/16 Вск 12:48:28  129987210
Бамп.
Аноним 19/06/16 Вск 12:49:34  129987271
Бамп.
Аноним 19/06/16 Вск 12:50:18  129987308
Бамп.
Аноним 19/06/16 Вск 12:52:19  129987422
Бамп.
Аноним 19/06/16 Вск 12:53:25  129987481
Бамп.
Аноним 19/06/16 Вск 12:54:36  129987558
Бамп.
Аноним 19/06/16 Вск 12:55:44  129987628
Бамп.
Аноним 19/06/16 Вск 12:57:29  129987736
Бамп.
Аноним 19/06/16 Вск 12:58:05  129987775
Бамп
Сколько уравнений?
Квадратные?Линейные?Показательные?
Аноним 19/06/16 Вск 12:58:57  129987831
Бамп.
Аноним 19/06/16 Вск 13:01:06  129987939
14663304667790.png (7Кб, 441x157)
>>129987775
Аноним 19/06/16 Вск 13:03:33  129988083
Бамп.
Аноним 19/06/16 Вск 13:04:06  129988111
Берешь, приводишь расширенную матрицу СЛУ к улучшенному диагональному виду (для этого реализуешь добавление к строке строки, умноженной на число и умножение строки на число), после чего сразу получаешь ответ.
Аноним 19/06/16 Вск 13:06:03  129988245
>>129988111
Я вообще не силен в погромировании, а особенно в паскале, которого я вообще почти не знаю.
Аноним 19/06/16 Вск 13:07:12  129988306
>>129987064 (OP)
без задней мысли вызывай lapack через ffi
Аноним 19/06/16 Вск 13:09:07  129988420
>>129988111
Алсо, нашёл такой код, но он заодно рассчитывает и по Гауссу. Но тут всё считается неправильно.
[code]Program Lin_yravneniya;

uses crt;

const N=4;

eps=0.00001; { all numbers less than eps are equal 0 }

type matr=array [1..n,1..n] of real;

mas=array [1..n] of real;

var

i,j: integer;

b,x: mas;

variant: byte;

a,c: matr;

dt: real;

imx,np: integer;

{ печать исходной и обратной матрицы }

procedure PrintMatr2 (m,m1: matr; n,nz,nd: integer);

var i,j: integer;

begin

for i:=1 to n do

begin

if (i=1) then write (np: 2,': ')

else write (' ');

for j:=1 to n do

write (m [i,j]: nz: nd); write (' ');

for j:=1 to n do

write (m1 [i,j]: nz: nd);

writeln;

end;

inc (np);

end;

procedure MultString (var a,b: matr; i1: integer; r: real);

var j: integer;

begin

for j:=1 to n do

begin

a [i1,j]:=a [i1,j] r;

b [i1,j]:=b [i1,j]
r;

end;

end;

procedure AddStrings (var а,b: matr; i1, i2: integer; r: real);

{ процедура прибавляет к i1 строке матрицы а i2-ю умноженную на r}

var j: integer;

begin

for j:=1 to n do

begin

a [i1,j]:=a [i1,j] +ra [i2,j] ;

b [i1,j]:=b [i1,j] +r
b [i2,j] ;

end;

end;

procedure MultMatr (a,b: matr; var c: matr);

var i,j,k: byte;

s: real;

begin

for i:=1 to n do

for j:=1 to n do

begin

s:=0;

for k:=1 to n do

s:=s+a [i,k] b [k,j] ;

c [i,j]:=s;

end;

end;

function sign (r: real): shortint;

begin

if (r>=0) then sign:=1 else sign:=-1;

end;

{
}

{
вычеркивание из матрицы строки и столбца }

procedure GetMatr (a: matr; var b: matr; m, i,j: integer);

var ki,kj,di,dj: integer;

begin

di:=0;

for ki:=1 to m-1 do

begin

if (ki=i) then di:=1;

dj:=0;

for kj:=1 to m-1 do

begin

if (kj=j) then dj:=1;

b [ki,kj]:=a [ki+di,kj+dj] ;

end;

end;

end;

{
метод Гаусса }

procedure gauss (a: matr; b: mas; var x: mas; n: integer);

Var k: byte;

m, s: real;
i,j:integer;
begin

{ приведение к треугольному виду}

For k:=1 to N-1 do

For i:=k+1 to n do

begin

m:=a [i,k] /a [k,k] ;

a [i,k]:=0;

For j:=k+1 to N do

a [i,j]:=a [i,j] -ma [k,j] ;

b :=b -m
b [k] ;

end;

{расчет неизвестных х в обратном порядке}

x [n]:=b [n] /a [n,n] ;

writeln;

writeln ('Вывод результатов решения системы уравнений методом Гаусса');

writeln ('x [',n,'] =',x [n]: 6: 2);

for i:= (n-1) downto 1 do

begin s:=0;

For j:=i+1 to n do

s:=s-a [i,j] x [j] ;

x :=(b +s) /a [i, i] ;

writeln ('x [', i,'] =',x : 6: 2);

end;

end;

{
матричный способ }

procedure matrica (a: matr; y: mas; n: integer);

var z,a0: matr;

imx,np: integer;
i,j:integer;
s: mas;

begin

for i:=1 to n do

begin

for j:=1 to n do z [i,j]:=0;

z [i, i]:=1;

end;

for i:=1 to n do

for j:=1 to n do

a0 [i,j]:=a [i,j] ;

for i:=1 to n do

begin

{ к i-ой строке прибавляем (или вычитаем) j-ую строку

взятую со знаком i-того элемента j-ой строки. Таким образом,

на месте элементова a [i, i] возникает сумма модулей элементов i-того

столбца (ниже i-ой строки) взятая со знаком бывшего элемента a [i, i],

равенство нулю которой говорит о несуществовании обратной матрицы }

for j:=i+1 to n do

AddStrings (a,z, i,j,sign (a [i, i])
sign (a [j, i]));

{ PrintMatr (a,b,n,6,1); }

{ прямой ход }

if (abs (a [i, i]) >eps) then

begin

MultString (a,z, i,1/a [i, i]);

for j:=i+1 to n do

AddStrings (a,z,j, i,-a [j, i]);

{ PrintMatr (a,b,n,6,1); }

end

else

begin

writeln ('Обратной матрицы не существует. ');

halt;

end

end;

{обратный ход: '); }

if (a [n,n] >eps) then

begin

for i:=n downto 1 do

for j:=1 to i-1 do

begin

AddStrings (a,z,j, i,-a [j, i]);

end;

{ PrintMatr (a,b,n,8,4); }

end

else writeln ('Обратной матрицы не существует. ');

MultMatr (a0,z,a);

writeln ('Начальная матрица, обратная к ней матрица: ');

PrintMatr2 (a0,z,n,7,3);

{
умножение обратной матрицы на столбец свободных членов }

for i:=1 to n do s :=0;

for i:=1 to n do

for j:=1 to n do

s :=s +z [i,j] y [j] ;

writeln ('Вывод результатов решения системы уравненй матричным способом');

for i:=1 to n do write (' ', s : 5: 2);

end;

begin {
тело программы }

clrscr;

writeln ('ввод матрицы коэффициентов при неизвестных х');

for i:=1 to N do

for j:=1 to N do

begin

write (' введите a [', i,',',j,'] => ');

read (a [i,j]);

end;

writeln ('ввод столбца свободных членов');

for i:=1 to N do

begin

write (' введите b [', i,'] => ');

read (b );

end;

writeln ('введите вариант ');

writeln (' 1 - решение системы линейных уравнений методом Гаусса ');

write (' 2 - решение системы линейных уравнений матричным методом => ');

readln (variant);

case variant of

1: gauss (a,b,x,n);

2: matrica (a,b,n);

else writeln ('неверно указан вариант');

end;

end.
[/code]
Аноним 19/06/16 Вск 13:09:47  129988450
>>129988420
Блять, чому [code][/code] не работает, было жи раньше.
Аноним 19/06/16 Вск 13:12:32  129988595
Бамп.
Аноним 19/06/16 Вск 13:15:12  129988759
Бамп.
Аноним 19/06/16 Вск 13:16:52  129988855
Бамп.
Аноним 19/06/16 Вск 13:17:22  129988876
>>129987939
solve(t(matrix(c(1.7,-1.8,1.9,-57.4,1.1,-4.3,1.5,-1.7,1.2,1.4,1.6,1.8,7.1,-1.3,-4.1,5.2),4,4)), c(10,19,20,10))
[1] 5.8105776 -0.2342377 8.0416907 0.2714081
Аноним 19/06/16 Вск 13:19:43  129989006
>>129988876
Што?
Аноним 19/06/16 Вск 13:22:48  129989196
>>129989006
это R, не обращай внимания.
Аноним 19/06/16 Вск 13:24:08  129989280
Бамп.
Аноним 19/06/16 Вск 13:27:44  129989495
Бамп.
Аноним 19/06/16 Вск 13:29:50  129989618
Бамп.
Аноним 19/06/16 Вск 13:31:47  129989745
Бамп.
Аноним 19/06/16 Вск 13:33:22  129989839
Бамп.
Аноним 19/06/16 Вск 13:36:11  129990024
Бамп.
Аноним 19/06/16 Вск 13:37:29  129990100
Бамп.
Аноним 19/06/16 Вск 13:38:41  129990180
Бамп.
Аноним 19/06/16 Вск 13:41:01  129990352
Бамп.
Аноним 19/06/16 Вск 13:42:54  129990468
Бамп.
Аноним 19/06/16 Вск 13:44:36  129990576
Бамп.
Аноним 19/06/16 Вск 13:48:52  129990862
Бамп.
Аноним 19/06/16 Вск 13:51:13  129991037
Бамп.
Аноним 19/06/16 Вск 13:52:41  129991152
Бамп.
Аноним 19/06/16 Вск 13:55:00  129991315
Бамп.
Аноним 19/06/16 Вск 13:57:19  129991484
Бамп.
Аноним 19/06/16 Вск 13:58:56  129991616
Бамп.
Аноним 19/06/16 Вск 14:02:12  129991863
Бамп.
Аноним 19/06/16 Вск 14:04:31  129992041
Бамп.
Аноним 19/06/16 Вск 14:07:58  129992276
Бамп.
Аноним 19/06/16 Вск 14:09:24  129992346
Бамп.
Аноним 19/06/16 Вск 14:10:55  129992456
Бамп.
Аноним 19/06/16 Вск 14:11:32  129992493
Бамп.
Аноним 19/06/16 Вск 14:11:54  129992515
Бамп.
Аноним 19/06/16 Вск 14:12:12  129992538
Бамп.
Аноним 19/06/16 Вск 14:15:00  129992725
Бамп.
Аноним 19/06/16 Вск 14:19:04  129993035
Бамп.
Аноним 19/06/16 Вск 14:21:16  129993197
Бамп.
Аноним 19/06/16 Вск 14:24:29  129993442
Бамп.
Аноним 19/06/16 Вск 14:27:48  129993688
Бамп.
Аноним 19/06/16 Вск 14:30:09  129993836
Бамп.
Аноним 19/06/16 Вск 14:31:20  129993912
Бамп.
Аноним 19/06/16 Вск 14:33:12  129994060
Бамп.
Аноним 19/06/16 Вск 14:35:46  129994234
Бамп.
Аноним 19/06/16 Вск 14:36:19  129994260
забыл уже всякие матаны, давно это было. так что за матричный метод? просто привести к верхней диагональной матрице и вывести результаты?
Аноним 19/06/16 Вск 14:37:23  129994345
>>129994260
Вот тут алгоритм хорошо расписан.
https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%82%D1%80%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4
Аноним 19/06/16 Вск 14:41:00  129994579
>>129987064 (OP)
считай определитель @ приводи к треугольному виду
Аноним 19/06/16 Вск 14:41:01  129994581
>>129994345
понял, вспомнил такое. и для какого числа уравнений тебе надо? для произвольного или конкретного?
Аноним 19/06/16 Вск 14:49:44  129995146
>>129994581
>>129987939
Аноним 19/06/16 Вск 14:50:03  129995167
>>129994579
Это Гаусс.
Аноним 19/06/16 Вск 14:56:30  129995588
Бамп.
Аноним 19/06/16 Вск 14:57:27  129995647
>>129987064 (OP)
За щеку тебе скинул, проверяй студентота.
Аноним 19/06/16 Вск 14:57:49  129995673
>>129995146
и че, ты хочешь чтоб бесплатно тебе запилили?
Аноним 19/06/16 Вск 14:57:58  129995682
>>129995647
Ладно.
Аноним 19/06/16 Вск 14:59:02  129995757
>>129995673
У кого-то есть мб, ведь не один я должен пилить хуйню на паскале.
Аноним 19/06/16 Вск 15:02:15  129996002
Бамп.
Аноним 19/06/16 Вск 15:02:28  129996014
>>129995757
ну так погугли нахождение обратной матрицы в паскале, запили туда умножение на столбец свободных членов и радуйся, хуйли тупой такой
Аноним 19/06/16 Вск 15:03:58  129996129
Бамп.
Аноним 19/06/16 Вск 15:06:02  129996274
сажи птушнику. бамп каждые две секунды. иди нахуй с двача, даже поиск юзнуть не можешь для задачи, которую среднестатистический пятиклассник в уме щелкает
Аноним 19/06/16 Вск 15:06:37  129996303
>>129996274
Да в садике решают, чего уж.
Аноним 19/06/16 Вск 15:07:10  129996348
Лол, тебе решить или таки прогу ?
Аноним 19/06/16 Вск 15:08:26  129996434
>>129996348
Прогу. Нахуй мне решать? Я бы и на бумаге мог решить, а не ебаться с паскалем.
Аноним 19/06/16 Вск 15:17:12  129997051
>>129996434
Тебе на мыло али и тут сойдёт ?
Аноним 19/06/16 Вск 15:19:38  129997197
>>129997051
Тут сойдёт.
Аноним 19/06/16 Вск 15:24:37  129997562
>>129997197
Через Гаусса, не работает при а) нуле в ячейке [1,1] б) при нуле в первом столбце и диагональной ячейке одновременно в одной строке;
лень было допиливать до этого.
Ввод: размер матрицы, строка + свободный член.
____________
type MATRIX = array [1..9, 1..10] of REAL;
var MA: MATRIX; i, j, k, T1, T2, N: inTEGER;
a, b : byte;
Y, Z, KORN : real;
KOEF, KOEFNIL:REAL;
KORNI: array [1..10] of real;
begin
for i:=1 to 10 do
KORNI:=0;
Read(n);
For I:=1 to n do
For J:=1 to n+1 do
read(MA[I, J]);
KOEF:=MA[1,1];
For I:=1 to n+1 do
MA[1,i]:=MA[1,i]/KOEF;
For I:=2 to n do
For J:=1 to I-1 do
If (MA[I,j]>0) or (MA[I,j]<0) then
begin
If KOEF=MA[1,1] then KOEF:=MA[J,J]/MA[I,J] else KOEF:=MA[J,J]/MA[I,J];
For K:=1 to N+1 do
MA[I,K]:=MA[I,K]-MA[J,K]/KOEF;
end;
For I:=1 to n do
begin
For J:=1 to 1+n do
write(MA[I, J], ' ');
writeln;
end;
WRITELN('КОНЕЧНАЯ МАТРИЦА');
For I:=2 to n do
begin
KOEF:=MA[i,i];
For J:=i to n+1 do
MA[I,J]:=MA[I,J]/KOEF;
end;
For I:=1 to n do
begin
For J:=1 to 1+n do
write(MA[I, J], ' ');
writeln;
end;
WRITELN('КОНЕЦ ПРОГРАММЫ: ОТДЕЛ ВЫВОДА КОРНЕЙ');
For I:=1 to N do KORNI:=MA[I, N+1];
For I:=1 to N do write('/ ', KORNI, ' / ');
writeln;
For I:=N-1 downto 1 do
For J:=I+1 to N do
KORNI:=(KORNI-MA[I,J]*KORNI[J]);
For I:=1 to N do write('/ ', KORNI, ' / ');
end.
Аноним 19/06/16 Вск 15:28:29  129997868
>>129997562
Это точно матричный метод? Похоже на Гаусса. Хотя.
Аноним 19/06/16 Вск 15:29:25  129997942
>>129997868
А, бля, сори, я слепой и не полностью прочитал ОП-пост.
Аноним 19/06/16 Вск 15:31:01  129998047
>>129997942
Эх.
Аноним 19/06/16 Вск 15:58:10  130000443

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 83 | 2 | 9
Назад Вверх Каталог Обновить

Топ тредов