Главная страница
Навигация по странице:

  • Алгебраический многочлен -й степени

  • Задание № 1.

  • Задание № 2.

  • Задание №1

  • Задание №2.

  • Отчет по лабораторным работам по дисциплине Конструирование программ


    Скачать 356.47 Kb.
    НазваниеОтчет по лабораторным работам по дисциплине Конструирование программ
    Дата06.03.2021
    Размер356.47 Kb.
    Формат файлаdocx
    Имя файлаOtchyot.docx
    ТипОтчет
    #182374
    страница3 из 9
    1   2   3   4   5   6   7   8   9

    Лабораторная работа № 3. Интерполирование и экстраполирование данных. Интерполяционный многочлен Ньютона


    Интерполяционный многочлен Ньютона является другой формой записи единого интерполяционного многочлена. Применение многочлена Ньютона имеет практические преимущества по сравнению с формулой Лагранжа и в случае неравноотстоящих, и особенно в случае равноотстоящих узлов.

    Алгебраический многочлен -й степени

    (2.7.1)

    называется интерполяционным многочленом Ньютона с разделенными разностями.

    Очевидна аналогия формулы (2.7.1) с формулой Тейлора. Действительно, так как по теореме 2.7 то Формулы подраздела 2.4 о погрешности интерполяции в точке , не являющейся узловой, можно уточнить следующим образом:

    Задание № 1. Построить интерполяционный многочлен Ньютона по неравноотстоящей сетке узлов и найти приближенное значение интерполируемой функции при значении аргумента .

    № варианта







    5

    1.090

    1.01

    12.6183

    10

    1.250

    1.08

    12.7644

    15

    1.275

    1.11

    12.9122

    20

    1.316

    1.21

    13.0617

    25

    1.488

    1.26

    13.2130

    30

    1.343

    1.33

    13.3660







    1.46

    13.5207







    1.51

    13.8357

    Задание_№_2.'>Задание № 2. Вычислить приближенное значение функции по интерполяционной формуле Ньютона для интерполяции вперед или назад.

    № варианта







    5

    1.285

    1.20

    10.6044

    10

    1.211

    1.21

    11.3276

    15

    1.272

    1.22

    11.9671

    20

    1.228

    1.23

    12.5324

    25

    1.263

    1.24

    13.0328

    30

    1.237

    1.25

    13.4776







    1.26

    13.8759







    1.27

    14.2367







    1.28

    14.5688







    1.29

    14.8809


    Задание №1

    #include

    #include

    using namespace std;

    int main()

    {

    double a[9][8], x, b[8];

    do

    {

    for (int i = 0; i < 8; ++i)

    {

    cout << "x" << i << " = ";

    cin >> a[0][i];

    cout << "y" << i << " = ";

    cin >> a[1][i];

    }

    for (int i = 2; i < 9; ++i)

    for (int j = 0; j < 9 - i; ++j)

    a[i][j] = (a[i - 1][j + 1] - a[i - 1][j]) / (a[0][i+j-1] - a[0][j]);

    for (int z = 7; z >= 0; --z)

    {

    b[z] = a[z + 1][0];

    if (z == 7) continue;

    for (int i = 0; i < z + 1; ++i)

    b[z] -= a[z+2][0] * a[0][i];

    if (z == 6) continue;

    for (int i = 0; i < z + 2; ++i)

    for (int j = 0; j < i; ++j)

    b[z] += a[z+3][0] * a[0][i] * a[0][j];

    if (z == 5) continue;

    for (int i = 0; i < z + 3; ++i)

    for (int j = 0; j < i; ++j)

    for (int k = 0; k < j; ++k)

    b[z] -= a[z + 4][0] * a[0][i] * a[0][j] * a[0][k];

    if (z == 4) continue;

    for (int i = 0; i < z + 4; ++i)

    for (int j = 0; j < i; ++j)

    for (int k = 0; k < j; ++k)

    for (int l = 0; l < k; ++l)

    b[z] += a[z + 5][0] * a[0][i] * a[0][j] * a[0][k] * a[0][l];

    if (z == 3) continue;

    for (int i = 0; i < z + 5; ++i)

    for (int j = 0; j < i; ++j)

    for (int k = 0; k < j; ++k)

    for (int l = 0; l < k; ++l)

    for (int s = 0; s < l; ++s) b[z] -= a[z + 6][0] * a[0][i] * a[0][j] * a[0][k] * a[0][l] * a[0][s];

    if (z == 2) continue;

    for (int i = 0; i < z + 6; ++i)

    for (int j = 0; j < i; ++j)

    for (int k = 0; k < j; ++k)

    for (int l = 0; l < k; ++l)

    for (int s = 0; s < l; ++s)

    for (int u = 0; u < s; ++u)

    b[z] += a[z + 7][0] * a[0][i] * a[0][j] * a[0][k] * a[0][l] * a[0][s] * a[0][u];

    }

    b[0] -= a[8][0] * a[0][0] * a[0][1] * a[0][2] * a[0][3] * a[0][4] * a[0][5] * a[0][6];

    for (int i = 7; i >= 1; --i)

    cout << b[i] << "x^" << i << "+";

    cout << b[0] << endl;

    do

    {

    cout << "x = ";

    cin >> x;

    double temp = 1, result = 0;

    result += b[0];

    for (int i = 1; i < 8; ++i)

    {

    temp *= x;

    result += temp*b[i];

    }

    cout << "y(" << x << ") = " << result << endl;

    x = _getch();

    } while (x != 27);

    x = _getch();

    } while (x != 27);

    return 0;

    }

    Задание №2.

    #include

    #include

    using namespace std;

    int fact(int n)

    {

    if (n == 1) return 1;

    else return n*fact(n - 1);

    }

    int main()

    {

    double a[6][10], x, q, h, result, temp;

    int k;

    do

    {

    cout << "x = ";

    cin >> x;

    for (int i = 0; i < 10; ++i)

    {

    cout << "x" << i << " = ";

    cin >> a[0][i];

    cout << "y" << i << " = ";

    cin >> a[1][i];

    }

    h = a[0][1] - a[0][0];

    for (int j = 2; j < 6; ++j)

    for (int i = 0; i < 9; ++i)

    a[j][i] = a[j - 1][i + 1] - a[j - 1][i];

    if (x > a[0][4])

    {

    for (k = 5; k < 10; ++k)

    if (a[0][k] > x) break;

    q = (x - a[0][k]) / h;

    result = a[1][k];

    temp = 1;

    for (int i = 1; i < 5; ++i)

    {

    temp *= q + i - 1;

    result += a[i + 1][k - i] / fact(i)*temp;

    }

    }

    else

    {

    for (k = 4; k > 0; --k)

    if (a[0][k] < x) break;

    q = (x - a[0][k]) / h;

    result = a[1][k];

    temp = 1;

    for (int i = 1; i < 5; ++i)

    {

    temp *= q - i + 1;

    result += a[i+1][k-1] / fact(i)*temp;

    }

    }

    cout << "y(" << x << ") = " << result << endl;

    x = _getch();

    } while (x != 27);

    }
    1   2   3   4   5   6   7   8   9


    написать администратору сайта