0 / 0 / 1
Регистрация: 23.10.2013
Сообщений: 50
1

Вещественное переполнение, исправить код

19.03.2014, 21:53. Показов 2141. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите пожалуйста, при решении данной матрицы 3 2 10 -7
1 -4 0 1
10 -1 3 7
происходит вещественное переполнение на 29 строке,не знаю что делать, может кто знает как решить эту проблему
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
uses crt;
 
const
   MAX_SIZE=20;                          {максимальный размер матрицы}
 
type
   TMatrix= array [1..MAX_SIZE] of array [1..MAX_SIZE] of real;
   TVector= array [1..MAX_SIZE] of real;
 
var
   i, j: integer;
   a: TMatrix;
   f: TVector;                            {вектор правой части}
   res: TVector;                          {вектор решения системы}
   size: integer;                         {размерность системы}
   accuracy: real;                      {точность вычислений}
   max_step: longint;                     {максимальное число шагов}
   data_file: text;
   out_file: text;
 
 
{эвклидова норма вектора}
function norma(var r: TVector; size: integer): real;
var
   res: real;
 
begin
   for i:=1 to size do begin
      res:=res+sqr(r[i]);
   end;
 
   norma:=sqrt(res);
end;
 
 
{копирование вектора}
procedure copyVect(var v: TVector;
                   var r: TVector;
                   size: integer);
var
   i: integer;
begin
   for i:=1 to size do begin
      r[i]:=v[i];
   end;
end;
 
 
{произведение матрицы на вектор}
procedure multMatrVect(var m: TMatrix;
                       var v: TVector;
                       var r: TVector;
                       size: integer);
var
   i, j: integer;
   res: real;
 
begin
   for i:=1 to size do begin
      res:=0;
      for j:=1 to size do begin
         res:=res+m[i][j]*v[j];
      end;
      r[i]:=res;
   end;
end;
 
 
{сумма векторов}
procedure addVect(var v1: TVector;
                  var v2: TVector;
                  var r: TVector;
                  size: integer);
var
   i: integer;
begin
   for i:=1 to size do begin
      r[i]:=v1[i]+v2[i];
   end;
end;
 
 
{разность векторов}
procedure subVect(var v1: TVector;
                  var v2: TVector;
                  var r: TVector;
                  size: integer);
var
   i: integer;
begin
   for i:=1 to size do begin
      r[i]:=v1[i]-v2[i];
   end;
end;
 
 
{решение системы}
procedure linearSolveFullRelax(var a: TMatrix;
                               var f: TVector;
                               var res: TVector;
                               size: integer;
                               accurancy: real);
var
   x, r, alpha, t: TVector;
   k, max_step: longint;
 
begin
   k:=0;
   max_step:=10000;
   copyVect(f,x,size);
 
   repeat
      multMatrVect(a,x,t,size);
      subVect(f,t,r,size);
 
      for i:=1 to size do begin
         alpha[i]:=r[i]/a[i][i];
      end;
 
      addVect(x,alpha,t,size);
      copyVect(t,x,size);
 
      k:=k+1;
   until (k>=max_step) or (norma(r,size)<=accuracy);
 
   writeln('Число шагов: ',k);
 
   if(k=max_step) then begin
      writeln('Заданная точность не достигнута');
   end;
 
   copyVect(x,res,size);
end;
 
 
begin
   accuracy:=1;
   max_step:=10000;
 
   clrscr;
       assign(data_file, 'a.txt');
   reset(data_file);
   read(data_file, size);
 
   for i:=1 to size do begin
      for j:=1 to size do begin
         read(data_file, a[i][j]);
      end;
      read(data_file, f[i]);
   end;
 
   close(data_file);
 
   writeln('Расширенная матрица системы:');
   for i:=1 to size do begin
      for j:=1 to size do begin
         write(a[i][j]:14:6);
      end;
      writeln(f[i]:14:6);
   end;
   writeln;
 
   linearSolveFullRelax(a,f,res,size,accuracy);
 
   writeln('Результат:');
   for i:=1 to size do begin
      writeln(res[i]:14:6);
   end;
   writeln;
 
   assign(out_file, 'result.txt');
   rewrite(out_file);
 
   for i:=1 to size do begin
      writeln(out_file, res[i]:14:6);
   end;
 
   close(out_file);
 
end.
0
19.03.2014, 21:53
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.03.2014, 21:53
Ответы с готовыми решениями:

Сортировка методом Хоара, исправить ошибку (переполнение стека, бесконечный цикл)
Сортировка методом Хоара. Нужно первую четверть рассортировать по убыванию, а всё остальное - по возрастанию. Сделал две процедуры...

Написать программу, переводящую вещественное число в двоичный код
Доброго времени суток. Помогите пожалуйста студенту получить зачет. Надо написать программу, переводящую вещественное число в двоичный код(...

Вещественное переполнение. Частичная сумма ряда
Помогите. Сделал прогу на частичную сумму ряда. Вроде как правильно, но паскаль ругается на вещественное переполнение при большом кол-ве...

6
 Аватар для saden
184 / 168 / 53
Регистрация: 27.01.2013
Сообщений: 788
19.03.2014, 21:58 2
попробуй double или extended.
сложная прога чтобы с ходу вникнуть....
0
0 / 0 / 1
Регистрация: 23.10.2013
Сообщений: 50
19.03.2014, 23:08  [ТС] 3
пробовал не получается, это решение СЛАУ методом релаксации,итерационный метод
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7800 / 4622 / 2832
Регистрация: 22.11.2013
Сообщений: 13,129
Записей в блоге: 1
20.03.2014, 08:24 4
Переменные аккумуляторы (локальные) нужно обязательно инициализировать 0, иначе там мусор. Глобальные переменные инициализированы 0 по умолчанию.
После строки 27 добавьте res:=0;
0
0 / 0 / 1
Регистрация: 23.10.2013
Сообщений: 50
20.03.2014, 10:50  [ТС] 5
все равно происходит переполнение,преподаватель сказал чтобы этого не было надо обе части уравнения Ax=b домножить на A'(транспонированное) но я не знаю куда это записать
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7800 / 4622 / 2832
Регистрация: 22.11.2013
Сообщений: 13,129
Записей в блоге: 1
20.03.2014, 17:23 6
Цитата Сообщение от Pringls Посмотреть сообщение
A'(транспонированное)
наверное, все же, на обратную матрицу? Вот только для высоких порядков задача нахождения обратной матрицы станет самостоятельной проблемой.

Добавлено через 32 минуты
Или на взаимную (составленную из алгебраических дополнений) транспонированную?

Добавлено через 45 минут
Если честно, ваше решение как-то не очень похоже на описанное там: http://www.machinelearning.ru/... 0%B4%D1%8B

Добавлено через 3 минуты
Поскольку переполнение возникает только при оценке текущего решения (функция norma, можно попробовать делать предварительную проверку точности без возведения в квадрат).
1
0 / 0 / 1
Регистрация: 23.10.2013
Сообщений: 50
21.03.2014, 00:01  [ТС] 7
да на взаимную транспонированную,а можешь написать код,если не тяжело, буду премного благодарен

Добавлено через 6 часов 35 минут
можешь реализовать свою идею кодом, просто не представляю как это сделать
0
21.03.2014, 00:01
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2014, 00:01
Помогаю со студенческими работами здесь

Не компилируется код - арифметическое переполнение
Доброго всем здоровьица и суток!Проблема такая,когда запускаем главную программу возникает модели машины фон неймана,так вот если...

Метод Зейделя, код выдает "Арифметическое переполнение"
Вот вроде все нормально, но почему выдает &quot;Арифметическое переполнение&quot;? Program Zendel; uses crt; Var E, x1, x2, F1, F2, x11,...

Вещественное переполнение
Вот программа program zad3; var w, a, b, c,d,e,f,j, x, y : real; begin Writeln('Ââåäèòå x&gt;0 è y'); Readln(x,y);

Вещественное переполнение
const e=0.001; var y:array of real; a,b,h:real; n:integer; function F(x:real):real; var S,t,m,p:real; ...

Вещественное переполнение (Вычисление корней уравнения методом Гаусса)
Здравствуйте! Есть программа, вычисляющая корни уравнений (метод Гаусса, LU-разложения, Зейделя). Так вот, при вводе некоторых значений...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Создаем SPA Router на чистом JavaScript
bytestream 17.02.2025
В современной веб-разработке одностраничные приложения (SPA) стали стандартом для создания динамичных и отзывчивых пользовательских интерфейсов. Ключевым компонентом любого SPA является роутер -. . .
Машинное обучение на TypeScript и TensorFlow
bytestream 17.02.2025
Машинное обучение становится все более востребованным направлением в современной разработке программного обеспечения. Интеграция искусственного интеллекта в веб-приложения открывает новые возможности. . .
Манипуляция данными EXIF и JPEG в JavaScript
bytestream 17.02.2025
В современном мире цифровой фотографии метаданные изображений играют важнейшую роль в организации и управлении медиаконтентом. Формат EXIF (Exchangeable Image File Format) - это стандарт,. . .
Как создать GUID/UUID в JavaScript
bytestream 17.02.2025
GUID (Globally Unique Identifier) и UUID (Universally Unique Identifier) - это специальные форматы 128-битных идентификаторов, которые практически гарантируют уникальность значения во времени и. . .
Что такое мышление в упрощенном смысле (моё субъективное видение, для создания модели).
Hrethgir 17.02.2025
Разумеется упрощать смысл есть. Дело в том, что я пришёл к тому выводу, что даже если я создам свой процессор (конвейер), то первое для чего смогу его использовать в качестве демонстративного. . .
Как Node.js устроен изнутри
Wired 17.02.2025
Node. js коренным образом изменил подход к веб-разработке, позволив использовать JavaScript не только в браузере, но и на стороне сервера. Созданный в 2009 году Райаном Далем, Node. js представляет. . .
Как обновить Node.js в Windows
Wired 17.02.2025
Думаю, многие разработчики сталкивались с ситуацией, когда устаревшая версия Node. js становилась источником проблем - от несовместимости с новыми пакетами до уязвимостей в безопасности. Особенно это. . .
Как обновить Node.js в MacOS
Wired 17.02.2025
В Node. js существует несколько подходов к обновлению, каждый из которых имеет свои преимущества и особенности применения. Выбор конкретного метода зависит от ваших потребностей - будь то. . .
Как обновить Node.js в Linux
Wired 17.02.2025
Обновление Node. js может показаться сложной задачей, особенно если у вас несколько проектов с разными зависимостями. Однако существует несколько надежных способов обновления, подходящих для разных. . .
[golang] 134. Gas Station
alhaos 17.02.2025
Тут нам даны два целочисленных слайса gas и cost, индексы массива представляют собой заправочные станции. а элементы gas это количество топлива на такой станции, cost это количество топлива. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru