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

  • Задание № 1.

  • Код программы

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


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

    Лабораторная работа № 4. Аппроксимация функции по методу наименьших квадратов


    Очень часто при анализе эмпирических данных необходимо найти явную функциональную зависимость между двумя величинами и , полученными в результате измерений. Поскольку опытные данные всегда содержат ошибки, то строить интерполяционный многочлен не рационально, так как при интерполяции ошибки повторяются. Желательно по возможности сгладить и минимизировать ошибки наблюдений. Этот результат достигается построением многочлена наилучшего среднего квадратического приближения по методу наименьших квадратов.

    Итак, если аппроксимируется многочленом вида , так что система базисных функций имеет вид , то неизвестные коэффициенты многочлена по методу наименьших квадратов определяются из решения системы


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






    Номера вариантов

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    0.15

    0.16

    1.89

    -1.92

    1.10

    -2.80

    0.00

    4.01

    0.12

    4.13

    2.97

    0.30

    0.02

    2.07

    -1.60

    1.20

    -2.66

    0.01

    4.06

    0.31

    4.11

    3.07

    0.45

    0.28

    2.30

    -1.57

    1.18

    -2.36

    0.24

    3.88

    0.48

    3.87

    3.04

    0.60

    0.42

    2.26

    -1.41

    1.14

    -2.41

    0.74

    3.98

    0.45

    3.74

    3.30

    0.75

    0.31

    2.34

    -1.36

    1.17

    -2.13

    1.02

    4.36

    0.84

    3.85

    3.27

    0.90

    0.41

    2.66

    -0.97

    1.00

    -1.82

    1.31

    4.18

    0.73

    3.71

    3.54

    1.05

    0.42

    2.88

    -0.59

    0.99

    -1.74

    1.53

    4.16

    0.77

    3.53

    3.79

    1.20

    0.36

    2.85

    -0.71

    0.95

    -1.76

    1.90

    4.51

    0.64

    3.56

    4.07

    1.35

    0.45

    3.16

    -0.15

    0.54

    -1.64

    2.29

    4.53

    0.74

    3.19

    4.30

    1.50

    0.65

    3.49

    0.01

    0.32

    -1.46

    2.61

    4.38

    0.53

    3.04

    4.51

    1.65

    0.67

    3.88

    0.22

    0.15

    -1.30

    3.15

    4.76

    0.28

    2.83

    4.83

    1.80

    0.53

    4.22

    0.63

    0.02

    -1.27

    3.42

    4.66

    0.24

    2.54

    5.06

    1.95

    0.50

    4.45

    1.07

    -0.30

    -1.22

    3.89

    4.82

    0.00

    2.41

    5.40

    2.10

    0.35

    4.99

    1.42

    -0.40

    -1.11

    4.58

    4.77

    0.03

    1.97

    5.83

    2.25

    0.35

    5.36

    1.68

    -0.90

    -1.02

    4.82

    5.12

    0.35

    1.78

    6.54

    2.40

    0.13

    5.71

    2.49

    -1.37

    0.89

    5.42

    5.23

    0.46

    1.53

    6.68

    2.55

    0.39

    6.51

    2.57

    -1.65

    0.89

    6.07

    5.40

    0.88

    1.04

    7.36

    2.70

    0.14

    7.35

    3.09

    -2.00

    -1.02

    6.44

    5.84

    1.27

    0.86

    7.91

    2.85

    0.14

    8.02

    3.40

    -2.42

    0.97

    7.15

    5.86

    1.68

    0.48

    8.39

    3.00

    0.09

    8.96

    4.00

    -3.13

    0.99

    7.66

    6.01

    1.98

    -0.09

    8.98



    Код программы

    #include

    #include

    using namespace std;

    double det(double *line1, double *line2, double *line3, double *line4, double *line5, int deg)

    {

    if (deg == 1) return line1[0];

    else

    {

    double result = 0;

    int i = deg;

    result += line1[0] * det(line2 + 1, line3 + 1, line4 + 1, line5 + 1, NULL, deg - 1);

    result -= line2[0] * det(line1 + 1, line3 + 1, line4 + 1, line5 + 1, NULL, deg - 1);

    i -= 2;

    if (i == 0) return result;

    result -= line3[0] * det(line1 + 1, line2 + 1, line4 + 1, line5 + 1, NULL, deg - 1);

    i--;

    if (i == 0) return result;

    result -= line4[0] * det(line1 + 1, line2 + 1, line3 + 1, line5 + 1, NULL, deg - 1);

    i--;

    if (i == 0) return result;

    result -= line5[0] * det(line1 + 1, line2 + 1, line3 + 1, line4 + 1, NULL, deg - 1);

    return result;

    }

    }

    int main()

    {

    double a[13][21], temp, line[6][5], d, c[5]; // 8 иксов и 5 икс-игриков

    do

    {

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

    {

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

    cin >> a[0][i];

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

    a[j][i] = a[j - 1][i] * a[0][i];

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

    cin >> a[8][i];

    for (int j = 9; j < 13; ++j)

    a[j][i] = a[j - 1][i] * a[0][i];

    }

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

    {

    temp = 0;

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

    temp += a[i][j];

    a[i][20] = temp;

    }

    line[0][0] = 20;

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

    line[0][i] = a[i-1][20];

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

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

    line[i][j] = a[i + j][20];

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

    line[5][i] = a[i + 8][20];

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

    {

    d = det(line[0], line[1], line[2], line[3], line[4], i);

    int j = i - 2;

    c[0] = det(line[5], line[1], line[2], line[3], line[4], i) / d;

    c[1] = det(line[0], line[5], line[2], line[3], line[4], i) / d;

    if (j == 0) cout << "m = 1\n" << c[1] << "x+" << c[0] << endl;

    else

    {

    c[2] = det(line[0], line[1], line[5], line[3], line[4], i) / d;

    j--;

    if (j == 0) cout << "m = 2\n"<< c[2] << "x^2+" << c[1] << "x+" << c[0] << endl;

    else

    {

    c[3] = det(line[0], line[1], line[2], line[5], line[4], i) / d;

    j--;

    if (j == 0) cout << "m = 3\n" << c[3] << "x^3+" << c[2] << "x^2+" << c[1] << "x+" << c[0] << endl;

    else

    {

    c[4] = det(line[0], line[1], line[2], line[3], line[5], i) / d;

    j--;

    if (j == 0) cout << "m = 4\n" << c[4] << "x^4+" << c[3] << "x^3+" << c[2] << "x^2+" << c[1] << "x+" << c[0] << endl;

    }

    }

    }

    }

    temp = _getch();

    } while (temp != 27);

    return 0;

    }
    1   2   3   4   5   6   7   8   9


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