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

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Вычисление относительной погрешности для функции.
Krjuger
сообщение 12.04.2011 17:19
Сообщение #1


Профи
****

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

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


В общем это некое продолжение моей прошлой темы,только обрастающее новыми подробностями.
У меня дана функция x(expx-1).Я эту функцию раскладываю я ряд Тейлора и получаю сумма от 1 до N от xn+1/n!.
Чтобы найти относительную погрешность мне надо а -n ый член разделить на сумму ряда,все это по модулю.Ну в общем то ,я думаю, вы и так понимаете как это делать.Суть заключается в том,у меня опять есть ограниченная разрядность мантисы и мне надо посмотреть как она будет влиять на результат.И как будет меняться N при которых мы будем выходить за граници возможностей нашей машины.

Я немного абстрагировался от этой задачи.что я сделал, при помощи маткада я посчитал,при каком N будет достигаться относительная погрешность на грани машинного эпсилон 10-16,это N =24.Да забыл сказать,что точка в которой мы раскладываем ряд у меня дана.Это -2.3.Затем я высчитал значение этой погрешности она составила 8.602898672363349*10^-16.Дальше я посомтрел как оно себя будет вести при разрядах мантисы от 10 до 25,при фиксированных исходных данных.Для рязрядности с 10 до 16 я получил ожидаемый результат,но дальше начало твориться что то вообще непонятное.Ну или точнее я не могу понять, как это интерпретировать.
ИзображениеФайл с самой программой тоже прикрепляю.


Прикрепленные файлы
Прикрепленный файл  ChMet_Laba_1.cpp ( 1.24 килобайт ) Кол-во скачиваний: 250
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Krjuger
сообщение 15.04.2011 21:00
Сообщение #2


Профи
****

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

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


В общем,я нашел основные ошибки и исправил их.Вышло то,что и получалось у тебя на скринах,volvo.
Я выложу код,который считает an,чтобы можно было сравнить с твоими результатами.

#include <iostream>
#include <math.h>
#include <iomanip>


using namespace std;

double Round(long double chislo, int n)
{
long double result;
__int64 iChislo;
double drob;
int k=0;
if (chislo<0)
k=-1;
else
k=1;
iChislo = (__int64) chislo;
drob = chislo - iChislo;
result=((__int64) (drob*pow(10.0,n)+k*0.5))/pow(10.0,n);
result = iChislo + result;
return result;
}


double Cut(long double value,int m)
{
int n=0;
long double temp=abs(value);
while (temp>=1)
{
temp=temp/10;
n++;
}
value=Round(value,abs(m-n));
return value;
}

double Sum(long double num,int n,int m)
{
long double temp=0;
long double tmp=0;
for (int i=1;i<=n;i++)
{
tmp=pow(num,i+1);
tmp=Cut(tmp,m);
for (int j=2;j<=i;j++)
{
tmp=tmp/j;
tmp=Cut(tmp,m);
}
temp+=tmp;
}
return temp;
}

double DeltaPogr (long double x,int n,int m)
{
long double temp=0;
long double an=0;
an=pow(x,n+1);
an=Cut(an,m);
for (int j=2;j<=n;j++)
{
an=an/j;
an=Cut(an,m);
}
temp=abs(an/Sum(x,n,m));
temp=Cut(temp,m);
return an;
}

void main()
{
long double num=0.0;
long double res=0.0;
long double x1,x2;
long double eps=0.0;
long double temp=0.0;
int m=0;
int s=0;
int N;
x1=-2.3;
x2=-17;
for (int i=5;i<=8;i++)
{
cout << "Razryadnost* manticy:" << i << endl;
N=0;
m=0;
s=0;
eps=1/pow(2.0,i-1);
temp=eps;
while (temp<=1)
{
temp*=10;
m++;
}
cout << "Epsilon:"<< eps << endl;
res=DeltaPogr(x1,1,m+1);
while (abs(res)>=eps)
{
s++;
res=DeltaPogr(x1,s,m+1);
cout << setprecision (10) << res << endl;
N++;
}
cout << "Kol-vo chlenov ryada:" << N << endl;
}
}


Пока что написано достаточно коряво,много повторений практически идентичных кусков кода.
Изображение

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

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


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

 



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