С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
58 / 2 / 0
Регистрация: 24.03.2022
Сообщений: 104

Метод Наименьших Квадратов

09.07.2023, 14:16. Показов 896. Ответов 5

Студворк — интернет-сервис помощи студентам
Добрый день! У меня небольшой вопрос, по МНК. Есть программа, которая по значениям вычисляет линию регрессии, коэффициент корреляции, суммарную и среднюю квадратичные ошибки, а также функциональную зависимость, но у меня совпадает линия регрессии и функциональная зависимость. Это правильно? Можете посмотреть и сообщить, если что-то неправильно? Буду благодарен.
Вот значения:
h: 0.29 0.57 0.86 1.4 1.43 1.71 1.82 2
R: 3.33 6.67 7.5 13.33 16.67 23.33 27.8 33.35
R = C*h^(2)+k
Вот сам код:
C++
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
#include <iostream>
#include <cmath>
#include <windows.h>
 
// Количество точек данных
const int numDataPoints = 8;
 
// Функция для вычисления линии регрессии
void calculateRegressionLine(double h[], double R[], double& Ch, double& k) {
    double h_mean = 0.0;
    double R_mean = 0.0;
    double h_R_deviation_sum = 0.0;
    double h_deviation_squared_sum = 0.0;
 
    // Вычисление средних значений
    for (int i = 0; i < numDataPoints; i++) {
        h_mean += h[i];
        R_mean += R[i];
    }
    h_mean /= numDataPoints;
    R_mean /= numDataPoints;
 
    // Вычисление отклонений и их сумм
    for (int i = 0; i < numDataPoints; i++) {
        double h_deviation = h[i] - h_mean;
        double R_deviation = R[i] - R_mean;
        h_R_deviation_sum += h_deviation * R_deviation;
        h_deviation_squared_sum += h_deviation * h_deviation;
    }
 
    // Вычисление коэффициента наклона (Ch) и свободного члена (k)
    Ch = h_R_deviation_sum / h_deviation_squared_sum;
    k = R_mean - Ch * h_mean;
}
 
// Функция для вычисления коэффициента корреляции
double calculateCorrelationCoefficient(double h[], double R[], double Ch, double k) {
    double h_mean = 0.0;
    double R_mean = 0.0;
    double h_deviation_sum = 0.0;
    double R_deviation_sum = 0.0;
    double h_R_deviation_sum = 0.0;
    double h_deviation_squared_sum = 0.0;
    double R_deviation_squared_sum = 0.0;
 
    // Вычисление средних значений
    for (int i = 0; i < numDataPoints; i++) {
        h_mean += h[i];
        R_mean += R[i];
    }
    h_mean /= numDataPoints;
    R_mean /= numDataPoints;
 
    // Вычисление отклонений и их сумм
    for (int i = 0; i < numDataPoints; i++) {
        double h_deviation = h[i] - h_mean;
        double R_deviation = R[i] - R_mean;
        h_deviation_sum += h_deviation;
        R_deviation_sum += R_deviation;
        h_R_deviation_sum += h_deviation * R_deviation;
        h_deviation_squared_sum += h_deviation * h_deviation;
        R_deviation_squared_sum += R_deviation * R_deviation;
    }
 
    // Вычисление коэффициента корреляции
    double correlationCoefficient = h_R_deviation_sum / (sqrt(h_deviation_squared_sum) * sqrt(R_deviation_squared_sum));
    return correlationCoefficient;
}
 
// Функция для вычисления суммарной квадратичной ошибки
double calculateSumSquaredError(double h[], double R[], double Ch, double k) {
    double sumSquaredError = 0.0;
 
    for (int i = 0; i < numDataPoints; i++) {
        double predictedR = Ch * h[i] * h[i] + k;
        double error = R[i] - predictedR;
        sumSquaredError += error * error;
    }
 
    return sumSquaredError/100;
}
 
int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    double h[] = {0.29, 0.57, 0.86, 1.4, 1.43, 1.71, 1.82, 2};
    double R[] = {3.33, 6.67, 7.5, 13.33, 16.67, 23.33, 27.8, 33.35};
 
    double Ch, k;
    calculateRegressionLine(h, R, Ch, k);
 
    std::cout << "Линия регрессии: R = " << Ch << " * h^2 + " << k << std::endl;
 
    double correlationCoefficient = calculateCorrelationCoefficient(h, R, Ch, k);
    std::cout << "Коэффициент корреляции: " << correlationCoefficient << std::endl;
 
    double sumSquaredError = calculateSumSquaredError(h, R, Ch, k);
    std::cout << "Суммарная квадратичная ошибка: " << sumSquaredError << std::endl;
 
    std::cout << "Средняя квадратичная ошибка: " << sumSquaredError / numDataPoints << std::endl;
 
    // Output functional dependency
    std::cout << "Функциональная зависимость: R = " << Ch << " * h^2 + " << k << std::endl;
 
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.07.2023, 14:16
Ответы с готовыми решениями:

Метод наименьших квадратов
Задание такое, составить программу аппроксимации функции f(x) в интервале , n неизвестных параметров и m точек, в которых задана функция ...

Метод наименьших квадратов
В коде реализован метод наименьших квадратов. Помогите переделать в метод полиномов Чебышева. #include &lt;tchar.h&gt; #include...

Метод наименьших квадратов
Ребят,вот в чем беда. нужно для курсового решить задачу. нужно апроксимировать данные линейной зависимостью y=ax+b. В ручную все уже...

5
 Аватар для Pphantom
2256 / 1515 / 708
Регистрация: 17.03.2022
Сообщений: 4,868
09.07.2023, 14:24
А вы ожидали, что две идентичные строчки с выводом (93 и 104) без изменения значений переменных между ними выведут что-то различное?
0
58 / 2 / 0
Регистрация: 24.03.2022
Сообщений: 104
09.07.2023, 14:30  [ТС]
Цитата Сообщение от Pphantom Посмотреть сообщение
А вы ожидали, что две идентичные строчки с выводом (93 и 104) без изменения значений переменных между ними выведут что-то различное?
Упс, извините, не увидел.. Неловко получилось.. А можете подсказать, пожалуйста, как тогда найти функциональную зависимость? Я попробовал вставить значения h и R в уравнения и через них повыражать C и k(получилось 4 пары) и подставить их в график, но все точки находятся далеко от графика.. Вы, случайно, не знаете, как можно найти функциональную зависимость?
0
 Аватар для Pphantom
2256 / 1515 / 708
Регистрация: 17.03.2022
Сообщений: 4,868
09.07.2023, 15:55
Нет, вот тут не помогу. Честно говоря, я не вижу разницы между этими двумя понятиями (по крайней мере в таком контексте), возможно, это какие-то "местные" названия, но тогда надо в вашей окрестности их определения поискать.

Как вариант - отправьте вопрос в математический раздел, возможно, кто-нибудь подскажет.
0
58 / 2 / 0
Регистрация: 24.03.2022
Сообщений: 104
09.07.2023, 16:08  [ТС]
Цитата Сообщение от Pphantom Посмотреть сообщение
Нет, вот тут не помогу. Честно говоря, я не вижу разницы между этими двумя понятиями (по крайней мере в таком контексте), возможно, это какие-то "местные" названия, но тогда надо в вашей окрестности их определения поискать.
Как вариант - отправьте вопрос в математический раздел, возможно, кто-нибудь подскажет.
Хорошо, спасибо за помощь, буду разбираться)
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
09.07.2023, 16:16
Zoow, по моим соображениям, линия регрессии - это прямая полученная по МНК.
Но, если по МНК данные аппроксимировать не прямой, а функцией более высокого порядка,
то, соответственно регрессия и функция аппроксимации будут различаться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.07.2023, 16:16
Помогаю со студенческими работами здесь

Метод наименьших квадратов
В результате эксперимента была определена некоторая табличная зависимость. С помощью метода наименьших квадратов определить...

Метод наименьших квадратов
В результате эксперимента была определена некоторая табличная зависимость. С помощью метода наименьших квадратов определить линию...

Метод наименьших квадратов
Дано функцию f(x). Найти линейную функцию ax+b которая наилучшим способом апроксимирует её. Использовать метод наименьших квадратов

Метод наименьших квадратов
Можете около сложных строчек написать что там происходит(комментарии) #include &quot;stdafx.h&quot; #include &lt;tchar.h&gt; #include...

МНК (Метод наименьших квадратов)
Помогите с реализацией аппроксимации МНК. Есть экспериментальные данные, хочу аппроксимировать их МНК. Не хочу использовать мат пакеты,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru