Приближение [latex]\sin(x)[/latex]. Функция [latex]y=\sin(x)[/latex] на отрезке [latex][0;\frac{\pi}{2}][/latex] хорошо аппроксимируется разложением: [latex]y=x-\frac{x^3}{6} + \frac{x^5}{120}[/latex]. Для заданного значения аргумента [latex]x[/latex] вычислить [latex]y[/latex] по этой формуле и сравнить с точным значением, вычисленным с помощью стандартной функции [latex]\sin[/latex].
x | Ответ: | Комментарий: |
0 | 0 | Тест пройден |
0.5 | 0.000002 | Тест пройден |
1 | 0.000196 | Тест пройден |
1,57 | 0,004509 | Тест пройден |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> #include <cmath> using namespace std; int main() { float x; //Описание переменной для хранения входных данных. scanf("%f", &x); //Чтение из стандартного потока. float f;//Описание переменной для хранения входных данных. f=x-(x*x*x)/6+(x*x*x*x*x)/120; float b; b=abs(sin(x)-f); //Модуль разности двух слагаемых. printf("%f", b) ; return 0; } |
По условию задачи необходимо для заданного значения аргумента [latex]x[/latex] вычислить [latex]y[/latex] по этой формуле и сравнить с точным значением, вычисленным с помощью стандартной функции [latex]\sin[/latex]. Вводим переменную [latex]x[/latex] c типом данных «float»,
так как нам потребуются не только целые числа на отрезке [latex][0;\frac{\pi}{2}][/latex].
После введения числа выводим модуль разности значения [latex]\sin(x)[/latex] и значения функции по формуле:
[latex]f=x-\frac{x^3}{6}+\frac{x^5}{120}[/latex].Погрешность при аппроксимации функции возрастает с увеличением [latex]x[/latex]. На отрезке [latex]x \in [0;0.4][/latex] погрешности практически нет, начиная с [latex]x=0.5[/latex] погрешность возрастает и в точке [latex](\frac{\pi}{2})[/latex], [latex]b[/latex](погрешность) составляет 0.004509. При [latex]x>\frac{\pi}{2}[/latex] она становится значительной, поэтому формула [latex]f=x-\frac{x^3}{6}+\frac{x^5}{120}[/latex] подходит лишь для аппроксимации на отрезке [latex][0;\frac{\pi}{2}][/latex].
Для выполнения программы и проверки тестов можно воспользоваться следующим объектом.
Код программы на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) { Scanner in = new Scanner(System.in); float x; x = in.nextFloat(). float f; f=x-(x*x*x)/6+(x*x*x*x*x)/120; double b; b=Math.abs(Math.sin(x)-f); System.out.println(b); } } |