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

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

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

> Приближененное вычисление значения ряда
Account
сообщение 17.01.2009 12:58
Сообщение #1


Бывалый
***

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

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


Задание
Изображение
Мой код

uses crt;
var
zn:boolean;
s,x,st,e:double;
p_st,i,j,c:longint;
begin
clrscr;
s:=1;
zn:=false;
e:=0.1;
x:=0.9;
i:=1;
j:=2;
p_st:=1;
st:=1;
while (abs(x)<1) and (abs(1/sqrt(1+x)-s)>e) do
begin
x:=x-0.1;
for c:=1 to p_st do
st:=st*x;
if zn=false then
begin
s:=s-(i*st/j);
zn:=true;
end
else
begin
s:=s+(i*st/j);
zn:=false;
end;
j:=(i+3)*j;
i:=(i+2)*i;
{------------------------------------------}
writeln('e= ',e:5:5);
writeln('i= ',i);
writeln('j= ',j);
writeln('x= ',x:5:5);
writeln('s= ',s:5:5);
writeln('(1/sqrt(1+x))= ',(1/sqrt(1+x)):5:5);
writeln('(1/sqrt(1+x)-s)= ',abs(1/sqrt(1+x)-s):5:5);
end;
writeln('i= ',i);
writeln('j= ',j);
writeln('e= ',e:5:5);
writeln('x= ',x:5:5);
writeln('s= ',s:5:5);
writeln('(1/sqrt(1+x))= ',(1/sqrt(1+x)):5:5);
writeln('(1/sqrt(1+x)-s)= ',abs(1/sqrt(1+x)-s):5:5);
readkey;
end.

Вот с точностью 0,1 он вычисляет, если сменить поставить точность выше, при этом соответсвенно и шаг нужно уменьшить допусти 0,01 сделать его, то все программа не пашет, я так понялне хватает размераности типов данных, переменная j обнуляется, а еще заметил i выходит за пределы и становится равной -1. Правильные ли у меня вычисления и как сделать чтоб вычислить с более высокой точностью?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Account
сообщение 17.01.2009 17:29
Сообщение #2


Бывалый
***

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

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


За поправку спасибо.
Цитата
Да, кстати. Проверь задание. Ты сравниваешь результаты вычисления суммы ряда с ArcTan, а вычисляется совсем не арктангенс. У арктангенса ряд - знакопеременный, чередуются +/-/+/-, а у тебя только первый минус, потом все плюсы. Поэтому такая большая разность и выходит...


Возьму на заметку, хорошо что ты заметил, но понимаешь задание только на картинке, больше узнать не где, там вот не указана переменность знака поэтому так вычисляю. Делаю тоже не для себя. (Берусь так сказать помочь знакомым, чтоб вещество серое не засохло;).

p.s. Попробовал знак сделать переменным, действительно значение стало более близкое к арктангенсу) (но сравнивая, вроде не настолько уж большая))) разница)

Добавлено через 19 мин.
volvo
А вот в первом случае , в котором ты решение давал в самом начале разница очень большая между суммой ряда и значением с сравниваемой фунции, вот код

uses crt;
var
s,x,e:double;
i:longint;
next:double;
begin
clrscr;
write('Введмите е = ');
readln(e);
s:=1;
next:=1;
i:=1;
x:=0.9;
while abs(x)<(1.0-e/10) do
begin
repeat
next:= -next*i*x/succ(i);
s:=s+next; inc(i,2);
until abs(next)<e;
write('e= ',e:5:5);
write('| x= ',x:5:2);
write('| s= ',s:5:6);
write('| 1/sqrt(1+x)= ',(1/sqrt(1+x)):5:6);
writeln;
x:=x-0.1;
end;
readkey;
end.

функция значение которой как бы является точным значение ряда (1+x)^(-1/2)

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

Сообщений в этой теме
Account   Приближененное вычисление значения ряда   17.01.2009 12:58
volvo   Не надо постоянно вычислять Xn, просто домножай оч...   17.01.2009 13:08
Account   При замени уже на 0,01 вылетает ошибка операции с ...   17.01.2009 13:12
volvo   Интересное кино... У меня прекрасно работает при e...   17.01.2009 13:21
Account   volvo, а как у тебя знак последующего множителя в ...   17.01.2009 13:40
Account   volvo, огромное спасибо, очередной раз убеждаюсь ч...   17.01.2009 14:01
Account   Задача таже только другой ряд http://savepic.ru/3...   17.01.2009 15:28
volvo   А что, где-то указано, что она должна меняться? Пе...   17.01.2009 15:45
Account   Вот шапка задания из таблицы http://savepic.ru/40...   17.01.2009 15:58
Account   volvo Вот сделал для каждого x uses crt; var s,x,...   17.01.2009 16:44
volvo   А ты отладчиком пробегись, и посмотри, чему в дейс...   17.01.2009 16:59
Account   За поправку спасибо. Возьму на заметку, хорошо ч...   17.01.2009 17:29
volvo   Перенести s:=1; next:=1; i:=1; внутрь цикла While ...   17.01.2009 18:17
Account   Блин даже стыдно за невнимательность)   17.01.2009 18:23


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

 



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