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

Упростив вычисления за счет использования дополнительных переменных и/или скобочных форм, вычислить значения функции

e X 2

Y (X)= X sin(10 X)

и ее производной

Y '( X )= X (e X 210 cos(10 X)−2 Xe X 2sin(10 X))− e X 2sin(10 X)

X 2

на интервале значений Х от 40o до 50o с шагом 1o.

Для проверки правильности вычислений Y ′ вычислить её значение по формуле

без преобразований,а также по разностной схеме Y '(X)≈ Y ( X + ∆ X / 2) Y ( X −∆ X / 2)

X

при X=10-8.

Результаты вычислений вывести в виде таблицы с заголовками столбцов. В нача-ле каждой строки должен быть порядковый номер и соответствующее значение аргумен-та Х.

После отладки программы при значениях Х, изменяющихся от 40o до 50o с шагом 1o, добавить в программу ввод значений переменных A, B и H, которые должны пред-ставлять:

A - начало, B - конец диапазона значений X, H - шаг изменения X. Протестировать рабо-ту программы при разных вводимых данных.

#include"stdafx.h"

«Практикум по программированию на языке C в среде VS C++»


#include "math.h"

int _tmain(int argc, _TCHAR* argv[])

{

const double Pi=3.14;

double H=1;//Шаг изменения аргумента в градусах double A=40;//Начальное значение аргумента в градусах double B=50;//Конечное значение аргумента в градусах double F1,X,Y,P,P1,C,D,E,S;

int I;

//ЧТОБЫ ОТЛАДИТЬ ПРОГРАММУ С НАЧАЛЬНЫМИ ЗНАЧЕНИЯМИ A, B и H, //СДЕЛАЙТЕ КОММЕНТАРИЕМ СЛЕДУЮЩИЕ ОПЕРАТОРЫ printf И scanf

printf("Enter A, B, H:");    
scanf("%lf%lf%lf",&A,&B,&H);  
//Перевод градусов в радианы  
A=Pi*A/180;      
H=Pi*H/180;      
B=Pi*B/180+H/2;      
//Вывод заголовка таблицы.  
printf("\n # X Y(X) P\
P1   F1");  

X=A;//ПеременнаяXбудет представлять//текущее значение аргумента

I=0;//ПеременнаяIбудет представлять номер строки таблицыwhile(X<B)

{

//Увеличение значения счетчика строк таблицы

I=I+1;

//Вычисление значений дополнительных переменных

C=X*X; D=10*X; E=exp(-C); S=sin(D);

//Вычисление: Y - значения функции и // P - ее производной

//с использованием дополнительных переменных.

Y=E*S/X;

P= E*(D*cos(D)-S*(1+2*C))/C;

«Практикум по программированию на языке C в среде VS C++»


//Вычисление P1 - контрольного значения //производной без использования //дополнительных переменных.

P1=((exp(-X*X)*10.0*cos(10*X) -2*X*exp(-X*X)*sin(10*X))*X -exp(-X*X)*sin(10*X))/X/X;

//Вычисление F1 - контрольного значения //производной по разностной схеме.

F1=(exp(-(X+5E-9)*(X+5E-9))*sin(10*(X+5E-9))/(X+5E-9)

-exp(-(X-5E-9)*(X-5E-9))*sin(10*(X-5E-9))/(X-5E-9))/1E-8;

//Вывод в строку таблицы вычисленных значений printf("\n%3d%8.2lf%10.5lf%11.5lf%16.10lf%16.10lf"

,I,X*180/Pi,Y,P,P1,F1);

X=X+H; //Увеличение значения аргумента

}//whileprintf("\n");

return0;

}

При выводе заголовка таблиы управляющую строковую константу в операторе printf пришлось продолжить с начала новой строки текста программы, использовав знак

переноса \. Для выражений нет необходимости использования знака переноса, если про-должение текста выражения происходит на знаке операции, как, например, в операторах, вычисляющих значения переменных P1 и F1.

Результат работы программы при вводе исходных данных будет иметь вид.

Enter A, B, H:40 50 1

# X Y(X) P P1 F1
  40.00 0.56371 5.17198 5.1719834346 5.1719833971
  41.00 0.64022 3.60082 3.6008211921 3.6008211635
  42.00 0.68954 2.06375 2.0637549307 2.0637549114
  43.00 0.71268 0.60541 0.6054120938 0.6054120871
  44.00 0.71134 -0.73589 -0.7358908651 -0.7358908483
  45.00 0.68787 -1.92882 -1.9288233230 -1.9288233011

«Практикум по программированию на языке C в среде VS C++»


  46.00 0.64505 -2.94945 -2.9494455353 -2.9494455323
  47.00 0.58606 -3.78135 -3.7813491750 -3.7813491449
  48.00 0.51428 -4.41555 -4.4155472441 -4.4155472168
  49.00 0.43317 -4.85013 -4.8501348030 -4.8501347771
  50.00 0.34620 -5.08975 -5.0897482960 -5.0897481951

Обратите внимание на достаточно близкие, с точностью до 7-го.. 8-го знака зна-чения производной, вычисленные по аналитически полученной и по разностной форму-лам. Однако следует иметь в виду, что подобное сходство значений не всегда возможно и зависит как от самой функции, так и от значения аргумента и от точности представле-ния данных в машине.


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



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