Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 23.11.2022
Сообщений: 20

Код аппроксимации данных линейной функции

05.12.2022, 09:24. Показов 4887. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята пожалуйста помогите, у меня есть код аппроксимации данных линейной функции, этот код надо переделать на python


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
    double[][] matrix = {
        {1, 2, 3, 4, 5},//x
        {5.1, 4.4, 3.2, 2.7, 2.55},};//y
 
    double[][] matrix1;
    public int XX = 5, YY = 2;
    public int l = 15, k, m, j;
    double d1 = 0;
 
    double[] data = new double[15];
 
    double[] a = new double[XX];
    double[] b = new double[XX];
    double[] d = new double[XX];
 
    public static void main(String[] args) {
        МНК Zadacha5 = new МНК();
        Zadacha5.Initialization();
        Zadacha5.Start();
        Zadacha5.Start2();
        Zadacha5.Start3();
 
    }
 
    void Initialization() {
        matrix1 = new double[YY][XX];
 
    }
 
    public void Start() {
        double x1, y1;
        for (j = 0; j < XX; j++) {
            switch (j) {
                case 0: {
                    for (int i = 0; i < XX; i++) {
                        matrix1[0][i] = matrix[0][i];
                        matrix1[1][i] = matrix[1][i];
                    }
                    break;
                }
                case 1: {
                    for (int i = 0; i < XX; i++) {
                        matrix1[1][i] = matrix[0][i] * matrix[1][i];
                    }
                    break;
                }
                case 2: {
                    for (int i = 0; i < XX; i++) {
                        matrix1[1][i] = 1 / matrix[1][i];
                    }
                    break;
                }
                case 3: {
                    for (int i = 0; i < XX; i++) {
                        matrix1[1][i] = matrix[0][i] / matrix[1][i];
                    }
                    break;
                }
                case 4: {
                    for (int i = 0; i < XX; i++) {
                        matrix1[1][i] = Math.log10(matrix[1][i]);
                    }
                    break;
                }
                case 5: {
                    for (int i = 0; i < XX; i++) {
                        matrix1[0][i] = Math.log10(matrix[0][i]);
                        matrix1[1][i] = matrix[1][i];
                    }
                    break;
                }
                case 6: {
                    for (int i = 0; i < XX; i++) {
                        matrix1[1][i] = Math.log10(matrix[1][i]);
                    }
                    break;
                }
            }
            paramenties();
 
            d1 = d[0];
            k = 0;
            for (int i = 0; i < XX; i++) {
                if (d[i] < d1) {
                    d1 = d[i];
                    k = i;
                }
            }
            
            DecimalFormat dF = new DecimalFormat("#.###");
            System.out.println();
            for (int i = 0; i < YY; i++) {
                for (int j = 0; j < XX; j++) {
                    System.out.print(" " + dF.format(matrix1[i][j]));
                }
                System.out.println();
            }
            System.out.println();
 
 
            System.out.println("Формула N " + k + "\n d = " + dF.format(d1) + 
                    "\n a = " + dF.format(a[k]) + "\n b = " + dF.format(b[k]) + "\n");
        }
    }
 
    public void paramenties() {
        double k0 = 0, b0 = 0, a1 = 0, b1 = 0, a2 = 0, b2 = 0, f2 = 0;
        for (int i = 0; i < XX; i++) {
            a1 = a1 + matrix1[1][i];
            b1 = b1 + matrix1[0][i];
            a2 = a2 + matrix1[1][i] * matrix1[1][i];
            b2 = b2 + matrix1[0][i] * matrix1[0][i];
        }
        d1 = XX * a2 - a1 * a1;
        k0 = (XX * b2 - a1 * b1) / d1;
        b0 = (b1 * a2 - a1 * b2) / d1;
 
        for (int i = 0; i < XX; i++) {
            f2 = f2 + matrix1[0][i] * matrix1[0][i];
            d1 = d1 + (matrix1[0][i] - k0 * matrix1[1][i] - b0)
                    * (matrix1[0][i] - k0 * matrix1[1][i] - b0);
        }
        d[j] = Math.sqrt(d1 / f2);
        a[j] = k0;
        b[j] = b0;
    }
 
    public void Start2() {
        double mx = 0;//summ X
        double my = 0;//summ Y
        double a2 = 0;
        double a11 = 0;
        double kk = 0, bb = 0;
        for (int i = 0; i < XX; i++) {
            mx = mx + matrix[0][i];
            my = my + matrix[1][i];
        }
 
        mx = mx / XX;
        my = my / XX;
 
        for (int i = 0; i < XX; i++) {
            for (int j = 0; j < XX; j++) {
                a2 = a2 + matrix[0][i] * matrix[0][j];//vector X^T * X
            }
        }
 
        for (int i = 0; i < XX; i++) {
            for (int j = 0; j < XX; j++) {
                a11 = a11 + matrix[0][i] * matrix[1][j];//vector X^T * Y
            }
        }
        a2 = a2 / XX;
        a11 = a11 / XX;
        kk = (a11 - mx * my) / (a2 - Math.pow(mx, 2));
        bb = my - kk * mx;
        System.out.println(" k= " + kk + " b= " + bb);
    }
 
    public void Start3() {
        double mx = 0;//summ X
        double my = 0;//summ Y
        double sumx2 = 0;
        double sumx_y = 0;
        for (int i = 0; i < XX; i++) {
            mx = mx + matrix[0][i];
            my = my + matrix[1][i];
            sumx2 = sumx2 + Math.pow(matrix[0][i], 2);
            sumx_y = sumx_y + matrix[0][i] * matrix[1][i];
        }
        double determinant = sumx2 * XX - mx * mx;
        if (determinant == 0) {
            System.out.println("Определитель равен нулю. "
                    + "Обратной матрицы не сущетсвует.");
            System.exit(0);
        }
 
        double[][] obratnay = new double[2][2];
        obratnay[0][0] = XX * (1 / determinant);
        obratnay[0][1] = -1 * mx * (1 / determinant);
        obratnay[1][0] = -1 * mx * (1 / determinant);
        obratnay[1][1] = sumx2 * (1 / determinant);
 
        double b = obratnay[0][0] * sumx_y + obratnay[0][1] * my;
        double a = obratnay[1][0] * sumx_y + obratnay[1][1] * my;
 
        System.out.println(" k= " + a + " b= " + b);
    }
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2022, 09:24
Ответы с готовыми решениями:

Написать код Matlab линейной аппроксимации
Помогите, пожалуйста, написать код Matlab линейной аппроксимации

Разбиение исходного массива данных на множество уравнений линейной аппроксимации
Добрый день, уважаемые эксперты! Необходима помощь в задании. У нас имеется массив данных(батиметрические промеры глубины реки) в .csv...

Параметр slope в линейной аппроксимации
Добрый день, подскажите функцию или метод, которым можно линейной аппроксимировать некоторый массив данных и найти slope(параметр наклона...

2
740 / 622 / 151
Регистрация: 04.03.2022
Сообщений: 1,272
05.12.2022, 11:31
Ну если-бы этот rhl работал правильно, можно было бы и переделать. А так....
Из того, что сразу в глаза бросилось:
XX = 5, т.е. j в цикле на 32 строке будет в диапазоне [0-4]. При этом ключи switch от 0 до 6, соответственно, две последнии ветки никогда не будут выполняться.
Ну и смысл самого этого цикла и свитча от меня как-то ускользает. Кстати, была похожая задача с переводом с паскаля на питон. Такая-же фигня была написана.
0
1 / 1 / 0
Регистрация: 23.11.2022
Сообщений: 20
05.12.2022, 11:37  [ТС]
код рабочий проверено
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.12.2022, 11:37
Помогаю со студенческими работами здесь

Реализация методов линейной аппроксимации в matlab
Честно говоря в matlab плохо разбираюсь. Кто-нибудь мог бы примерно показать как реализовать метод наименьших квадратов линейной...

Как посчитать коэффициенты линейной полиномиальной аппроксимации
В библиотеке Intеl МКL есть возможность расчета коэффициентов полиномиальной аппроксимации. Но написано об этом мутновато. Мне нужно...

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

Генерация отсчетов случайной величины с заданной плотностью распределения методом кусочно-линейной аппроксимации
Всем, Добрый день! Помогите составить блок-схему реализации вот такой вот программки?? и если кто сможет объяснить как она работает??? ...

Определить минимальное количество слагаемых для аппроксимации, при котором средняя ошибка аппроксимации не превышает 5%
Функция аппроксимируется степенным рядом на интервале x = . Автоматически (с помощью написанной самостоятельно программы)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru