- •1. Внутренняя сортировка данных методом подсчета. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •2. Внутренняя сортировка данных методом выбора. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •3. Внутренняя сортировка данных методом простых вставок. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •4. Внутренняя сортировка данных методом Шелла. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •5. Внутренняя сортировка данных методом «пузырька». Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •6. Внутренняя сортировка данных «быстрым» методом. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •7. Численное решение уравнения методом половинного деления (дихотомии). Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •8. Численное решение уравнения методом хорд. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •9. Численное решение уравнения методом Ньютона (касательных). Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •11. Численное решение уравнения методом секущих. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •12. Численное решение уравнения методом простых итераций. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •13. Численное интегрирование методом прямоугольников. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •14. Численное интегрирование методом трапеций. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
- •15. Численное интегрирование методом парабол. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
11. Численное решение уравнения методом секущих. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
Алгоритм вроде такой же, как и в методе Ньютона, только сравниваем не так:
while (abs(f(x)) > epsilon)
А так:
while (abs(f(x)) < epsilon)
const double a = 0.0;
const double b = 1.0;
const double x0 = 0.5;
const double epsilon = 0.000001;
double f(double x)
{
return (x-0.25)*(x-0.25);
}
double df(double x)
{
return 2*x;
}
int main(int argc , char *argv[])
{
double x = x0;
while (abs(f(x)) < epsilon)
{
x = x - f(x)/df(x);
}
std::cout << x << std::endl;
}
12. Численное решение уравнения методом простых итераций. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
Применяется к уравнению вида x=u(x) на отрезке [a,b], где:
1. модуль производной функции u(x) невелик: |u’(x)|<=q<1 (x∈[a,b])
2. значения u(x) лежат на [a,b], т.е. a<=u(x)<=b при x∈[a,b].
Но так как мы точно знаем (из первого этапа решения задачи), что на этом отрезке есть корень, и он только один, то условие 2 можно опустить.
Сведение уравнения f(x)=0 к нужному виду обычно осуществляют так: выражают один из x, входящих в уравнение, например уравнение е^х-х-7=0 приводят к виду: x=е^x-7 или x=ln(x+7).
В первом случае |u’(x)|=|e^x| на левом конце отрезка (0) не меньше единицы, что не подходит по условию 1, во втором же случае |u’(x)|=|1/(x+7)| явно меньше единицы, что нас и устраивает.
Суть метода итераций заключается в построении рекуррентной последовательности чисел, сходящейся к решению, по формуле хк+1 = u(xк), к=0,1,2,…, где х0∈[a,b] -произвольная точка. Для удобства можно вводить х0=a.
#define TESTPRINT
double Equation( double x ) {
return pow( cos(x+0.5), (double)(1./3.) );
}
int main() {
const double eps = 0.0001;
double x0, x, xNext;
int nIter;
printf( "x0 = ? " ); scanf( "%lg", &x0 );
x = x0;
xNext = Equation( x );
nIter = 1;
while ( fabs( xNext-x ) > eps ) {
x = xNext;
xNext = Equation( x );
++nIter;
#ifdef TESTPRINT
printf( "%.5g %.5g %d\n", x, xNext, nIter );
#endif
}
printf( "The root %.5g has been reached to within %.5g after %d iterations.\n",
xNext, eps, nIter );
getch();
return 0;
}
13. Численное интегрирование методом прямоугольников. Эффективность данного алгоритма. Привести фрагмент программы, поясняющий данный алгоритм.
Метод прямоугольников — метод численного интегрирования функции одной переменной, заключающийся в замене подынтегральной функции на многочлен нулевой степени, то есть константу, на каждом элементарном отрезке. Если рассмотреть график подынтегральной функции, то метод будет заключаться в приближённом вычислении площади под графиком суммированием площадей конечного числа прямоугольников, ширина которых будет определяться расстоянием между соответствующими соседними узлами интегрирования, а высота — значением подынтегральной функции в этих узлах.
Левые прямоугольники
Средние прямоугольники
Правые прямоугольники
Пример для левых прямоугольников:
double f(double x){
return sin(x);
}
double rectangle_integrate(double a, double b, int n, double (*f)(double) ){
double result, h;
int i;
h = (b-a)/n;
result = 0.0;
for(i=0; i result += f( a + h * i );
}
result *= h;
return result;
}
int main(void){
double integral;
integral=rectangle_integrate(0,2,100,f);
printf("The value of the integral is: %lf \n", integral);
}
Пример для средних прямоугольников:
double f(double x){
return sin(x);
}
double rectangle_integrate(double a, double b, int n, double (*f)(double) ){
double result, h;
int i;
h = (b-a)/n;
result = 0.0;
for(i=1; i result += f( a + h * (i - 0.5) );
}
result *= h;
return result;
}
int main(void){
double integral;
integral=rectangle_integrate(0,2,100,f);
printf("The value of the integral is: %lf \n", integral);
}
Пример для правых прямоугольников:
double f(double x){
return sin(x);
}
double rectangle_integrate(double a, double b, int n, double (*f)(double) ){
double result, h;
int i;
h = (b-a)/n;
result = 0.0;
for(i=1; i result += f( a + h * i );
result *= h;
return result;
}
int main(void){
double integral;
integral=rectangle_integrate(0,2,100,f);
printf("The value of the integral is: %lf \n", integral);
}