Анон, выручай! Нужна программа на паскале, решающая систему алгебраических уравнений матричным методом. Нужен именно матричный. Скиньте, если кто делал когда-нибудь.
Бамп.
БампСколько уравнений? Квадратные?Линейные?Показательные?
>>129987775
Берешь, приводишь расширенную матрицу СЛУ к улучшенному диагональному виду (для этого реализуешь добавление к строке строки, умноженной на число и умножение строки на число), после чего сразу получаешь ответ.
>>129988111Я вообще не силен в погромировании, а особенно в паскале, которого я вообще почти не знаю.
>>129987064 (OP)без задней мысли вызывай lapack через ffi
>>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;vari,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;beginfor i:=1 to n dobeginif (i=1) then write (np: 2,': ')else write (' ');for j:=1 to n dowrite (m [i,j]: nz: nd); write (' ');for j:=1 to n dowrite (m1 [i,j]: nz: nd);writeln;end;inc (np);end;procedure MultString (var a,b: matr; i1: integer; r: real);var j: integer;beginfor j:=1 to n dobegina [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;beginfor j:=1 to n dobegina [i1,j]:=a [i1,j] +ra [i2,j] ;b [i1,j]:=b [i1,j] +rb [i2,j] ;end;end;procedure MultMatr (a,b: matr; var c: matr);var i,j,k: byte;s: real;beginfor i:=1 to n dofor j:=1 to n dobegins:=0;for k:=1 to n dos:=s+a [i,k] b [k,j] ;c [i,j]:=s;end;end;function sign (r: real): shortint;beginif (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;begindi:=0;for ki:=1 to m-1 dobeginif (ki=i) then di:=1;dj:=0;for kj:=1 to m-1 dobeginif (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 doFor i:=k+1 to n dobeginm:=a [i,k] /a [k,k] ;a [i,k]:=0;For j:=k+1 to N doa [i,j]:=a [i,j] -ma [k,j] ;b :=b -mb [k] ;end;{расчет неизвестных х в обратном порядке}x [n]:=b [n] /a [n,n] ;writeln;writeln ('Вывод результатов решения системы уравнений методом Гаусса');writeln ('x [',n,'] =',x [n]: 6: 2);for i:= (n-1) downto 1 dobegin s:=0;For j:=i+1 to n dos:=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;beginfor i:=1 to n dobeginfor j:=1 to n do z [i,j]:=0;z [i, i]:=1;end;for i:=1 to n dofor j:=1 to n doa0 [i,j]:=a [i,j] ;for i:=1 to n dobegin{ к i-ой строке прибавляем (или вычитаем) j-ую строкувзятую со знаком i-того элемента j-ой строки. Таким образом,на месте элементова a [i, i] возникает сумма модулей элементов i-тогостолбца (ниже i-ой строки) взятая со знаком бывшего элемента a [i, i],равенство нулю которой говорит о несуществовании обратной матрицы }for j:=i+1 to n doAddStrings (a,z, i,j,sign (a [i, i]) sign (a [j, i]));{ PrintMatr (a,b,n,6,1); }{ прямой ход }if (abs (a [i, i]) >eps) thenbeginMultString (a,z, i,1/a [i, i]);for j:=i+1 to n doAddStrings (a,z,j, i,-a [j, i]);{ PrintMatr (a,b,n,6,1); }endelsebeginwriteln ('Обратной матрицы не существует. ');halt;endend;{обратный ход: '); }if (a [n,n] >eps) thenbeginfor i:=n downto 1 dofor j:=1 to i-1 dobeginAddStrings (a,z,j, i,-a [j, i]);end;{ PrintMatr (a,b,n,8,4); }endelse 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 dofor j:=1 to n dos :=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 dofor j:=1 to N dobeginwrite (' введите a [', i,',',j,'] => ');read (a [i,j]);end;writeln ('ввод столбца свободных членов');for i:=1 to N dobeginwrite (' введите b [', i,'] => ');read (b );end;writeln ('введите вариант ');writeln (' 1 - решение системы линейных уравнений методом Гаусса ');write (' 2 - решение системы линейных уравнений матричным методом => ');readln (variant);case variant of1: gauss (a,b,x,n);2: matrica (a,b,n);else writeln ('неверно указан вариант');end;end.[/code]
>>129988420Блять, чому [code][/code] не работает, было жи раньше.
>>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
>>129988876Што?
>>129989006это R, не обращай внимания.
забыл уже всякие матаны, давно это было. так что за матричный метод? просто привести к верхней диагональной матрице и вывести результаты?
>>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
>>129987064 (OP)считай определитель @ приводи к треугольному виду
>>129994345понял, вспомнил такое. и для какого числа уравнений тебе надо? для произвольного или конкретного?
>>129994581>>129987939
>>129994579Это Гаусс.
>>129987064 (OP)За щеку тебе скинул, проверяй студентота.
>>129995146и че, ты хочешь чтоб бесплатно тебе запилили?
>>129995647Ладно.
>>129995673У кого-то есть мб, ведь не один я должен пилить хуйню на паскале.
>>129995757ну так погугли нахождение обратной матрицы в паскале, запили туда умножение на столбец свободных членов и радуйся, хуйли тупой такой
сажи птушнику. бамп каждые две секунды. иди нахуй с двача, даже поиск юзнуть не можешь для задачи, которую среднестатистический пятиклассник в уме щелкает
>>129996274Да в садике решают, чего уж.
Лол, тебе решить или таки прогу ?
>>129996348Прогу. Нахуй мне решать? Я бы и на бумаге мог решить, а не ебаться с паскалем.
>>129996434Тебе на мыло али и тут сойдёт ?
>>129997051Тут сойдёт.
>>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;beginfor 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 doMA[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.
>>129997562Это точно матричный метод? Похоже на Гаусса. Хотя.
>>129997868А, бля, сори, я слепой и не полностью прочитал ОП-пост.
>>129997942Эх.