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

Аппроксимировать набор точек многочленом

28.03.2014, 13:31. Показов 8983. Ответов 51
Метки faq+ (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, очень нужна ваша помощь! задана функция f(x)=a0+a1*x+a2*x^2+a3*x^3+а4*x^4 , нужно построить график и найти коэффициенты а0, а1, а2, а3, а4. значение функция f(x) задано (несколько значений) и x заданы (отрезок значений). как это все сделать, запуталась... воспользоваться наверно нужно это командой p0 = polyfit(x,y,0)
p1 = polyfit(x,y,1)
p2 = polyfit(x,y,2)
p3 = polyfit(x,y,3)
p4 = polyfit(x,y,4),
запишу значения
x = 1:5
а как y записать, который имеет несколько значений и все остальной сделать, не получается
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.03.2014, 13:31
Ответы с готовыми решениями:

Не используя стандартных функций, аппроксимировать заданную функцию многочленом n-й степени по МНК
Не используя стандартных функций аппроксимировать заданную функцию многочленом n-й степени по методу наименьших квадратов. Вывести на...

Аппроксимировать поверхность из 9 точек, заданную матрицей
Здравствуйте, с MatLabom раньше не работал, но появилась необходимость аппроксимировать поверхность из 9 точек, заданную матрицей, не знаю...

Вывести набор точек на график
Доброго времени суток! Есть функции вычисляющие 4 коэффициента: function = fOne (t) f1 = 1/6*(1-t)^3; end function = fTwo...

51
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
02.04.2014, 16:48
Студворк — интернет-сервис помощи студентам
Matlab M
format longg
но загвоздка в том, что первые два коэф-та очень большие, а остальные гораздо менньше, поэтому можешь просто отобразить их по отдельности
Matlab M
p(1), p(2), p(3), p(4), p(5)
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
02.04.2014, 16:57  [ТС]
просто вот так написать? p(1), p(2), p(3), p(4), p(5)
0
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
02.04.2014, 17:00
да, вконце
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
02.04.2014, 17:15  [ТС]
спасибо!
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
08.04.2014, 21:01  [ТС]
Здравствуйте! еще нужна ваша помощь. как записать программу в матлаб для вычисления параметров вот такого полинома
f(x,y)= p0+p1x+p2y+p3xy+p4*x^2+p5*y^2+....и т.д.
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
09.04.2014, 00:13
Непонятно. Что у на входе, что надо получить?
Найти коэффициенты по известным значениям (т.е. аналог polyfit)? Нет проблем.
Но все-таки уточните задачу.
1
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
09.04.2014, 11:29  [ТС]
до этого задача была, там была одна плоскость, там координата y просто этой буквой была названа, на самом деле это не y. f(x)=a0+a1*x+a2*x^2+a3*x^3+а4*x^4. а сейчас задача уже в двух плоскостях x и y.
f(x,y)= а0+а1*x+а2*y+а3*x*y+а4*x^2+а5*y^2+....и т.д. мне программу записывать так же, только добавится еще одна координата ?
y = [.......] - диапазон координаты y
x= [........] - диапазон координаты x
s= [.......]
p=polyfit(x,y,s,5);
x1=[x(1):0.000001:x(end)];
y1=[y(1):0.000001:y(end)]
s1=polyval(p,x1,y1); % значения полинома
plot(x,y,s,'+', x1,y1,s1'-');
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
09.04.2014, 16:16
polyfit только для одной координаты.
Есть двумерные аналоги, сделанные любителями.
Погуглите polyfit2d
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
09.04.2014, 16:27  [ТС]
имерно во так сделать http://www.mathworks.com/matla... olyFit2D.m
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
09.04.2014, 16:31
вам помочь скопировать?
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
09.04.2014, 16:37  [ТС]
я не совсем понимаю эту программу. а количество значений в x,y,f так же должно быть одинаковым?
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
09.04.2014, 17:26
В общем да, реализация не самая понятная, да и незаконченная.
Я дам сначала общую идею.

Положим, у вас есть 3 столбца X, Y, F, все высоты N, где первые два - координаты точек на плоскости, третий - значения функции в этих точках.

Вы хотите, допустим, аппроксимировать эту функцию полиномом, состоящим из разных степеней x и у, скажем
f= a0 + a1*x + a2*y + a3*x*y + a4*x*x

Тогда действия такие.
1. составить матрицу М, в которой каждому элементу полинома x^i * y^j соответствует колонка его значений
У функции f есть такие элементы: 1, x, y, xy, xx
Тогда
Matlab M
1
M=[ones(N,1)  X  Y  X.*Y  X.*X];
2. коэффициенты полинома получаются операцией M\F
Matlab M
1
A=M\F;
где A(0)=а0, А(1)=а1, и т.д.
задача решена.

Предлагаю поэкспериментировать с нахождением коэффициентов для разных полиномов.
Продолжение будет, когда усвоите эту часть.
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
09.04.2014, 22:25  [ТС]
вот так примерно программа будет выглядеть? только я пока не писала значения матриц f, x,y. и в расчете вектора M надо перебрать написать все комбинации X и Y, если у меня будет 14 коэффициентов полиномов а0...а14.

f = []; % значения функции
x = []; % матрица x
y = []; % матрица y
function p = polyFit2D(f,x,y,14) % вектор из коэффициентов а0...а14
M=[ones(N,1) X Y X.*Y X.*X Y.*Y X.*Y.*Y Y.*X.*X X.*X.*X Y.*Y.*Y];
A=M\F; % коэффициенты полинома
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
10.04.2014, 00:26
да, суть именно такая.
в программе по вашей ссылке эти комбинации строились автоматически, но как-то не очевидным способом.
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
10.04.2014, 11:37  [ТС]
что то матлабу не нравится эта функция, ошибку выдает

f = [3.3422e8 4.5673e8 3.5427e8
3.4372e8 4.4732e8 3.5401e8
3.2741e8 4.2791e8 3.5933e8 ]; % значения функции
x = [0 0.5e-4 1e-4
0 0.5e-4 1e-4
0 0.5e-4 1e-4 ]; % матрица x
y = [0 0 0
0.5e-4 0.5e-4 0.5e-4
1e-4 1e-4 1e-4 ]; % матрица y
function p = polyFit2D(f,x,y,4) % вектор из коэффициентов а0...а14
M=[ones(N,1) X Y X.*Y X.*X Y.*Y X.*Y*Y Y.*X*X X.*X*X Y.*Y*Y X.*Y*Y*Y X.*X*Y*Y Y.*X*X*X X.*X*X*X Y.*Y*Y*Y];
A=M\F; % коэффициенты полинома
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
10.04.2014, 12:01
Ксюня, я же писал - X,Y,F - *столбцы*. А у вас строки.
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
10.04.2014, 13:00  [ТС]
вот так тогда? но она тоже не работает
clc
x = [0
0.5e-4
1e-4
0
0.5e-4
1e-4 ]; % матрица x
y = [0
0
0
0.5e-4
0.5e-4
0.5e-4 ]; % матрица y
f = [3.3422e8
4.5673e8
3.5427e8
3.4372e8
4.4732e8
3.5401e8 ]; % значения функции
function p = polyFit2D(f,x,y,4) % вектор из коэффициентов а0...а14
M=[ones(6,1) X Y X.*Y X.*X Y.*Y X.*Y*Y Y.*X*X X.*X*X Y.*Y*Y X.*Y*Y*Y X.*X*Y*Y Y.*X*X*X X.*X*X*X Y.*Y*Y*Y];
A=M\F; % коэффициенты полинома
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
10.04.2014, 15:59
столбец можно писать так [1; 2; 3; 4]
или так [1 2 3 4]'

дальше в коде сплошые косяки.

в объявлении функции аргументы f,x,y, в теле X,Y,Z, для матлаба это разные переменные.
что за "4" в списке аргументов?
что за "6" в ones(6,1)?
0
0 / 0 / 0
Регистрация: 28.03.2014
Сообщений: 42
10.04.2014, 17:52  [ТС]
4 это степень (ну то что максимальная степень 4 будет) , а 6 это то что высота матрицы x,y,f (ее значений) 6 .
0
53 / 53 / 14
Регистрация: 26.02.2014
Сообщений: 150
11.04.2014, 01:53
Ксюня, в аргументах функции описываются ПЕРЕМЕННЫЕ, корорые ей будут передаваться!
Там не может быть никакий констант!

Употребление "6" более осмысленное, но что делать, если понадобится другой размер? Переписывать функцию? К вашему сведению, размер вектора можно узнать аж тремя функциями:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
% для обоих ориентаций (гориз. и верт. массива)
N=length(V);
N=numel(V);
 
%для вертикального массива (столбца)
[N,~]=size(V); 
N=size(V,1); 
 
 %для гориз. массива (строки)
[~,N]=size(V);
N=size(V,2);
Слегка поправил вашу функцию

Matlab M
1
2
3
4
5
6
7
% ищем вектор из коэффициентов а0...а14
% F, X, Y - столбцы
function p = polyFit2D(F, X, Y) 
N=length(F);
M=[ones(N,1) X Y X.*Y X.*X Y.*Y X.*Y.*Y Y.*X.*X X.*X.*X Y.*Y.*Y X.*Y.*Y.*Y X.*X.*Y.*Y Y.*X.*X.*X X.*X.*X.*X Y.*Y.*Y.*Y];
A=M\F; % коэффициенты полинома
end
И пожалуйста используйте кнопку "MATLAB" для оформления кода
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.04.2014, 01:53
Помогаю со студенческими работами здесь

Аппроксимировать многочленом L2(x)
Привет, %username%! Вынужден просить у вас помощи. Есть задачка, в которой я уже почти дошел до конца, но запутался. Меня...

На плоскости имеется набор точек....
На плоскости имеется набор точек. Выявить все прямоугольники, которые могут быть образованны этими точками(стороны прямоугольника...

Разбить набор точек по три по правилу
Имеется отчет по программе и программа. Проблема с программой в том, что не видно результата выполнения программы. Alt+N ручной ввод...

Набор точек имеющие вес в двумерном пространстве
Рассматривается набор точек в двумерном пространстве, которые кроме координат имеют еще одну характеристику — вес. 1. Сгенерировать N...

Проверить, если набор из точек замкнут на метрическом пространстве
дайте пожалуйста полный ответ проверить если набор из точек pn = (1/n,1/n) замкнуты на метрическом пространстве (R,dR) где dR...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
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