Рассчитать оптимальный шаг для построения таблицы значений функции
.pdf
Зарегистрируйся в 2 клика в Кампус и получи неограниченный доступ к материалам с подпиской Кампус+ 🔥
Рассчитать оптимальный шаг для построения таблицы значений функции, которая позволит с наименьшей погрешностью вычислить значения по приближенной формуле центральной разностной производной, если табличные значения функции вычислены с точностью 0.0001.
Найти погрешность, с которой можно найти с вычисленным в пункте a) оптимальным шагом.
Написать программу, которая
выводит таблицу значений функции с рассчитанным оптимальным шагом h на интервале [c-h, c+16h] (таблица должна содержать 2 столбца: значения аргумента и соответствующее ему округленное до 0.0001 значение функции);
По составленной таблице вычисляет приближенные значения в точках по формуле центральной разностной производной;
выводит таблицу точных и приближенных значений производной (таблица должна содержать 3 столбца: значения xi из пункта б) и соответствующие им приближенные и точные значения производной).
В качестве функции взять где N=3 – последняя цифра книжки.
Нужно полное решение этой работы?
Решение
Рассчитаем оптимальный шаг дифференцирования для приближенной формулы центральной разностной производной функции , если значения функции с точностью 0.0001.
Известно, что оптимальный шаг для приближенной формулы центральной разностной производной оценивается по следующему равенству:
hопт =, где.
Найдем производные
Так как функция косинус может принимать значения от -1 до 1, то для любого x. Следовательно, .
По условию задачи погрешность значений функции равна . Получаем hопт =.
При выбранном оптимальном шаге hопт=0.027 погрешность дифференцирования оценивается по формуле:
Составляем программу на языке C++ (среда Code::Blocks):
#include <iostream>
#include <cmath>
#include<locale.h>
using namespace std;
double X[18], Y[18];
double xx[16], yy[16], Dy[16];
//функция
double F(double x)
{
return sin(4*x)/4;
}
//точная производная функции
double F1(double x)
{
return cos(4*x);
}
int main(void)
{
setlocale(LC_ALL,"Russian") ;
double h=0.027;
int temp;// для задержки клавиатуры
//таблица значений функции с рассчитанным шагом
cout<<"Значения табличной функции"<<endl;
cout.precision(5);// задает количество знаков после десятичной точки
cout.width(6);
for(int i = 0 ; i < 18 ; i++)
{
X[i]=4-h+i*h;
Y[i]=F(X[i]);
//округляем значения функции до 4-х знаков после запятой
Y[i]=round(F(X[i])*10000)/10000;
cout<<"X = "<<X[i]<<" \tY = "<<Y[i]<<endl;
}
//точки, в которых находим производную
for(int i = 0 ; i < 16 ; i++)
{
xx[i]=4+i*h;
yy[i]=F1(xx[i]);
}
//находим приближённые значения по ф-ле центральных разностей
cout<<endl<<"Приближённые и точные значения"<<endl;
cout.precision(4);
for(int i = 0 ; i < 16 ; i++)
{
Dy[i]=(Y[i+2]-Y[i])/(2*h);
cout<<"X = "<<xx[i]<<" \tПрибл f''(x) = "<<Dy[i]<<" \t Точное f''(x) = "<<yy[i]<<endl;
}
cin>>temp;
}
Результаты выполнения:
Таким образом, погрешность вычисления производной не превысила рассчитанную погрешность 0,0057.