Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103

МНК. Где ошибка?

04.08.2016, 10:23. Показов 1969. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите найти ошибку. Неправильно строится график


Задание : Методом наименьших квадратов подобрать аппроксимирующую гармоническую зависимость для точек разбросанных вокруг функции y = 3x-0,7, x меняется в диапазоне [1, 3], шум эксперимента задается случайной величиной, меняющейся в диапазоне [–1, 1].

Код:

Matlab M
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
clear; 
n=50; %Количество переменных x 
mistake = 1; %ошибка 
temp_x=1+(3-1)*rand(1,n); %Генерирование чисел 
x=sort(temp_x); %упорядочивание элементов массива по возрастанию 
LastX=x.^(-0.7); 
func=3*(x.^(-0.7)); %Функция 
while mistake < 0 || mistake > 0.01 %Ошибка измерения сводиться к 0 
little=-1+(1+1)*rand(1,n); 
mistake=sum(little)/n; 
end 
 
y=func+mistake; %Значения функции с учетом ошибки измерения 
disp(mistake); 
Mx=mean(LastX); 
My=mean(y); 
Mxx=mean(LastX.^2); 
Mxy=mean(LastX.*y); 
a=(Mxy-My*Mx)/(Mxx-Mx*Mx); 
b=(Mxx*My-Mx*Mxy)/(Mxx-Mx*Mx); 
NewFunc=a.*LastX+b; % линейный вид 
fprintf('Ошибка: %f\n', mistake); 
fprintf('Функция: %.4f*x^(-0.7)+%.4f\n', a, b); 
plot(x, NewFunc); 
hold on; % зафиксировали окно, т.е. пока hold не отпустим, все графики рисуются в этом окне. 
plot(temp_x, y, '+'); 
hold on; 
plot(x, y, '*r'); 
grid on; 
legend('Исходная функция','Исходная функция + шум','Метод наименьших квадратов')
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2016, 10:23
Ответы с готовыми решениями:

Аппроксиматизация синуса МНК, ошибка в функции?
Добрый день! Программа по 12 точкам синуса аппроксимирует данное пользователем значение Первая часть - метод полинома работает верно, а...

Препод говорит где - то ошибка в синтаксисе. Сам код взят из "жефри Рихтер - Создание эффективных WIN32 приложений" Пожалуйста, подскажите где ошибка!
// получаем код ошибки DWORD dwError = GetDlgItemInt(hwnd, IDC_ERRORCODE, NULL, FALSE); HLOCAL hlocal = NULL; // буфер для строки с...

После строк, где 1ый элемент кратен 3, вставить строку из 0. Выводит совсем не то. где ошибка?
int n=ui-&gt;textEdit_6-&gt;toPlainText().toInt(); int m=ui-&gt;textEdit_7-&gt;toPlainText().toInt(); ui-&gt;tableWidget-&gt;setRowCount(n); ...

21
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
07.08.2016, 15:28
Цитата Сообщение от Rita87 Посмотреть сообщение
Неправильно строится график
Покажите, как правильно и как строится
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
07.08.2016, 19:35  [ТС]

строится так, неправильно то, что МНК слишком идеально
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
07.08.2016, 20:32
Это неверно:
Matlab M
1
plot(temp_x, y, '+');
Надо так:
Matlab M
1
plot(x, y, '+', x, NewFunc);
На одном графике нескольких наборов данных Х должно быть одним вектором
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
08.08.2016, 15:15  [ТС]

Так ещё хуже получается
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
08.08.2016, 18:26
Цитата Сообщение от Rita87 Посмотреть сообщение
Так ещё хуже получается
Аргументируйте.
Пожалуйста, не пишите в личные сообщения - секретов я не вижу.
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
08.08.2016, 18:39
Rita87, у вас исходная функция LastX, но в график вы её не выводите, хотя в легенде указываете, что она есть. Команды plot(temp_x,y) и plot(x,y) выводят точки одной и той же функции с шумом, только с разным порядком следования аргумента.
Также у меня возник вопрос, зачем вы для получения mistake используете цикл while? Не проще было бы сразу задать mistake случайным образом от 0 до 0,01?
1
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
08.08.2016, 18:40  [ТС]
Что нужно исправить в итоге? Не совсем поняла
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
08.08.2016, 18:45
Rita87, какой формулой вы пользуетесь для метода наименьших квадратов?
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
08.08.2016, 19:05  [ТС]
a=(Mxy-My*Mx)/(Mxx-Mx*Mx);
b=(Mxx*My-Mx*Mxy)/(Mxx-Mx*Mx);
NewFunc=a.*LastX+b
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
08.08.2016, 19:13
Rita87, да это я понял. Формула, по которой код писали, какая?
У вас ошибка mistake - одно значение. В результате все значения функции с шумом отличаются от соответствующих значений чистой функции на одну и ту же величину, причём очень маленькую (менее 0,01). В результате аппроксимирующая функция практически совпадает с заданной. Следовательно, у вас ошибка в задании шума.
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
08.08.2016, 19:15  [ТС]
Как это исправить?
По этим формулам и писала
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
08.08.2016, 19:19
Цитата Сообщение от Rita87 Посмотреть сообщение
Как это исправить?
По какому алгоритму вы задавали шум? Только прошу вас написать сам алгоритм, а не его программную реализацию в коде, как вы всё мне пытаетесь сделать с формулой для МНК.
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
08.08.2016, 19:21  [ТС]
• С помощью генератора случайных чисел добавить к каждому элементу массива y случайное число, имитирующее ошибку измерения. Путем поиска среднего значения по сгенерированным случайным числам убедиться, что оно имеет значение близкое к 0.
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
08.08.2016, 19:26
Rita87, тогда у вас ещё ошибка в строке 13, функция с шумом должна высчитываться так: y=func+little;
1
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
08.08.2016, 19:32  [ТС]

Спасибо! Что ещё нцжно исправить?
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
08.08.2016, 19:56
Лучший ответ Сообщение было отмечено Rita87 как решение

Решение

Цитата Сообщение от Rita87 Посмотреть сообщение
Что ещё нцжно исправить?
Исправить ошибки, на которые я указывал ранее.

Добавлено через 7 минут
Вот код с исправлениями:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
clear;
n=50; %Количество переменных x
mistake = 1; %ошибка
temp_x=1+2*rand(1,n); %Генерирование чисел
x=sort(temp_x); %упорядочивание элементов массива по возрастанию
LastX=x.^(-0.7);
func=3*(x.^(-0.7)); %Функция
while mistake < 0 || mistake > 0.01 %Ошибка измерения сводиться к 0
little=-1+2*rand(1,n);
mistake=mean(little);
end
y=func+little; %Значения функции с учетом ошибки измерения
disp(mistake);
Mx=mean(LastX);
My=mean(y);
Mxx=mean(LastX.^2);
Mxy=mean(LastX.*y);
a=(Mxy-My*Mx)/(Mxx-Mx*Mx);
b=(Mxx*My-Mx*Mxy)/(Mxx-Mx*Mx);
NewFunc=a.*LastX+b; % линейный вид
fprintf('Ошибка: %f\n', mistake);
fprintf('Функция: %.4f*x^(-0.7)+%.4f\n', a, b);
plot(x, func,x,y,'+',x,NewFunc,'*r'),grid on,...
legend('Исходная функция','Исходная функция + шум','Метод наименьших квадратов')
1
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
08.08.2016, 20:05  [ТС]
Исправить график на LastX? У меня ещё хуже получилось
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
08.08.2016, 20:07
Rita87, я вам исправленный код написал. Нет, заменить не на LastX, а на func.
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 103
08.08.2016, 20:09  [ТС]

Почти тоже самое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.08.2016, 20:09
Помогаю со студенческими работами здесь

Вывести на экран количество слов где первая и последняя буквы одинаковы (не понимаю где ошибка)
задан текст нужно вывести на экран количество слов где первая и последняя буквы одинаковы #include &lt;iostream&gt; #include...

Где то есть ошибка, а вот где она?
Есть такой код, замудрённый конечно, но, как умею уж: private void button4_Click(object sender, EventArgs e) { ...

Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил)
написать универсальный тип, который представляет точку на плоскости в координатах (х, у) и в полярных координатах. Написать функцию для...

Где-то ошибка где не пойму
&lt;!doctype html&gt; &lt;html lang=&quot;ru&quot;&gt; &lt;head&gt; &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=EmulateIE9&quot;&gt; &lt;meta charset=&quot;utf-8&quot;&gt; ...

Укажите где ошибка (ошибка во время выполнения программы)
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при выполнении программы Картинка с ошибкой внизу поста. Код: ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru