Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как найти коэффициентов полинома лагранжа по его корня?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Petrovich
Господа!
Подскажите как посчитать коэфициенты полинома если есть n пар x y?
_Ivana
Цитата
если есть n пар x y
можно составить и решить систему линейных уравнений n-го порядка. Если n невелико (порядка нескольких единиц), то не сложно ещё и минимизировать количество операций для этого.

ЗЫ: можно не находить коэффициенты а применять интерполяционный многочлен в форме Лагранжа
ЗЗЫ: и это вовсе не корни многочлена а узловые точки
Petrovich
Цитата(_Ivana @ Nov 21 2012, 02:02) *
можно составить и решить систему линейных уравнений n-го порядка. Если n невелико (порядка нескольких единиц), то не сложно ещё и минимизировать количество операций для этого.

ЗЫ: можно не находить коэффициенты а применять интерполяционный многочлен в форме Лагранжа
ЗЗЫ: и это вовсе не корни многочлена а узловые точки

Да, действительно ошибочка, это узловые точки.
Мне нужно находить имеенно коэфициенты. Просто интерполяция ясна но она не подходит.
Решать систему не получится, точнее муторно, n может быть до 6. Должен же быть как либо численный метод нахождения коэффициентов
blackfin
Цитата(Petrovich @ Nov 21 2012, 10:08) *
Решать систему не получится, точнее муторно, n может быть до 6. Должен же быть как либо численный метод нахождения коэффициентов

MATLAB?

>> x = [1,2,3,4,5,6,7];
>> y = [3,2,5,6,8,7,3];
>> p = polyfit(x,y,6)

p =

0.0375 -0.9208 8.9375 -43.6458 112.0250 -139.4333 66.0000

>>
Petrovich
Цитата(blackfin @ Nov 21 2012, 10:49) *
MATLAB?

>> x = [1,2,3,4,5,6,7];
>> y = [3,2,5,6,8,7,3];
>> p = polyfit(x,y,6)

p =

0.0375 -0.9208 8.9375 -43.6458 112.0250 -139.4333 66.0000

>>

Я наверно не совсем понятно объяснил. Это должно происходить в приборе, в который Матлаб к сожалению не запихнуть...
А вот сделать так как делается в Матлабе, было бы не плохо.
iiv
Цитата(Petrovich @ Nov 21 2012, 13:58) *
Это должно происходить в приборе, в который Матлаб к сожалению не запихнуть...

метод решения сильно зависит от того, поддерживает ли Ваш прибор двойную, а может и четверную точность - простой метод в 7-8 строк на С или Фортране очень плохо устойчив к ошибкам округления, а методы поточнее могут случайно не поместиться в скомпилированном виде в память маленьких микроконтроллеров. Также важно знать сколько Вы готовы ждать этого решения и производительность по флопам или другим схожим операциям в секунду на каком-то характерном размере задачи.
Serg76
Цитата(Petrovich @ Nov 21 2012, 10:08) *
Да, действительно ошибочка, это узловые точки.
Мне нужно находить имеенно коэфициенты. Просто интерполяция ясна но она не подходит.
Решать систему не получится, точнее муторно, n может быть до 6. Должен же быть как либо численный метод нахождения коэффициентов

Для такого порядка должно хватить даже простенького МК. Возьмите, например, метод Гаусса с выбором главного элемента, при малых порядках он предпочтительнее.
iiv
Цитата(Serg76 @ Nov 21 2012, 19:22) *
Возьмите, например, метод Гаусса с выбором главного элемента, при малых порядках он предпочтительнее.

да, но, всяко, ТС не озвучил ни тип железа, ни тип сетки. Если взять экспоненциальео сгущающуюся сетку и эдак 10 точек, то Гаусс с выбором (и по строке и по столбцу) уже в двойной точности развалится, хотя из всех "просто программируемых" методов - это самый простой, строчек в 15 можно уложиться.
Petrovich
Цитата(iiv @ Nov 21 2012, 20:05) *
да, но, всяко, ТС не озвучил ни тип железа, ни тип сетки. Если взять экспоненциальео сгущающуюся сетку и эдак 10 точек, то Гаусс с выбором (и по строке и по столбцу) уже в двойной точности развалится, хотя из всех "просто программируемых" методов - это самый простой, строчек в 15 можно уложиться.

Процессор PIC32. Узловых точек может быть от 2 до 6. Точность... Не знаю с какой точностью должен быть коэффициент, но вычисленный по построенному полиному результат должен имет один знак после запятой. На вычисление есть около 5 мс.
Почитаю про Гауса. Спасибо за советы.
Serg76
Цитата(Petrovich @ Nov 21 2012, 21:54) *
Узловых точек может быть от 2 до 6. Точность... Не знаю с какой точностью должен быть коэффициент, но вычисленный по построенному полиному результат должен имет один знак после запятой.

Так проблем тогда не должно быть
iiv
Цитата(Petrovich @ Nov 21 2012, 23:54) *
Процессор PIC32. Узловых точек может быть от 2 до 6. Точность...На вычисление есть около 5 мс.
Почитаю про Гауса. Спасибо за советы.

Тогда выбора почти нет... Программируете Гаусса, но обязательно с выбором ведущего элемента по всей оставшейся подматрице - не пугайтесь, это реально просто! Должно при старании получится строк 15. Делаете это в одинарной точности, ее обычно будет не хватать, если точки криво располагаются... Дальне любым простым итерационным методом уточняете решение, в Вашем случае сходимость будет однозначно, поэтому, не мудрствуя лукаво, можно поставить простую итерацию. Стоимость будет на матрице 6х6 примерно 100 флоат операций. Сделаете пяток таких итераций, получите устойчивое решение. Если с сеткой будет везти, то и Гаусса хватит.

Гаусс на даубле отъест у Вас раз так в 20 больше арифметических ресурсов, в 5мс не уложитесь sad.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.