Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2013, 18:32   #1
syba4eva
Новичок
Джуниор
 
Регистрация: 01.05.2013
Сообщений: 1
Восклицание исправить ошибки в методе Бройдена

Код:
program broiden;
uses crt;
const m=20;
      n=20;
type matr=array[1..m, 1..n] of real;
     mass=array[1..m, 1..n] of real;
     P=array[1..n] of real;
     V=array[1..n] of real;
     Bnach=array[1..n] of real;
     Q=array[1..n] of real;
     XJ=array [1..n] of real;
     Y=array [1..n] of real;
     VB=array [1..m,1..n] of real;
     ymnMAS=array [1..n] of real;
     PRMAS=array [1..n] of real;
     

var x0,x1,f,e,S,SYM,pomny,zap,promq,mq,nq:real;
     a,w: matr;
     k:Bnach;
     z:mass;
     r:V;
     t:P;
     m1:Q;
     u:XJ;
     q1:Y;
     b:VB;
     mn:ymnMAS;
     nm:PRMAS;
     iteraz,i,j,n1,maunI,naid,stop,iter,l,h:integer;
Function f1(x,y:real):real;
begin
     f1:=x+y-3;
end;
Function f2(x,y:real):real;
begin
     f2:=x*x+y*y-9;
end;
      begin
      clrscr;
      write('Введите начальный вектор= ');
      readln(x1);
      write ('Введите точность e= ');
      readln(e);
      maunI:=0; naid:=0; stop:=0; S:=0;
      write(' Матрица Якоби= ');
         for i := 1 to n do
         for j := 1 to n do
         begin
        write(a[i,j]);
        writeln;
      end;
      while ((maunI)<>10) and ((naid)<>1) and ((stop)<>1) do
       begin
       inc(maunI);
     k[0]:=r[0]+r[1]-3;
     k[1]:=r[0]*r[0]+r[1]*r[1]-9;
      iteraz:=0;
                  for i:=0 to n do
                  for j:=0 to n do
                  begin
                  w[i,j]:=a[i,j];
      end;
      end;
      while ((iteraz)<> n-1) do
      for h:=0 to n do
      begin
      k[h]:=k[h]*(-1);
      end;
      pomny:=z[iter,iter];
      for i:=iter+1 to n do
      begin
      z[iter,j]:=z[iter,j]/pomny;
      end;
      
      t[iter]:=t[iter]/pomny;
      for  i:=iter+1 to n do
      
      zap:=z[i,iter];
      for j:=iter to n do
      begin
      z[i,j]:=z[i,j]-z[iter,j]*zap;
      
      t[i]:=t[i]-t[iter]*zap;
      inc(iter);
      end;
      if  z[n-1,n-1]<>0 then
          m1[n-1]:=t[n-1]/z[n-1,n-1]

          else
          begin
          m1[n-1]:=0;
          end;
          SYM:=0;
          l:=n-2;
          for i:=n-2 to n do
          begin
          SYM:=0;
          for j:=i+1 to n-1 do
          begin
          SYM:=SYM+z[i,j]*t[j];
          if z[i,l]<>0 then
           t[i]:=(t[i]-SYM)/z[i,j]
             else
             begin
             t[i]:=0;
             dec(l);
             end;
             end;
             end;
          promq:=0; mq:=0; nq:=0;
          S:=0;
          for i:=i+1 to n do
          begin
          u[i]:=r[i]+m1[i];
          if r[i]>=0 then
           promq:=m1[i]+promq
           else
           begin
           promq:=-m1[i]+promq;
           if r[i]>=0 then
           mq:=mq+r[i]
           else
           begin
           mq:=mq-r[i];
           if u[i]>=0 then
           nq:=nq +u[i]
           else
           begin
           nq:=nq-u[i];
           if mq<>0 then
           S:=promq/mq
           else
           begin
           S:=promq/nq;
           if S<0 then S:=-S;
           if S<e then
           writeln(S);
           naid:=1;
           writeln('Найдено решение ');
           end;
           for i:=0 to n do
           writeln(u[i]);
           writeln('Количество итераций ', maunI)
           else
           begin
           if S>20 then
           writeln('Процесс расходится ');
           stop:=1;
           else
           begin
           if maunI=10  then
           writeln('за 10 итераций решение не найдено ');
           else
           begin
           q[0]:=(u[0]+u[1]-3)-k[0];
           q[1]:=(u[0]*u[0]+u[1]*u[1]-9)-k[1];
           end;
           end;
           for i:=1 to n do
           for j:=1 to n do
           b[i,j]:=yakob[i,j];
           yakob[i,j]:=0;
           for i:=0 to n do
           Ymn:=0;
           for j:=0 to n do
           begin
           Ymn:=Ymn+b[i,j]*m[j];
           mn[i]:=Ymn;
           nm[i]:=Y[i]-mn[i];
           del:=0;
           for i:=0 to n do
           begin
           del:=del+m[i]*m[i];
           for i:=0 to n do
           for j:=0 to n do
           begin
           yakob[i,j]:=b[i,j]+(( nm[i]*m[j]/del);
           for i:=0 to n do
           begin
           r[i]:=u[i];
           end;
           end;
           end;
           end;
           end;
      end.

Последний раз редактировалось Stilet; 01.05.2013 в 19:08.
syba4eva вне форума Ответить с цитированием
Старый 01.05.2013, 19:34   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Мы должны сами догадаться, что за ошибки подразумеваются?
С чего Вы взяли, что ошибки вообще есть?
Кстати, с таким форматированием кода невозможно не то что понять, а даже прочесть его спокойно

P.S. Самого метода не знаю.

UPD
Хотел отформатировать для тех, кто захотел бы Вам помочь, но Delphi жалуется и не может отформатировать код. У Вас у одного if два else (а все проблемы из-за отсутствия форматирования).

Код:
        if u[i] >= 0 then
          nq := nq + u[i]
        else
        begin
         
        else
        begin
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 01.05.2013 в 19:46.
BDA вне форума Ответить с цитированием
Старый 01.05.2013, 19:47   #3
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Действительно, чем разбираться в Вашем коде, проще самому написать программу заново.
Уже при первом взгляде на код возникают сомнения в его принципиальной работоспособности.. Взять хотя бы первые строки.. Что это за такой вектор x1? И как Вы так лихо выводите матрицу Якоби, которая якобы находится в a, даже не заполнив массив a?
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
исправить ошибки YaDenis Помощь студентам 4 10.01.2013 15:33
Исправить ошибки Irishka_brand Помощь студентам 0 22.12.2012 20:42
исправить ошибки sergey123 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 01.04.2012 16:35
исправить ошибки в методе Рунге-Кутта Slimmi Помощь студентам 0 31.01.2011 15:18
исправить ошибки lubafffka Общие вопросы C/C++ 2 06.12.2009 01:11