Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Упростив вычисления за счет использования дополнительных переменных и/или скобочных форм, вычислить значения функции
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; //Увеличение значения аргумента
}//while printf("\n");
return 0;
}
При выводе заголовка таблиы управляющую строковую константу в операторе 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-го знака зна-чения производной, вычисленные по аналитически полученной и по разностной форму-лам. Однако следует иметь в виду, что подобное сходство значений не всегда возможно и зависит как от самой функции, так и от значения аргумента и от точности представле-ния данных в машине.
Дата публикования: 2015-03-26; Прочитано: 362 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!