Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Для функции F (X) = 2 X ( X −1)−( X 2−1) ln( X 2−1) (X 2 −1)(X −1)2
при 9 значениях приращения аргумента DX =(0,5; 0,25; 0,125;...) вычислить:
1) точные значения приращений первообразной
DP (X)= | ln((X + DX)2 | −1) | − | ln(X 2 | −1) | , | |
(X + DX) −1 | X −1 | ||||||
а также вычислить
2) по формуле F(X+DX/2)·DX - приближенные значения
а) DP1, упростив вычисления за счет дополнительных переменных, б) DP2, не используя дополнительных переменных, и
3) |DP-DP1| - абсолютные ошибки вычисленных приближенных значений. Результаты вычислений и соответствующие значения DX вывести в виде таблицы
с заголовками столбцов и номерами строк. В последней колонке таблицы вывести в экс-поненциальной форме значения ошибки, чтобы был виден её порядок.
#include "stdafx.h" #include "math.h"
int _tmain(int argc, _TCHAR* argv[])
{
const double X=1.5;
double DP,DP1,DP2,D,R,K,X1,DX;
«Практикум по программированию на языке C в среде VS C++»
int I,N;
//Вывод заголовка таблицы
printf("%s%s"
," # DX DP "
,"DP1 DP2 |DP-DP1|");
//Переменная DX будет представлять //текущее приращение аргумента
DX=0.5;
for (I=1;I<10;I++)
{
//Вычисление точного значения DP(X)
DP=log((X+DX)*(X+DX)-1)/(X+DX-1)-log(X*X-1)/(X-1);
//Вычисление значений дополнительных переменных
X1=X+DX/2; K=X1*X1; R=K-1; D=X1-1;
//Вычисление приближенных значений DP(X) //с использованием дополнительных переменных
DP1=(2 * X1 * D - R * log(R)) / R / D*D*DX;
//без использования дополнительных переменных
DP2=(2*(X+DX/2)*(X+DX/2-1)-((X+DX/2)*(X+DX/2)-1) *log((X+DX/2)*(X+DX/2)-1)) /((X+DX/2)*(X+DX/2)-1)/(X+DX/2-1)/(X+DX/2-1)*DX;
//Вывод в строку таблицы вычисленных значений
printf("\n%3d%10.5lf %12.6lf %10.6lf %9.6lf %e"
,I,DX,DP,DP1,DP2,fabs(DP-DP2));
//Изменение значения приращения аргумента
DX=DX/2;
}//конец for
printf("\n");
return 0;
}
Результат работы программы представляет следующая таблица.
# | DX | DP | DP1 | DP2 | |DP-DP1| |
0.50000 | 0.652325 | 0.274404 | 0.487830 | 1.644955e-001 |
«Практикум по программированию на языке C в среде VS C++»
0.25000 | 0.518938 | 0.185754 | 0.475532 | 4.340651e-002 | |
0.12500 | 0.345837 | 0.106737 | 0.337340 | 8.496082e-003 | |
0.06250 | 0.203703 | 0.057105 | 0.202339 | 1.363851e-003 | |
0.03125 | 0.111248 | 0.029526 | 0.111054 | 1.947223e-004 | |
0.01563 | 0.058238 | 0.015011 | 0.058212 | 2.607041e-005 | |
0.00781 | 0.029810 | 0.007568 | 0.029806 | 3.374592e-006 | |
0.00391 | 0.015082 | 0.003800 | 0.015082 | 4.293168e-007 | |
0.00195 | 0.007586 | 0.001904 | 0.007586 | 5.414117e-008 |
В этом примере, в отличие от предыдущего, длинная строка заголовка таблицы была разбита на две последовательно выводимые по формату %s строковые константы. Такой приём, то есть помещение строковой константы в списке вывода, приходится ис-пользовать также в случае перекодирования символов строки.
Дата публикования: 2015-03-26; Прочитано: 214 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!