Добро пожаловать! Войти Зарегистрироваться

Расширенный

КР Задание III

Написал Godless 
КР Задание III
26 November 2005 20:08
Возникла проблема... Есть функция f(x)=ln(2+x) отрезок [-1;1], шаг, соответственно, 0.2. При вычеслении первого значения (при х=-1.0) по функции естественно 0, но по РТ получается 0.04443... При дальнейшем вычислении такой разницы между значениями нету. Вопрос будет глупый, моя ли вина, что получаю такие значения? Нет, может ли быть такое?
zzz
Re: КР Задание III
26 November 2005 21:09
Во всём виноват Чубайс! Точнее Цузе!! Вам пока ещё рано делать эту задачу, дождитесь лекции и семинара.
Re: КР Задание III
26 November 2005 21:09
На семинаре нам уже рассказали, как нужно делать IV задание...
Re: КР Задание III
27 November 2005 12:12
На семинаре нам сказали все курсовые уже здавать smiling smiley

zzz
Re: КР Задание III
27 November 2005 14:02
Godless писал(а):

> На семинаре нам уже рассказали, как нужно делать IV задание...
А про третье забыли? Вообще-то каждое задание рассчитано на неделю, ещё не поздно.
zzz
Re: КР Задание III
27 November 2005 14:02
Amigo писал(а):

> На семинаре нам сказали все курсовые уже здавать smiling smiley
>

Крайние сроки сдачи практикума:
1. 17 декабря, до начала зачётной сессии.
2. 24 декабря, до начала экзаменационной сессии.
3. 31 декабря, в 2005 календарном году. Символический рубеж.
4. 10 января, до рассмотрения дел студентов, имеющих много несданных зачётов, возможен недопуск к дальнейшим экзаменам.
5. 24 января, конец экзаменационной сессии, необходимо иметь не более 2-х хвостов. Или могут отчислить.
6. 7 февраля, начало семестра, необходимо иметь не более одного хвоста. Или могут отчислить.
7. 7 марта. Крайний срок ликвидации задолжностей для бюджетных студентов. Иначе обучение таких студентов в весеннем семестре не оплачивается министерством.
zzz
Re: КР Задание III
27 November 2005 15:03
Кстати, а нет ли, случайно, у этой функции каких-нибудь особенностей при x=-1? Постройте её график с помощью gnuplot, исследуйте методами матанализа. И, конечно же, ищите ошибки или неточности в программе.
Re: КР Задание III
27 November 2005 15:03
Сама функция в нуле конечно 0, так как ln(2+x) при х=-1 есть ln1=0, проблема, насколько я понимаю в подсчёте ряда Тейлора... Получается очень большая погрешность...
Commando
Re: КР Задание III
27 November 2005 15:03
Может быть, если ряд по степеням x, то он медленно сходится при x = -1, а при маленьких x - быстро? Можно ввести переменную, указывающую число просуммированных членов ряда, и выводить ее вместе с ответом.

zzz
Re: КР Задание III
27 November 2005 15:03
Ряд Тейлора известен ресурсоёмкостью и погрешностью и никогда на практике не применяется.
Re: КР Задание III
27 November 2005 17:05
Всё это делаеться, число итераций 50. Причём при дальгейшем изменении х, точность увеличиваеться...
Re: КР Задание III
27 November 2005 22:10
Хотелось бы узнать, можно ли для выполнения данногозадания использовать одномерный массив (для задания коодринат от деления отрезка)? иначе записывать 10 констант...?
Re: КР Задание III
27 November 2005 22:10
насколько я понял, тут просто используеться шаг для х... который вычисляеться через разницу в координатах отрезака [a,b].
Commando
Re: КР Задание III
28 November 2005 00:12
Godless писал(а):

> Всё это делаеться, число итераций 50. Причём при дальгейшем
> изменении х, точность увеличиваеться...

Можно тогда вывести ли 51-й член ряда и посмотреть не его величину.
Это даст некоторое представление о погрешности вычислений...
Re: КР Задание III
29 November 2005 17:05
Кому не лень... Вот сама программа:
{Var 18}
program z3 (input,output);
const a=-1.0; b=1.0; iter=50; k=65;
var n,p:integer; sl,s,d,x,c,eps,h,r,y,e,f,o:real;
begin
c:=1; h:=0; p:=0; h:=(abs(b-a))/10;
eps:=1;
while 1.0 + eps/2 > 1.0 do
begin
eps:=eps/2;
end;
writeln ('Epselon =',eps);
x:=-1.0;
writeln('|----------------------------------------------------------------|');
writeln('| Таблица значений ряда Телора и функции ln(2+x) |');
writeln('|----------------------------------------------------------------|');
writeln ('| x | RT | ln(2+x) | Iter |');
writeln('|-------------------------|-------------|-------------|----------|');
while (x<=1) do
begin
r:=(ln(2)); s:=0; sl:=-1; p:=0;
f:=ln(2+x);
e:=eps*k;
while (p<iter) and (abs(sl)>e) do
begin
p:=p+1;
sl:=-(sl*x)/(p*2);
s:=s+sl;
end;
y:=r+s;
writeln ('| ',x,' | ',y:1:7,' | ',f:1:7,' | ',p:2,' |');
x:=x+h;
end;
writeln('|----------------------------------------------------------------|');
readln;
end.

А вот результаты работы
Epselon = 1.08420217248550E-0019
|--------------------------------------------------------------------------------|
| Таблица значений ряда Телора и функции ln(2+x) |
|--------------------------------------------------------------------------------|
| x | RT | ln(2+x) | Iter |
|-------------------------------------|-------------|-------------|----------|
| -1.00000000000000E+0000 | 0.0444259 | 0.0000000 | 16 |
| -8.00000000000000E-0001 | 0.2013225 | 0.1823216 | 15 |
| -6.00000000000000E-0001 | 0.3432884 | 0.3364722 | 14 |
| -4.00000000000000E-0001 | 0.4717444 | 0.4700036 | 13 |
| -2.00000000000000E-0001 | 0.5879763 | 0.5877867 | 11 |
| -5.55111512312578E-0017 | 0.6931472 | 0.6931472 | 2 |
| 2.00000000000000E-0001 | 0.7883098 | 0.7884574 | 11 |
| 4.00000000000000E-0001 | 0.8744164 | 0.8754687 | 13 |
| 6.00000000000000E-0001 | 0.9523290 | 0.9555114 | 14 |
| 8.00000000000000E-0001 | 1.0228271 | 1.0296194 | 15 |
| 1.00000000000000E+0000 | 1.0866165 | 1.0986123 | 16 |
|-----------------------------------------------------------------------------------|
Эх... коряво, так вот первая проблема, это первое значение RT там должен быть ноль ну или по крайней мере, что-то на него похожее, а вторая это значение нуля аргумента | -5.55111512312578E-0017. Если кто-то что-то сможет подсказать, благодарен заранее...
Commando
Re: КР Задание III
29 November 2005 18:06
В программе ошибочка есть:
вместо

>sl:=-(sl*x)/(p*2);
>s:=s+sl;

должно быть
sl:=-sl*x/2;
s:=s+sl/p;

А что касается нуля - такое значение появляется из-за неточности вещественных вычислений. В остальных тестах она просто не видна, так как проявляется только в 17 цифре после запятой...
Re: КР Задание III
29 November 2005 18:06
И ведь ты прав... Спасибо... Работает... Не ожидал я такого подвоха...
zzz
Re: КР Задание III
29 November 2005 21:09
"Анализ -- это основа!"
Р.Н. Молодожникова
Re: КР Задание III
29 November 2005 21:09
Можно сократить вывод мантиссы используя: Writeln(a:5:2);
кажется так: 5 - число литер всего, считая запятую, а 2 - число литер после запятой

кстати, это не будет являться нарушением стандарта?
zzz
Re: КР Задание III
02 December 2005 15:03
> Можно сократить вывод мантиссы используя: Writeln(a:5:2);
> кажется так: 5 - число литер всего, считая запятую, а 2 - число
> литер после запятой
>
> кстати, это не будет являться нарушением стандарта?
В стандартной книжке [9], п. 12.3 издания 1989 г., говорится, что можно. На лекции был дан ещё один полезный совет на эту тему. Кроме того, Вы можете сами проверить программу на соответствие стандарту:
pc -std iso k3.p
zzz
Re: КР Задание III
02 December 2005 16:04
Uriy 08-101 писал(а):

> Хотелось бы узнать, можно ли для выполнения данногозадания
> использовать одномерный массив (для задания коодринат от
> деления отрезка)? иначе записывать 10 констант...?
Поскольку массивы мы ещё не проходили, то нельзя. Да и совсем не надо. Генерация равноотстоящих точек индуктивным сложением позволит обойтись без массива. А вот если Вам нужны неравномерные разбиения, часто используемые в экономных и точных методах численного анализа, то массив потребуется, поскольку соответствующие вычисления обойдутся дороже. Вообще, надо провести функционально-стоимостной анализ, что дороже аренда лишних 144 байт памяти на 1 секунду или дополнительный прокат процессора 21164 в течение, скажем, той же секунды.
mrLEE
Re: КР Задание III
08 December 2005 21:09
У меня получилось в моём задании, что только в двух результатах из 11, ответы не сходяться на 1Е-11 т.е. расчет функции почти на 100% совпал с рядом тейлора smiling smiley)) это нормально???
zzz
Re: КР Задание III
08 December 2005 21:09
mrLEE писал(а):

> У меня получилось в моём задании, что только в двух
> результатах из 11, ответы не сходяться на 1Е-11 т.е. расчет
> функции почти на 100% совпал с рядом тейлора smiling smiley)) это
> нормально???
Чтобы точнее оценить Ваши результаты, надо знать, какую функцию и на на какой арифметике Вы табулируете, какой метод вычислений и вывода использован. Для объяснения расхождений исследуйте аналитически и графически функцию и её производные вблизи точки расхождения. Убедитесь, что всё запрограммировано точно.
mrLEE
Re: КР Задание III
08 December 2005 22:10
Я попробовал тот же самы алгоритм в другой среде (кстати , функция 1/2*ln(x)winking smiley , так там в одном результате из 11 , несовпадение значений на 1E-16 при том что Точность машины 1Е-19 (десятичная , т.к. гораздо удобней пользоваться десятичной точностью , а не двоичной , в формуле нахождения машинной эпсилон двойку можно заменить на 10)

Кстати в предыдущем посте , точность машины была 1Е-11.
zzz
Re: КР Задание III
11 December 2005 12:12
mrLEE писал(а):

> Я попробовал тот же самы алгоритм
проблема может быть и в самом алгоритме, вспомните лекцию о коварном вещественном типе с её многочисленными страшилками!
> в другой среде (кстати ,
> функция 1/2*ln(x)winking smiley , так там в одном результате из 11 ,
> несовпадение значений на 1E-16 при том что Точность машины
> 1Е-19 (десятичная , т.к. гораздо удобней пользоваться
> десятичной точностью , а не двоичной , в формуле нахождения
> машинной эпсилон двойку можно заменить на 10)

Зачем 10? Если для быстроты, то надо 1 000 или 1 000 000! Но даже для делителя 10 у Вас получится эпсилон на полпорядка (в 5 раз) грубее и фактически Вы потеряете один десятичный знак. Т.е. это ошибка. Делитель 2 является оптимальным, т.к. меньшие делители неточны, а большие недопустимо "занижают" меру точности. Это следствие двоичности мантиссы и нормализованности представления вещественного числа, в чём Вы пока не разобрались. Перечитайте конспект лекции и рекомендованную литературу. Кстати, в хорошей книжке [83] и в её более новом издании эпсилон вычисляется вдвое грубее, чем положено. Видимо, её авторы математики-вычислители, а не программисты.

> Кстати в предыдущем посте , точность машины была 1Е-11.
Странное значение. Обычно его порядок либо на 3 меньше (1 000!) или на 5-8 больше.
Gleb
Re: КР Задание III
11 December 2005 20:08
у меня почемуто получилось (14 вар)
что значения ряда и функции полностью совпадают
до последнего знака при любом x...
такое может быть?
zzz
Re: КР Задание III
12 December 2005 17:05
Gleb писал(а):

> у меня почемуто получилось (14 вар)
> что значения ряда и функции полностью совпадают
> до последнего знака при любом x...
> такое может быть?
Иногда бывает. Если нет ошибок в программе или если ряд сходится хорошо. Или если точность выше ширины поля для вывода. Или если вы печатаете в двух колонках одно и тоже значение.
mrLEE
Re: КР Задание III
12 December 2005 20:08
> хотелось бы узнать, нормально ли то, что все вычисления не идут
> дальше 2-й итерации в суммировании ряда тейлора?

А еще может быть , что где-то не поставлен модуль , и число по любому становиться меньше Эпсилона.......
Re: КР Задание III
12 December 2005 21:09
спасибо, проблемы была именно там...
Re: КР Задание III
17 December 2005 18:06
по видимому та же проблема, что и уже обсуждалась, но я не очень понял. нормально ли это или ошибка?

значения функции с нулем в числителе и ряда Тейлора так же с х в числителе, и при значении х=0, значения ряда тейлора и функции выводятся равными -5.55802314738335 E-0014, при том, при всех остальных значениях Х ряд и функия сошлись абсолютно!
машинное епсилон: 1.08420217248550E-0019
Re: КР Задание III
19 December 2005 09:09
хм... так можно получить ответ на свой вопрос?
zzz
Re: КР Задание III
19 December 2005 17:05
Uriy 08-101 писал(а):

> по видимому та же проблема, что и уже обсуждалась, но я не
> очень понял. нормально ли это или ошибка?
>
> значения функции с нулем в числителе и ряда Тейлора так же с х
> в числителе, и при значении х=0, значения ряда тейлора и
> функции выводятся равными -5.55802314738335 E-0014, при том,
> при всех остальных значениях Х ряд и функия сошлись абсолютно!
> машинное епсилон: 1.08420217248550E-0019
С точки зрения математики это ненормально. Нормально это или нет в Вашем реальном случае надо выяснить путём матанализа, вычэксперимента на ЭВМ и графопостроения, что обычно входит в решение задачи. Пренебречь этим нельзя, поскольку расхождение на 3,5 порядка! Перечитайте задание и лекцию, используйте компьютер для доказательства правильности расчётов.
К сожалению, только зарегистрированные пользователи могут писать в этом форуме.

Авторизоваться на форуме