IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Решить методом простых итераций систему уравнений, Вроде программу написали, но немного не те значения... помогите пожалу
Hi-Tech
сообщение 9.04.2008 15:50
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Приветствую!!

Значит есть такое задание:

решить методом простых итераций систему уравнений :

-9,13*x1 + 2,02*x2 - 0,73*x3 = -1,34
7,51*x1 + 6,25*x2 -2,32*x3 = 2,33
-4,64*x1 + 1,13*x2 - 8,88*x3 = -3,75


Вот программа, которую написали:


program itera;
uses wincrt;
label 1;
const n=3;
var i,j: integer;
s,l,m,e,r,z:real;
type matr=array[1..n,1..n] of real;
vektor=array[1..n] of real;
const ap: matr=((-9.13,2.02,-0.73),(7.51,6.25,-2.32),(-4.64,1.13,-8.88));
bp:vektor=(-1.34,2.33,-3.75);
a:matr=((1,0.221,0.079),(-0.195,1,-0.368),(0.522,-0.127,1));
b:vektor=(0.146,0.119,0.422);
var x,y:vektor;
begin
writeln('vvedi e,l');
readln(e,l);
m:=e*(1-l)/l;
for i:=1 to n do
x[i]:=0;
1: for i:=1 to n do
begin
s:=0;
for j:=1 to n do
s:=s-(a[i,j]/a[i,i])*x[j];
y[i]:=s+x[i]+b[i]/a[i,i];
end;
r:=abs(x[1]-y[1]);
for i:=1 to n do
z:=abs(x[i]-y[i]);
if r>z then
r:=z
else r:=r;
if r>m then
begin
for i:=1 to n do
x[i]:=y[i];
goto 1;
end
else
begin
writeln('r=',r);
for i:=1 to n do
writeln('x',i,' = ',x[i]:8:3);
end;
a:=ap; b:=bp;
for i:=1 to n do
writeln(x[1]*a[i,1]+x[2]*a[i,2]+x[3]*a[i,3]:8:3);
end.




Когда зпускаем программу, вводим значение: 0.001 0.649 и жмем Enter.

Он начинает выдавать следующий результат:

x1 = 0.054
x2 = 0.282
x3 = 0.430

А должны быть другие значения x1,x2,x3:

x1=0,182
x2=0,290
x3=0,364


Что там не так не можем понять... подскажите кто-нибудь...
Заранее благодарен.

Сообщение отредактировано: Hi-Tech - 9.04.2008 16:23
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 9.04.2008 18:17
Сообщение #2


Гость






Ну, сравни мой метод и свой. Можешь вообще вынести вычисления из процедуры, и сделать их в основной части программы, тогда все изменения буду как на ладони...

Только помни: "Нужно делать так, как нужно, а как не нужно, делать не нужно" (С) Винни-Пух... Это я об использовании goto... Ну не надо оно тебе, есть без него достаточно конструкций, позволяющих реализовать нужную логику работы...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 6:50
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"