<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=1388132</guid>
        <pubDate>Sat, 23 Dec 2006 14:05:47 +0000</pubDate>
        <title>Метод Зейделя и Гаусса для системы уравнений.</title>
        <link>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=1388132</link>
        <description><![CDATA[volvo877: Ну, запость его в разделе Паскаль - поможем перевести...]]></description>
        <author>volvo877</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=1388108</guid>
        <pubDate>Sat, 23 Dec 2006 13:37:28 +0000</pubDate>
        <title>Метод Зейделя и Гаусса для системы уравнений.</title>
        <link>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=1388108</link>
        <description><![CDATA[VeRmuTT: Да, но там стоит задача найти определитель, а в моем случае по-моему никак нельзя делать то что там описано в процедуре diagonal... Скорее всего, у меня не получится решить мою систему методом LU разложения... Вот нашел отличный алгоритм(с выбором максимального элемента, там с нулями нет проблемы), но он на Си, а в Паскаль не могу перевести(корни не те выдает). Если кто возмётся помочь-дам код]]></description>
        <author>VeRmuTT</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=1387993</guid>
        <pubDate>Sat, 23 Dec 2006 10:00:20 +0000</pubDate>
        <title>Метод Зейделя и Гаусса для системы уравнений.</title>
        <link>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=1387993</link>
        <description><![CDATA[volvo877: <strong class='tag-b'>VeRmuTT</strong>, если ты о задаче избавления от нулей на главной диагонали матрицы - то вот тут было кое-что:<br>
<a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=135998&view=findpost&p=1043423' target='_blank'>Возвращаемся к матрицам и определителям (сообщение #1043423)</a>]]></description>
        <author>volvo877</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=1387930</guid>
        <pubDate>Sat, 23 Dec 2006 07:43:10 +0000</pubDate>
        <title>Метод Зейделя и Гаусса для системы уравнений.</title>
        <link>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=1387930</link>
        <description><![CDATA[VeRmuTT: В курсовой по электротехнике и технологиям программирования попался вариант, где решение системы уравнений(для определения токов в 6 ветвях цепи) решается методом Гаусса. Я это дело закодил, проверил, но не учел того что система (составленная по первому и второму законам Кирхгофа) в первых 3 уравнениях имеет много нулей.. Из-за этого метод вылетает с ошибкой.<br>
Первые 3 строки из матрицы коэффициентов:<br>
1)1 -1 0 0 -1 0<br>
2)-1 0 -1 1 0 0<br>
3)0 0 0 -1 1 1<br>
Стопорится всегда вот здесь(деление на нуль, при i=3, то есть LowMatrix[3,3]=0 :() :<br>
<span class="tag-color tag-color-named" data-value="red" style="color: red">UpMatrix[i,j]:=(Matrix[i,j]-TempSum2)/LowMatrix[i,i];</span><br>
Буду очень признателен человеку, который поможет усовершенствовать алгоритм и дописать в него выбор максимального элемента по столбцу.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Gauss;</div><div class="code_line">interface</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;Matrix_6x6=</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;array[1..6] of array[1..6] of real; //Матрица 6x6</div><div class="code_line">&nbsp;&nbsp;VectorStolbec6=</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;array[1..6] of real; //Вектор-столбец свободных членов</div><div class="code_line">function GaussMethod(Matrix:Matrix_6x6; Vector:VectorStolbec6):VectorStolbec6;</div><div class="code_line">implementation</div><div class="code_line">function GaussMethod(Matrix:Matrix_6x6; Vector:VectorStolbec6):VectorStolbec6;</div><div class="code_line">var LowMatrix:Matrix_6x6;</div><div class="code_line">&nbsp;&nbsp; &nbsp;UpMatrix:Matrix_6x6;</div><div class="code_line">&nbsp;&nbsp; &nbsp;i,j,k,l:integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;TempSum,TempSum2:real;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Y, X:VectorStolbec6; //Векторы Y, X для решения 2 систем уравнений</div><div class="code_line">begin</div><div class="code_line">{!-------------Часть 1. Разложение A=LU-------------!}</div><div class="code_line">//Обнуление матриц и векторов</div><div class="code_line">for i:=1 to 6 do</div><div class="code_line">for j:=1 to 6 do</div><div class="code_line">begin</div><div class="code_line">UpMatrix[i,j]:=0;</div><div class="code_line">LowMatrix[i, j]:=0;</div><div class="code_line">Y[i]:=0;</div><div class="code_line">X[i]:=0;</div><div class="code_line">end;</div><div class="code_line">//Самые примитивные вычисления</div><div class="code_line">for i:=1 to 6 do</div><div class="code_line">LowMatrix[i, 1]:=Matrix[i, 1];</div><div class="code_line">//</div><div class="code_line">for i:=2 to 6 do</div><div class="code_line">UpMatrix[1, i]:=Matrix[1, i]/LowMatrix[1,1];</div><div class="code_line">&nbsp;</div><div class="code_line">for i:=1 to 6 do</div><div class="code_line">UpMatrix[i,i]:=1;</div><div class="code_line">//Начало разложения:</div><div class="code_line">TempSum:=0;</div><div class="code_line">TempSum2:=0;</div><div class="code_line">for i:=2 to 6 do</div><div class="code_line">for j:=2 to 6 do</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//Верхняя треугольная матрица U</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (j&#62;i) and (j&#62;1) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;TempSum2:=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for l:=1 to i-1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp;TempSum2:=TempSum2+LowMatrix[i,l]*UpMatrix[l,j];</div><div class="code_line">&nbsp;&nbsp; &nbsp;Form1.Caption:=inttostr(i);</div><div class="code_line">&nbsp;&nbsp; &nbsp;UpMatrix[i,j]:=(Matrix[i,j]-TempSum2)/LowMatrix[i,i];</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Нижняя треугольная матрица L</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (j&#62;1) and (j&#60;=i) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;TempSum:=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for k:=1 to j-1 do</div><div class="code_line">&nbsp;&nbsp; &nbsp;TempSum:=TempSum+LowMatrix[i,k]*UpMatrix[k, j];</div><div class="code_line">&nbsp;&nbsp; &nbsp;LowMatrix[i,j]:=Matrix[i,j]-TempSum;</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">{!-------------Конец разложения-------------!}</div><div class="code_line">&nbsp;</div><div class="code_line">{!-------------Часть 2. Нахождение корней--------!}</div><div class="code_line">//Сначала решаем систему Ly=b и находим вектор Y</div><div class="code_line">TempSum:=0;</div><div class="code_line">for i:=1 to 6 do</div><div class="code_line">begin</div><div class="code_line">if i&#62;=1 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin</div><div class="code_line">TempSum:=0;</div><div class="code_line">for k:=1 to i do</div><div class="code_line">TempSum:=TempSum+LowMatrix[i, k]*Y[k];</div><div class="code_line">Y[i]:=(Vector[i]-TempSum)/LowMatrix[i,i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">{Нужно было для отладки</div><div class="code_line">Form1.Memo1.Lines.Add(&#39;Y1: &#39;+floattostr(Y[1]));</div><div class="code_line">Form1.Memo1.Lines.Add(&#39;Y2: &#39;+floattostr(Y[2]));</div><div class="code_line">Form1.Memo1.Lines.Add(&#39;Y3: &#39;+floattostr(Y[3]));</div><div class="code_line">//----конец</div><div class="code_line">}</div><div class="code_line">//После нахождения вектора Y переходим к нахождению вектора X</div><div class="code_line">//Его находим из системы Ux=y</div><div class="code_line">TempSum:=0;</div><div class="code_line">for i:=6 downto 1 do//Так как ход обратный</div><div class="code_line">begin</div><div class="code_line">TempSum:=0;</div><div class="code_line">for k:=i+1 to 6 do begin</div><div class="code_line">TempSum:=TempSum+UpMatrix[i,k]*X[k];</div><div class="code_line">end;</div><div class="code_line">X[i]:=Y[i]-TempSum;</div><div class="code_line">end;</div><div class="code_line">{!-------------Конец. Корни найдены, возвращаем результат в виде вектора--------!}</div><div class="code_line">Result:=X;</div><div class="code_line">end;</div><div class="code_line">&nbsp;&nbsp;end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>VeRmuTT</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=242928</guid>
        <pubDate>Mon, 10 Nov 2003 16:21:24 +0000</pubDate>
        <title>Метод Зейделя и Гаусса для системы уравнений.</title>
        <link>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=242928</link>
        <description><![CDATA[Black_Star:  Пока большое спасибо, буду разбираться  <!--emo&;)--><img src='http://forum.sources.ru/html/emoticons/wink.gif' border='0' style='vertical-align:middle' alt='wink.gif' /><!--endemo-->  ]]></description>
        <author>Black_Star</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=242920</guid>
        <pubDate>Mon, 10 Nov 2003 16:13:47 +0000</pubDate>
        <title>Метод Зейделя и Гаусса для системы уравнений.</title>
        <link>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=242920</link>
        <description><![CDATA[wormball:  яж тебе сказал, смотри фак&#33; там зейдель был, правда без комментариев<br>да и про гаусса там есь<br>что такое зейдель я сам до сих пор не знаю.<br><br>ищо смотри на <a href='http://algolist.manual.ru/' target='_blank'>http://algolist.manual.ru/</a>  <!--emo&:)--><img src='http://forum.sources.ru/html/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile.gif' /><!--endemo--> <br><br>гаусс<br><br><!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->procedure sub_mul_vec_d&#40;var vec1, vec2&#58; double; coef&#58; extended; const dim&#58; longint&#41;; assembler;<br> asm<br> &nbsp;fld tbyte ptr coef<br> &nbsp;mov eax, dim<br> &nbsp;dec eax<br> &nbsp;js @exit<br> &nbsp;mov edi, dword ptr vec1<br> &nbsp;mov esi, dword ptr vec2<br> &nbsp;@1&#58;<br> &nbsp;fld st&#40;0&#41;<br> &nbsp;fld qword ptr &#91;esi+eax*8&#93;<br> &nbsp;fmul<br> &nbsp;fld qword ptr &#91;edi+eax*8&#93;<br> &nbsp;fsub<br> &nbsp;fstp qword ptr &#91;edi+eax*8&#93;<br> &nbsp;dec eax<br> &nbsp;jns @1<br> &nbsp;@exit&#58;<br> &nbsp;fstp tbyte ptr coef<br> end;<br><br>function correct_zero&#40;var a, b&#58; array of double; i, dim&#58; integer&#41;&#58; integer;<br> {чтобы не было нуля по диагонали}<br> var j, max_pos&#58; integer; max&#58; double;<br> begin<br> &nbsp;max_pos&#58;=i;<br> &nbsp;max&#58;=abs&#40;a&#91;i*&#40;1+dim&#41;&#93;&#41;;<br> &nbsp;for j&#58;=i+1 to dim-1 do if abs&#40;a&#91;i+j*dim&#93;&#41;&#62;max then begin<br> &nbsp; max&#58;=abs&#40;a&#91;i+j*dim&#93;&#41;;<br> &nbsp; max_pos&#58;=j;<br> &nbsp;end;<br> &nbsp;if abs&#40;a&#91;i*&#40;1+dim&#41;&#93;&#41;&#60;0.1*max then begin<br> &nbsp; sub_vec_d&#40;a&#91;i*&#40;1+dim&#41;&#93;, a&#91;i+max_pos*dim&#93;, dim-i&#41;;<br> &nbsp; b&#91;i&#93;&#58;=b&#91;i&#93;-b&#91;max_pos&#93;;<br> &nbsp;end;<br> &nbsp;if max=0 then correct_zero&#58;=1 else correct_zero&#58;=0;<br> end;<br><br>procedure _solve&#40;var a, b, x&#58; array of double; dim&#58; integer&#41;;<br> var i, j&#58; integer; k&#58; extended;<br> begin<br> &nbsp;for i&#58;=0 to dim-2 do begin<br> &nbsp; correct_zero&#40;a, b, i, dim&#41;;<br> &nbsp; for j&#58;=i+1 to dim-1 do begin<br> &nbsp; &nbsp;k&#58;=a&#91;i+j*dim&#93;/a&#91;i*&#40;1+dim&#41;&#93;;<br> &nbsp; &nbsp;b&#91;j&#93;&#58;=b&#91;j&#93;-b&#91;i&#93;*k;<br> &nbsp; &nbsp;sub_mul_vec_d&#40;a&#91;i+j*dim+1&#93;, a&#91;i*&#40;1+dim&#41;+1&#93;, k, dim-i-1&#41;;<br> &nbsp; end;<br> &nbsp;end;<br> &nbsp;for i&#58;=dim-1 downto 1 do for j&#58;=0 to i-1 do begin<br> &nbsp; k&#58;=a&#91;i+j*dim&#93;/a&#91;i*&#40;1+dim&#41;&#93;;<br> &nbsp; b&#91;j&#93;&#58;=b&#91;j&#93;-b&#91;i&#93;*k;<br> &nbsp;end;<br> &nbsp;for j&#58;=0 to dim-1 do x&#91;j&#93;&#58;=b&#91;j&#93;/a&#91;j*&#40;1+dim&#41;&#93;;<br> end;<br><!--c2--></td></tr></table><div class='postcolor'><!--ec2--><br>спрашивай чо не поймёшь ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=242917</guid>
        <pubDate>Mon, 10 Nov 2003 16:07:31 +0000</pubDate>
        <title>Метод Зейделя и Гаусса для системы уравнений.</title>
        <link>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=242917</link>
        <description><![CDATA[Black_Star:  Пуляй, авось пойму что  <!--emo&:blink:--><img src='http://forum.sources.ru/html/emoticons/blink.gif' border='0' style='vertical-align:middle' alt='blink.gif' /><!--endemo--> <br>А что насчет Зейделя? ]]></description>
        <author>Black_Star</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=242891</guid>
        <pubDate>Mon, 10 Nov 2003 15:43:43 +0000</pubDate>
        <title>Метод Зейделя и Гаусса для системы уравнений.</title>
        <link>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=242891</link>
        <description><![CDATA[wormball:  <a href='http://forum.sources.ru/index.php?act=ST&f=43&t=9061&st=0#entry89101' target='_blank'>faq you&#33;&#33;</a><br>могу дать собственноручно написанного гаусса на тмт паскале с асмеблерными вставками ]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=242886</guid>
        <pubDate>Mon, 10 Nov 2003 15:37:26 +0000</pubDate>
        <title>Метод Зейделя и Гаусса для системы уравнений.</title>
        <link>https://forum.sources.ru/index.php?showtopic=37546&amp;view=findpost&amp;p=242886</link>
        <description><![CDATA[Black_Star:  Есть система уравнений, например:<br>3Х1+4Х2-2Х3=4<br>-Х1-Х2+3Х3=6<br>Х1-7Х2+Х3=-2<br>Необходимо решить 2я методами (Зейделя и Гаусса).<br>Желательно алгоритм, или текст программы (лучше 2е <!--emo&:D--><img src='http://forum.sources.ru/html/emoticons/biggrin.gif' border='0' style='vertical-align:middle' alt='biggrin.gif' /><!--endemo--> )<br>Заранее благодарен&#33; ]]></description>
        <author>Black_Star</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	