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

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

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

 
 Ответить  Открыть новую тему 
> хорда и итерация, один ответ?
сообщение
Сообщение #1





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

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


Вопрос вот в чем.написано 2 проги..одна методом хорд другая методом итераций(взяты коды с вашего сайта)

вот уравнение: tg(0,47x+0,2)=x*x;
eps=0.0001;

вот текст хорды:
{$n+}
Uses Crt;
Var
x, Eps, a, b, c: Double;
n: Integer;

Function f(x: Double): Double;
Begin
f := (sin(0.47*x+0.2))/(cos(0.47*x+0.2))-x*x
End;

Function Chord(a, b: Double): Double;
Begin
Chord := (f(b)*a - f(a)*b) / (f(b) - f(a))
End;

begin
ClrScr;
Writeln('vvedu a и b');
Read(a, b);

WriteLn('vvedu Eps');
Read(Eps);

ClrScr;
n := 0;
Repeat
C := Chord(a, b);
If f(a)*f© > 0 Then a := c
Else b := c;
Inc(n)
Until Abs(Chord(a, b) - C) < Eps;

x := c;
WriteLn(' x=', x:10:7);
WriteLn('kol-vo iteraciy = ',n);
ReadKey
end.


вот итерация:
program ITERAT;
uses crt;

const max_iter=100;

var
i :integer;
x,x0,eps,M :real;

function F(x:real):real;
begin
F:=(sin(0.47*x+0.2))/(cos(0.47*x+0.2))-x*x;
end;

begin
clrscr;
write('vvedu x='); readln(x);
write('vvedu eps='); readln(eps);

i:=0;
repeat
M:=-(F(x+eps)-F(x-eps))/(2*eps); {коэффициент для улучшения сходимости}
x0:=x;
x:=x0+F(x0)/M; {сердце метода итераций}
inc(i);
writeln('---iteraciya',i:3,' x=',x);
writeln('F(x)=',F(x),' tochnost=',abs(x-x0));
until (abs(x-x0)<=eps)or(i>max_iter);

if (abs(x-x0)<=eps) then writeln('Ответ: X=',x)
else writeln('otvet ne naiden! za ',max_iter:0,' wagov iteraciya ne sowlas.');

end.


Препод говорит что ответ должен быть один и тот же..максимум он должен отличаться на 0.0001((
но ответы у меня разные(((

помогите студенту плз(((надо до понедельника... wacko.gif

Сообщение отредактировано: candLe -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






И где ты нашел разные ответы?

Метод итераций:
Цитата
vvedu x=1
vvedu eps=0.0001
---iteraciya 1 x= 8.31784301934810E-001
F(x)=-2.09492134166151E-002 tochnost= 1.6821569806519032E-0001
---iteraciya 2 x= 8.10451272488642E-001
F(x)=-3.58424238759207E-004 tochnost= 2.1333029446167662E-0002
---iteraciya 3 x= 8.10073328559432E-001
F(x)=-1.13206256414607E-007 tochnost= 3.7794392921042252E-0004
---iteraciya 4 x= 8.10073209112537E-001
F(x)=-1.11717818156165E-014 tochnost= 1.1944689515264173E-0007
Ответ: X= 0.8100732

Метод хорд:
Цитата
vvedu a и b
0 1
vvedu Eps
0.0001
x= 0.8100538
kol-vo iteraciy = 6


Все, что я сделал - заставил в методе итераций печатать ответ в том же формате, в котором он печатается в первой программе:
 if (abs(x-x0)<=eps) then writeln('Ответ: X=',x:10:7)
else writeln('otvet ne naiden! za ',max_iter:0,' wagov iteraciya ne sowlas.');

 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


спасибо большое за помощь !zdarov.gif 1.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 20.04.2024 10:06
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name