Пример выполнения задания с использованием цикла for

Для функции F (X) = 2 X ( X 1)( X 21) ln( X 21) (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++»


intI,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 строковые константы. Такой приём, то есть помещение строковой константы в списке вывода, приходится ис-пользовать также в случае перекодирования символов строки.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: