|
2 / 2 / 0
Регистрация: 03.08.2012
Сообщений: 56
|
|
Аппроксимация функции28.05.2017, 10:19. Показов 56800. Ответов 23
Метки нет (Все метки)
Добрый день. Помогите, пожалуйста с вот такой задачей по ппроксимации функции
Рассмотрим сложную математическую функцию на отрезке [1, 15]: f(x) = sin(x / 5) * exp(x / 10) + 5 * exp(-x / 2) Она может описывать, например, зависимость оценок, которые выставляют определенному сорту вина эксперты, в зависимости от возраста этого вина. По сути, задача машинного обучения состоит в том, чтобы приблизить сложную зависимость с помощью функции из определенного семейства. В этом задании мы будем приближать указанную функцию с помощью многочленов. Как известно, многочлен степени n (то есть w_0 + w_1 x + w_2 x^2 + ... + w_n x^n) однозначно определяется любыми n + 1 различными точками, через которые он проходит. Это значит, что его коэффициенты w_0, ... w_n можно определить из следующей системы линейных уравнений: где через x_1, ..., x_n, x_{n+1} обозначены точки, через которые проходит многочлен, а через f(x_1), ..., f(x_n), f(x_{n+1}) — значения, которые он должен принимать в этих точках. Воспользуемся описанным свойством, и будем находить приближение функции многочленом, решая систему линейных уравнений. Сформируйте систему линейных уравнений (то есть задайте матрицу коэффициентов A и свободный вектор b) для многочлена первой степени, который должен совпадать с функцией f в точках 1 и 15. Решите данную систему с помощью функции scipy.linalg.solve. Нарисуйте функцию f и полученный многочлен. Хорошо ли он приближает исходную функцию? Повторите те же шаги для многочлена второй степени, который совпадает с функцией f в точках 1, 8 и 15. Улучшилось ли качество аппроксимации? Повторите те же шаги для многочлена третьей степени, который совпадает с функцией f в точках 1, 4, 10 и 15. Хорошо ли он аппроксимирует функцию? Коэффициенты данного многочлена (четыре числа в следующем порядке: w_0, w_1, w_2, w_3) являются ответом на задачу. Округлять коэффициенты не обязательно, но при желании можете произвести округление до второго знака (т.е. до числа вида 0.42)
0
|
|
| 28.05.2017, 10:19 | |
|
Ответы с готовыми решениями:
23
МНК аппроксимация
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|
| 28.05.2017, 10:54 | |
|
Что непонятно? Задание, общий принцип решения, конкретные шаги решения?
0
|
|
|
2 / 2 / 0
Регистрация: 03.08.2012
Сообщений: 56
|
||
| 28.05.2017, 21:51 [ТС] | ||
|
Шаги решения. Буду признателен за любую помощь.
Добавлено через 7 минут Я просто python 5-й день ковыряю. А до этого не особо программировал. Добавлено через 3 часа 18 минут Какие для этого многочлена коэффициенты?
0
|
||
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|
| 28.05.2017, 23:23 | |
|
Берем многочлен первой степени w0 + w1*x = y
Подставляем в него x (1 и 5) и y (вычисляем f от x) В точке 1 получаем: w0 + w1 * 1 = sin(1/5) * exp(1/10) + 5*exp(-1/2) В точке 15 получаем: w0 + w1 * 15 = sin(15/5) * exp(15/10) + 5*exp(-15/2) Получаем систему уравнений: w0 + 1 * w1 = 3.252 w0 + 15 * w1 = 0.635 Решаем ее, w1 = -0.187, w0 = 3.439 Итоговый многочлен y = 3.439 - 0.187x Далее повторяем для многочлена второй и третей степеней.
2
|
|
|
0 / 0 / 0
Регистрация: 29.05.2017
Сообщений: 3
|
|
| 29.05.2017, 00:42 | |
|
правильно ли я понимаю, для многочлена 3-й степени:
w0+w1+w2+w3=3.252 w0+4w1+16w2+64w3=0.6958 w0+10w1+100w2+1000w3=0.1286 w0+15w1+225w2+3375w3=0.635 ?
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|
| 29.05.2017, 10:17 | |
|
Да, очень похоже (но вычисления в правой часть уравнений не проверял)
Добавлено через 1 час 28 минут Не. Похоже f(4) и f(10) посчитали неправильно. Посчитанные Вами значения сильно разнятся с графиком в начале темы. пересчитайте
0
|
|
|
2 / 2 / 0
Регистрация: 03.08.2012
Сообщений: 56
|
|
| 29.05.2017, 11:40 [ТС] | |
|
@vrm2 Спасибо Вам большое. Правильно ли я понимаю, что для многочлена 2-й степени будет вот такое уравнение?
w0 + w1 * x + w2 * x^2 = sin(x / 5) * exp(x / 10) + 5 * exp(-x / 2) Для точек 1, 8 и 15 получим: w0 + w1 * 1 + w2*1^2 = sin(1 / 5) * exp(1 / 10) + 5 * exp(-1 / 2) w0 + w1 * 8 + w2*8^2 = sin(8 / 5) * exp(8 / 10) + 5 * exp(-8 / 2) w0 + w1 * 15 + w2*15^2 = sin(15 / 5) * exp(15 / 10) + 5 * exp(-15 / 2) Система ур-й: w0 + w1*1 + w2*1^2 = 3.25 w0 + w1*8 + w2*8^2 = 2.31 w0 + w1*15 + w2*15^2 = 0.63 Для точек 1, 4, 10 и 15 w0 + w1 * 1 + w2*1^2 + w3*1^3 = sin(1 / 5) * exp(1 / 10) + 5 * exp(-1 / 2) w0 + w1 * 4 + w2*4^2 + w3*4^3 = sin(4 / 5) * exp(4 / 10) + 5 * exp(-4 / 2) w0 + w1 * 10 + w2*10^2 + w3*10^3 = sin(10 / 5) * exp(10 / 10) + 5 * exp(-10 / 2) w0 + w1 * 15 + w2*15^2 + w3*15^3 = sin(15 / 5) * exp(15 / 10) + 5 * exp(-15 / 2) Система ур-й: w0 + w1*1 + w2*1^2 +w3*1^3 = 3.25 w0 + w1*4 + w2*4^2 + w3*4^3 = 1.74 w0 + w1*10 + w2*10^2 + w3*10^3 = 2.50 w0 + w1*15 + w2*15^2 + w3*15^3 = 0.63 Вопрос: а как дальше находить коэффициенты w0, w1, w2, w3 ?
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|
| 29.05.2017, 12:25 | |
Сообщение было отмечено plywoods как решение
Решение
Да, правильно
Чтобы решить эти системы уравнений понадобится питон и функция scipy.linalg.solve. Попробуйте решить с помощью этой функции систему из двух уравнений (для много члена первой степени) Добавлено через 2 минуты Вот пример http://кофедизайн.рф/informati... in_python/ Разбирайтесь
1
|
|
|
2 / 2 / 0
Регистрация: 03.08.2012
Сообщений: 56
|
|
| 29.05.2017, 13:26 [ТС] | |
|
@vrm2 Спасибо за статью. У меня интерпритатор ругается на запятую в векторе. В чем может быть проблема?
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|
| 29.05.2017, 13:41 | |
|
А что это за число такое - 3.25. - с двумя десятичными точками?
Дробные числа записываются как 3.25 А вот целые можно записать как 1 или 1. или 1.0 и т.п. Добавлено через 2 минуты Кстати, в питон 2 целые числа лучше записывать как 1. (с явной десятичной точкой) А в питоне 3 уже без разницы, как писать - 1 или 1.
1
|
|
|
2 / 2 / 0
Регистрация: 03.08.2012
Сообщений: 56
|
|
| 29.05.2017, 14:19 [ТС] | |
|
Да, спасибо. Это я втыкнул с точками для нецелых чисел. Теперь другая проблема
![]() Опять видимо с синтаксисом что-то не то?
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|
| 29.05.2017, 14:43 | |
|
1. Самый простой способ решать такие проблемы, это поискать текст ошибки в гугл. Первое время эту процедуру Вам придется повторять достаточно часто.
2. Эта ошибка, как и следует из ее текста, говорит о том, что матрица, которую Вы передали, является вырожденной (singular). А значит решения системы уравнений не существует 3. А произошло это из-за того, что неправильно сформировали матрицу, соответствующую системе линейных уравнений Неверно вычислили коэффициенты в линейных уравнениях: 4^2 = 16 ≠ 8, 15^2 = 225 ≠ 30 Вдобавок, откуда то появились нули в матрице, а в Вашем случае их там быть не должно. В общем, разбирайте ссылку еще раз. Для начала, решите систему двух уравнений.
1
|
|
|
2 / 2 / 0
Регистрация: 03.08.2012
Сообщений: 56
|
|
| 29.05.2017, 15:01 [ТС] | |
|
В самом первом Вашем примере
Получаем систему уравнений: w0 + 1 * w1 = 3.252 w0 + 15 * w1 = 0.635 Я думал, что тут при w0 коэффициент 0 - отсюда и нули.
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|
| 29.05.2017, 15:29 | |
|
0 * w0 = 0
1 * w0 = w0 Поэтому w0 + 1 * w1 = 3.252 То же, что и 1 * w0 + 1 * w1 = 3.252
1
|
|
|
2 / 2 / 0
Регистрация: 03.08.2012
Сообщений: 56
|
|
| 29.05.2017, 17:53 [ТС] | |
|
Т.е. для 2-х уравнений матрица будет:
1 1 1 15 вектор 3.25 0.63 Для второй степени: 1 1 1 1 8 16 1 15 30 вектор 3,25 2,31 0,63 Для 3-й степени 1 1 1 1 1 4 8 64 1 10 100 1000 1 15 225 3375 вектор 3,25 1,74 2,50 0,63 При таком раскладе, в ответах отрицательные значения. Это не правильный ответ
0
|
|
|
2 / 2 / 0
Регистрация: 03.08.2012
Сообщений: 56
|
|
| 29.05.2017, 21:30 [ТС] | |
|
Может матрица коэффициентов, все-таки составлена неправильно ?
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
|||
| 29.05.2017, 21:33 | |||
|
Часть уравнений построено неверно (см. пометки)
По-моему, это обычная невнимательность
0
|
|||
|
2 / 2 / 0
Регистрация: 03.08.2012
Сообщений: 56
|
|
| 29.05.2017, 22:33 [ТС] | |
|
Да, так и есть. Большое Вам спасибо за терпение и за помощь
1
|
|
|
0 / 0 / 0
Регистрация: 17.05.2016
Сообщений: 1
|
|
| 19.02.2018, 03:54 | |
|
В матрице для многочлена 3й степени ошибка. Третий элемент во второй строке это 4 в квадрате, т.е. 16, а не 8.
0
|
|
|
0 / 0 / 0
Регистрация: 08.01.2019
Сообщений: 2
|
|
| 19.01.2019, 22:56 | |
|
Думаю так правильно:
0
|
|
| 19.01.2019, 22:56 | |
|
Помогаю со студенческими работами здесь
20
Аппроксимация функции Аппроксимация функции по списку точек Аппроксимация сплайнами Аппроксимация и Интерполяция зависимости Аппроксимация методом наименьших квадратов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|