Методические указания по выполнению задания
Задача 1. Используя оператор for, вычислить на ПК значение функции , при х=0.5. В приведенной формуле сомножитель 5x2 не зависит от параметра n,поэтому расчетную формулу можно упростить как: . Параметром цикла здесь является аргумент n и накопление суммы будет происходить по (1/n).
При вычислении конечных сумм и произведений искомый результат формируется постепенно.
При вычислении суммы сначала вычисляется S1 = S0 + S(n1), во втором повторе цикла эта сумма увеличивается на второе слагаемое и получается S2 = S1 + S(n2), в третьем повторе - на третье слагаемое S3 = S2 + S(n3) и т.д. Здесь S0 - начальное значение суммы и т.к. S1 должна быть равна S(n1), то S0 = 0.
При вычислении произведения сначала вычисляется Р1 = Р0*P(n1), затем Р2 = Р1*P(n2) и т.д. Здесь Р0 - начальное значение произведения и т.к. Р1 должно быть равно P(n1), то Р0 = 1.
Поскольку сомножитель 5×х2 не зависит от параметра n его можно вынести за знак суммы, и в тело цикла это произведение включать не следует. Тем самым сокращается время исполнения программы. Блок-схема алгоритма решения задачи (Рис. 4.1) и соответствующая ей программа будут иметь вид:
|
Результаты работы программы:
| |||
Задача 2. Вычислить на ПК значения функции
|
Результаты работы программы:
| |||
Задача 3. Используя операторы while…do и do…, while вычислить значения функции
, в диапазоне изменения x от 0 до 3 с шагом 0.5.
При решении данной задачи можно использовать алгоритмы циклической структуры "ДО" и "ПОКА". Параметром данного цикла является х, причем при каждом повторном вычислении его значение следует увеличивать на величину шага. По условию задачи начальным значением х примем 0, а конечным значением – 3.
Рассмотрим разные варианты решения этой задачи.
|
|
Задания на дом для самостоятельного решения.
Составить блок-схему и написать программу, вычисляющую сумму (Задача4), заданную по варианту, приведенному в таблице 4.3. Для решения задачи использовать оператор for …
Таблица 4.3
N | Задача4 | Задача5 | Е | х |
0,005 | 1,2 | |||
0,002 | 0,9 | |||
3 | . | 0,003 | 1,4 | |
0,004 | 0,7 | |||
0,001 | 0,6 | |||
0,005 | 0,8 | |||
0,004 | 1,5 | |||
0,002 | 1,2 | |||
0,003 | 0,9 | |||
0,001 | 1,4 | |||
0,004 | 0,7 | |||
y = x10 + 2x9 + 3x8 +... + 10x + 11, где х=0,5 | 0,005 | 0,9 |
Составить блок-схему и написать программу, вычисляющую заданную функцию (Задача5), приведенную по варианту в таблице 4.3, разложив ее в ряд с заданной точностью Е. Определить минимально необходимое число членов ряда, сами члены ряда и их сумму, обеспечивающие представление функции с заданной точностью.
Методические указания по выполнению задачи 5
Представить функцию в виде ряда с точностью 0,001 при х=0,8.
Как известно из математики функцию y(x) можно разложить в ряд и рассчитать путем сложения первых нескольких n членом ряда. Например, y= a0 + a1 + a2 + a3 + a4 + …+ an +...
Функция e-x может быть разложена в ряд Тейлора. Ряд сходящийся и рассчитывается путем сложения n членов ряда. Для организации циклических вычислений необходимо рассчитывать члены ряда, сравнивать их значения с заданной точностью |an|>E и при выполнении условия сравнения производить их суммирование. Цикл завершается, когда |an| £ E.
Для организации циклического вычисления сначала запишем выражения для n-го и (n +1)-го членов ряда заданной функции:
Для расчета следующего an+1 члена ряда используем рекуррентное соотношение, связывающее его с предыдущим an членом через общий множитель qn.
Тогда an+1 = an × qn. Такой подход позволит избежать вычисление факториала и возведения в произвольную степень. Произведем алгебраические преобразования и упростим выражение для qn.
Подставляя n=0 в заданную формулу , получим начальные значения для расчета функции e-x . А именно: n=0, a0=1, s0= a0.
На рис. 4.5 приведёна блок-схема, программа и результаты,
подтверждающие решение задачи.
double x = 0.8, E = 0.01;
double a, s, q, y, d;
int n = 0;
a = 1; s = a;
Console.WriteLine(" Результаты вычислений");
Console.WriteLine();
Console.WriteLine("---------------------------------------------");
Console.WriteLine(" Сумма s | Количество n | Члены ряда a |");
Console.WriteLine("---------------------------------------------");
while (Math.Abs(a) > E)
{
q = -x / (n + 1);
a = q * a;
s = s + a;
n++;
Console.WriteLine("{0,5:E} | {1} | {2,8:E}", s, n,a);
}
Console.WriteLine("---------------------------------------------");
Console.WriteLine(" a ={0:0.######}", a);
Console.WriteLine(" n = " + n);
Console.WriteLine("Сумма S = {0:0.######}", s);
Console.WriteLine();
y = Math.Exp(-x);
Console.WriteLine("Функция y= {0:0.######}", y);
Console.WriteLine();
d = Math.Abs(y - s);
Console.WriteLine("Погрешность вычисления {0:0.######}", d);
Console.ReadKey();
|
Как видно для представления функции e-x c точностью вычисления E=0.001 при x=0.8 достаточно сложить первые 6 членов ряда (a0,…a5).
Измените, точность вычисления Е. Проанализируйте результат представления заданной функции. Сделайте выводы, как погрешность вычисления влияет на результат представления функции.