Задача
Численно убедиться в справедливости равенства, для чего для заданного значения аргумента [latex]x[/latex] вычислить левую его часть и разложение, стоящее в правой части, с заданной погрешностью [latex]\varepsilon[/latex] . Испытать разложение на сходимость при разных значениях аргумента, оценить скорость сходимости, для чего вывести число итераций [latex]n[/latex] (слагаемых или сомножителей), необходимых для достижения заданной точности.
[latex]\frac{\pi ^{2}}{8}-\frac{\pi }{4}\cdot |x|=\frac{cosx}{1!}+\frac{cos3x}{3^{2}}+\frac{cos5x}{5^{2}}+\cdots+\frac{cos((2n+1)\cdot x) }{(2\cdot n+1)^{2}}+\cdots[/latex],
[latex]|x|<1[/latex].
x | E | Левая часть (left). | Правая часть (right). | Разность (right-left). | n | Комментарий. |
0.6 | 0.000001 | 0.7624616521 | 0.7604912379 | 0.0019704142 | 3 | Пройден. |
0.75 | 0.000035 | 0.6446519276 | 0.6290694254 | 0.0155825022 | 3 | Пройден |
0.4 | 0.00002 | 0.9195412848 | 0.9143769743 | 0.0051643104 | 5 | Пройден |
4 | 0.0001 | – | – | – | – | Некорректно задан аргумент x (|x|<1)Не пройден. |
0.4 | 0 | 0.9195412848 | 0.9195412848 | 0.9195412848 | бесконечность | Погрешность равна 0, тогда правая часть стремится к левой.Пройден. |
Необходимо доказать равенство левой и правой части при заданных [latex]x[/latex] и [latex]\varepsilon[/latex].
Мы высчитываем левую часть [latex]\frac{\pi ^{2}}{8}-\frac{\pi }{4}\cdot |x|[/latex], с заданным аргументом [latex]x[/latex]. Затем в цикле do высчитываем значение правой части [latex]\frac{cosx}{1!}+\frac{cos3x}{3^{2}}+\frac{cos5x}{5^{2}}+\cdots+\frac{cos((2n+1)\cdot x) }{(2\cdot n+1)^{2}}+\cdots[/latex], до тех пор, пока разность правой и левой части не превысит заданную погрешность [latex]\varepsilon[/latex]. После этого программа выводит значение левой и правой части, их разницу и количество итераций для заданной погрешности.
Ниже представлена сама программа (C++).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include <iostream> #include <math.h> using namespace std; int main() { int n=0; double x, E, left, right=0.0, differ; //начальные переменные. scanf("%lf %lf", &x, &E); //ввод аргумента и погрешности. if(fabs(x)>1) //Модуль аргумента не должен превышать единицу. { printf("Некорректно задан аргумент x (|x|<1)"); } else { left=(pow(M_PI,2)/8)-((M_PI/4)*fabs(x)); //вычисление левой части. if (E!=0) { do { right+=cos((2*n+1)*x)/((4*n*n)+4*n+1); //вычисление правой части. n++; differ=right-fabs(left); //разность левой и правой части. } while (differ>E); //условие, при котором цикл останавливается. printf("Левая часть равна = %.10lf \nПравая часть равна = %.10lf \n",left,right); printf("После n=%d правая часть исследуемого выражения отличается от левой части более, чем на %.10lf,", n, E); printf("а именно на %.10lf \n",fabs(differ)); } else { printf("Погрешность равна 0, тогда правая часть стремится к левой, и равняется %.10lf, тогда n стремится в бесконечность",left); } } return 0; } |
Код на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import java.util.*; import java.lang.*; import java.io.*; class Brovko { public static void main (String[] args) throws java.lang.Exception { int n=0; double x, E, left, right=0.0, differ; //начальные переменные. Scanner in = new Scanner(System.in); //ввод аргумента и погрешности. x=in.nextDouble(); E=in.nextDouble(); if(Math.abs(x)>1) //Модуль аргумента не должен превышать единицу. { System.out.printf("Некорректно задан аргумент x (|x|<1)"); } else { left=(Math.pow(Math.PI,2)/8)-((Math.PI/4)*Math.abs(x)); //вычисление левой части. if (E!=0) { do { right+=Math.cos((2*n+1)*x)/((4*n*n)+4*n+1); //вычисление правой части. n++; differ=right-Math.abs(left); //разность левой и правой части. } while (differ>E); //условие, при котором цикл останавливается. System.out.printf("Левая часть равна = %.10f \nПравая часть равна = %.10f \n",left,right); System.out.printf("После n=%d правая часть исследуемого выражения отличается от левой части более, чем на %.10f,", n, E); System.out.printf("а именно на %.10f \n",Math.abs(differ)); } else { System.out.printf("Погрешность равна 0, тогда правая часть стремится к левой, и равняется %.10f, тогда n стремится в бесконечность",left); } } } } |
Так же вы можете воспользоваться ссылкой (C++)/ссылкой (Java), для ознакомления с программой.
Зачтено.
Следовало бы «поисследовать» и указать, что х не должно превышать по модулю пи, но тесты на это «намекают».
Засчитано, 10 баллов.