Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/296: Рейтинг темы: голосов - 296, средняя оценка - 4.92
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
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2017, 10:19
Ответы с готовыми решениями:

Аппроксимация НЕ полиномом
Здравствуйте, мне нужно аппроксимировать экспериментальные данные ф-цией вида A*x+B*(x^1/2), поэтому функция polyfit не подходит. Скажите,...

МНК аппроксимация
Здравствуйте, необходима помощь с МНК для вот такой кривой: Соответственно есть оцифрованные данные (х,у) по ней : Как её...

Аппроксимация методом наименьших квадратов
Взять модельный сигнал (a*sin(b*x), x=0..2*pi), добавить случайный шум, методом наименьших квадратов найти параметры a, b. С чего...

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 минут
Цитата Сообщение от vrm2 Посмотреть сообщение
Что непонятно? Задание, общий принцип решения, конкретные шаги решения?
Не понятно, как для данного уравнения f(x) = sin(x / 5) * exp(x / 10) + 5 * exp(-x / 2) сформировать систему линейных уравнений (или матрицу коэффициентов A и свободный вектор b) для многочлена первой степени, который должен совпадать с функцией f в точках 1 и 15

Какие для этого многочлена коэффициенты?
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
Часть уравнений построено неверно (см. пометки)

Цитата Сообщение от plywoods Посмотреть сообщение
Для второй степени:
1 1 1 - верно
1 8 16 - НЕВЕРНО
1 15 30 - НЕВЕРНО
Цитата Сообщение от plywoods Посмотреть сообщение
1 1 1 1 - верно
1 4 8 64 - НЕВЕРНО
1 10 100 1000 - верно
1 15 225 3375 - верно
Добавлено через 2 минуты
По-моему, это обычная невнимательность
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.01.2019, 22:56
Помогаю со студенческими работами здесь

Аппроксимация функции
Дана функция y = x^2 + случайное значение от 0 до 0.3. Нужно построить среднюю кривую и среднеквадратичное отклонение. Желательно с помощью...

Аппроксимация функции по списку точек
Всем привет. Столкнулся с проблемой, что не могу соединить точки (аппроксимировать, юзал методы с полиномами, но видимо не до конца...

Аппроксимация сплайнами
Пусть параметр t задан на отрезке , отрезов разбит на 4*n точек. Для n=3, 10, 50, 100 написать функцию, которой передается n, а функция...

Аппроксимация и Интерполяция зависимости
Есть экспериментальные данные по которым создается график зависимости f(x). Чтобы проанализировать данные нужно интерполировать и...

Аппроксимация методом наименьших квадратов
Хочу узнать, есть ли в пайтоне или в скайпай/нампай какие-то стандартные функции для данной распространенной операции, как они работают,...


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

Или воспользуйтесь поиском по форуму:
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru