Построение обратной функции
.docxФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«КАЗАНСКИЙ (ПРИВОЛЖСКИЙ) ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
ИВМиИТ (ВМК)
КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ
СЕМЕСТРОВАЯ РАБОТА НА ТЕМУ:
«Построение обратной функции»
Работу выполнил:
студент 3 курса 09-315 группы
Халиков Роман Радиевич.
Работу проверил:
Глазырина Людмила Леонидовна.
“___”_______________ 2015 г.
______________
(подпись)
Казань 2015
Оглавление
Постановка задачи. 3
Решение задачи. 4
Вывод. 9
Листинг программы 9
Список используемой литературы. 11
Постановка задачи.
Цель задания – построить обратную функцию для Si(x) методом Ньютона (метод касательных) и методом хорд.
Построить таблицу обратной Si(x) функции F=Si-1(x):
, , .
Для этого решить уравнение:
, где
.
Найти такие, что для при n=10.
Решение задачи.
Метод Ньютона (метод касательных).
Задается начальное приближение . Следующие приближения находятся по формуле:
где =, а равна заданной функции.
Итерационный процесс выполняем до тех пор, пока выполняется условие
r(xi)=|Si(xik) – Fi|>10-6.
Функция r(xi) называется невязкой.
Так как исходная функция не является монотонной, то решаем задачу, разбив ее на две части: 1) при =0...3, 2) при =3...4.
В итоге получаем таблицу:
Кол-во итераций |
|||
0 |
0 |
0 |
1 |
0,3 |
0,298504 |
0,168324 |
3 |
0,6 |
0,58813 |
0,338262 |
4 |
0,9 |
0,860471 |
0,511557 |
4 |
1,2 |
1,108047 |
0,690249 |
4 |
1,5 |
1,324684 |
0,876905 |
4 |
1,8 |
1,505817 |
1,075033 |
5 |
2,1 |
1,648698 |
1,289849 |
5 |
2,4 |
1,752486 |
1,530031 |
5 |
2,7 |
1,818212 |
1,812478 |
6 |
3 |
1,848653 |
2,181079 |
6 |
3,1 |
1,851659 |
2,879586 |
7 |
3,2 |
1,851401 |
3,509055 |
6 |
3,3 |
1,848081 |
3,583177 |
5 |
3,4 |
1,841914 |
3,648314 |
5 |
3,5 |
1,833125 |
3,707515 |
4 |
3,6 |
1,821948 |
3,762454 |
4 |
3,7 |
1,808621 |
3,814159 |
4 |
3,8 |
1,79339 |
3,863332 |
3 |
3,9 |
1,776501 |
3,910462 |
3 |
4 |
1,758203 |
3,955925 |
3 |
График функций:
Метод хорд для построения обратной функции.
Задается начальное приближение, которое находится по методу Ньютона.
Следующие приближения находятся по формуле:
где =.
Получаем таблицу значений функции и график:
Кол-во итераций |
|||
0 |
0 |
0 |
1 |
0,3 |
0,298504 |
0,168324 |
4 |
0,6 |
0,58813 |
0,338262 |
4 |
0,9 |
0,860471 |
0,511557 |
5 |
1,2 |
1,108047 |
0,690249 |
5 |
1,5 |
1,324684 |
0,876906 |
5 |
1,8 |
1,505817 |
1,075033 |
6 |
2,1 |
1,648698 |
1,289849 |
6 |
2,4 |
1,752486 |
1,530031 |
7 |
2,7 |
1,818212 |
1,812478 |
8 |
3 |
1,848653 |
2,181081 |
9 |
3,1 |
1,851659 |
2,879586 |
9 |
3,2 |
1,851401 |
3,509055 |
8 |
3,3 |
1,848081 |
3,583177 |
6 |
3,4 |
1,841914 |
3,648314 |
6 |
3,5 |
1,833125 |
3,707514 |
5 |
3,6 |
1,821948 |
3,762454 |
5 |
3,7 |
1,808621 |
3,814159 |
4 |
3,8 |
1,79339 |
3,86333 |
4 |
3,9 |
1,776501 |
3,910462 |
3 |
4 |
1,758203 |
3,955925 |
4 |
Вывод.
Методы построения обратных Ньютона и хорд позволяют найти приближения для построения обратной функции. Экспериментально доказано, что методом Ньютона вычисления происходят быстрее, чем при методе хорд.
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace CHM_3
{
class Program
{
static int n = 11;
static double eps = 0.000001;
static int[] k_it_new = new int[n];
static int[] k_it_hordy = new int[n];
static void Main(string[] args)
{
double a = 3;
double b = 4;
double h1 = (b - a) / (n - 1);
double h2 = 1.0 * (4 - b) / (n - 1);
double[] x = new double[n];
for (int i = 0; i < n; i++)
{
x[i] = a + i * h1;
}
double[] f = new double[n];
for (int i = 0; i < n; i++)
{
f[i] = Sum(x[i]);
}
double[] F = FunctionF(x[0], x[n - 1], n);
using (StreamWriter sw = new StreamWriter("C:/Users/Роман/Desktop/3.txt"))
{
sw.WriteLine("Метод касательных Ньютона: x[i] \t f(x[i]) \t z[i] \t F(x[i]) \t i");
for (int i = 0; i < n; i++)
{
sw.WriteLine("{0:0.######} \t {1:0.######} \t {2:0.######} \t {3:0.######} \t {4:0.######}",
x[i], f[i], Newton(x[i], F[i], i), F[i], k_it_new[i]);
}
sw.WriteLine("Метод хорд: x[i] \t f(x[i]) \t z[i] \t F(x[i]) \t i");
for (int i = 0; i < n; i++)
{
sw.WriteLine("{0:0.######} \t {1:0.######} \t {2:0.######} \t {3:0.######} \t {4:0.######}",
x[i], f[i], Hordy(x[i], F[i], i), F[i], k_it_hordy[i]);
}
}
}
public static double Sum(double x)
{
double eps = 0.000001;
int i = 0;
double s = 0;
double ai = x;
double qn = 0;
while (Math.Abs(ai) >= eps)
{
s = s + ai;
qn = (-x * x * (2 * i + 1)) / ((2 * i + 3) * (2 * i + 3) * (2 * i + 2));
ai = ai * qn;
i++;
}
return s;
}
public static double Df(double x)
{
if (x == 0) return 1;
return Math.Sin(x) / x;
}
//Фyнкция Fi
public static double[] FunctionF(double x0, double xn, int n)
{
double[] F = new double[n];
for (int i = 0; i < n; i++)
{
F[i] = Sum(x0) + i * (Sum(xn) - Sum(x0)) / n;
}
return F;
}
//Метод Ньютона
public static double Newton(double x, double F, int i)
{
double z0 = x;
k_it_new[i] = 1;
double r = Sum(z0) - F;
double zk = z0 - r / Df(z0);
while (Math.Abs(r) > eps)
{
r = Sum(z0) - F;
zk = z0 - r / Df(z0);
z0 = zk;
k_it_new[i]++;
}
return zk;
}
//Метод хорд
public static double Hordy(double x, double F, int i)
{
double z0 = x;
double zk2 = 0;
k_it_hordy[i] = 1;
double r = Sum(z0) - F;
double zk = z0 - r/Df(z0);
while (Math.Abs(r) > eps)
{
r = Sum(zk) - F;
zk2=(z0*(Sum(zk)-F)-zk*(Sum(z0)-F))/(Sum(zk)-Sum(z0));
z0 = zk;
zk = zk2;
k_it_hordy[i]++;
}
return zk2;
}
}
}
Список используемой литературы.
1. Мацокин А. М., Сорокин С. Б. Численные методы: Курс лекций / Новосиб. гос. ун-т. Новосибирск, 2006: Численный анализ. 132 с.
2. Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы / Издательство «Лаборатория знаний», 7 издание, 2012, 636 с.
|
Страница
|
|
|
|