2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Поиск коэффициентов полинома в Mathematica
Сообщение24.04.2016, 12:26 


15/06/06
40
Я могу ручками сделать, это просто. Но начал возится с mathematica и хочется понять как это там сделать легко и правильно.

Задача. Допустим есть обычный сплайн Эрмита (кубический полином). Немного распишу что там да как, что бы не лазить никуда при чтении. Что бы найти его коэффициенты вводят условия.

1. В начальной и конечной точке значение сплайна равно точке. (координатам естественно).
2. Первая производная задана на концах сплайна.

Полином вида $r(t)=at^3+bt^2+ct+d$
Векторная запись, где $a,b,c,d$ искомые коэффициенты.
Координаты точек это $p=\{x,y,z\}$

Для нахождения коэффициентов находим первую производную полинома и составляем матрицу.
\qquad
\begin{bmatrix}
1 & 1 & 1 & 1 \\
1 & 1 & 1 & 1 \\
3 & 2 & 1 & 0\\
3 & 2 & 1 & 0\\
\end{bmatrix}
\qquad

Первая строка это коэффициенты для первой точки. Вторая для второй, третья это первая производная для первой точки и четвертая, для второй. Запишем матрицу как $A$. Решая систему относительно коэффициентов $a,b,c,d$. Таким образом коэффициенты найдены и можно записать полиномиальную форму сплайна Эрмита.

Вот кратенько то, что надо записать на mathematica. Проблемы следующие:
1. Как достать коэффициенты полинома и производных, и записать матрицу?
2. Как записать систему уравнений с коэффициентами полинома и производных, и решить?

Или может я вообще не понимаю как решать такую задачу в mathematica и надо что то совсем простое сделать? Но. Задачка просто пример, так что готовые функции для интерполяции мне не подойдут надо именно решить систему и пр.

Я конечно могу просто взять, записать матрицу коэффициентов ручками и найти $A^{-1}$, но хочется что бы ввел в начале программы точки и граничные условия для полинома, он сам все производные нашел, показал, потом матрицу составил, нашел $A^{-1}$, потом показал решение в виде полиномиальной записи. Потом по точкам построил этот сплайн. Я так понимаю все эти вещи буквально несколькими строчками можно записать если понимать как верно это сделать.

 Профиль  
                  
 
 Re: Поиск коэффициентов полинома в Mathematica
Сообщение24.04.2016, 12:46 
Заслуженный участник


27/04/09
28128
Coefficient[p, x, n] даст коэффициент при $x^n$ в $p$. CoefficientList[p, x] даст список коэффициентов при $x^0,x^1,\ldots$.

Если я правильно понял, матрицу вам составлять и коэффициенты выбирать совершенно не обязательно, можно уравнения собрать и так. Вот такой код всё найдёт, потом можно с его результатом сделать что-нибудь дополнительно.
Код:
coeffs = Table[a[i], {i, 0, 3}];
poly[t_] = Sum[a[i] t^i, {i, 0, 3}];
eqs = {poly[0] == p0, poly[1] == p1, poly'[0] == v0, poly'[1] == v1};
Solve[eqs, coeffs]

Вывод, для проверки, такой:
Код:
{{a[0] -> p0, a[1] -> v0, a[2] -> -3 p0 + 3 p1 - 2 v0 - v1, a[3] -> 2 p0 - 2 p1 + v0 + v1}}

 Профиль  
                  
 
 Posted automatically
Сообщение24.04.2016, 13:03 
Админ форума
Аватара пользователя


19/03/10
8952
 i  Тема перемещена из форума «Околонаучный софт» в форум «Карантин»
по следующим причинам:

- неправильно набраны формулы (краткие инструкции: «Краткий FAQ по тегу [math]» и видеоролик Как записывать формулы).

Исправьте все Ваши ошибки и сообщите об этом в теме Сообщение в карантине исправлено.
Настоятельно рекомендуется ознакомиться с темами Что такое карантин и что нужно делать, чтобы там оказаться и Правила научного форума.

 Профиль  
                  
 
 Posted automatically
Сообщение24.04.2016, 15:35 
Модератор


19/10/15
1196
 i  Тема перемещена из форума «Карантин» в форум «Околонаучный софт»

 Профиль  
                  
 
 Re: Поиск коэффициентов полинома в Mathematica
Сообщение24.04.2016, 15:41 


15/06/06
40
Да, я руками прописал матрицу, потом ее инверсную получил и умножил, ответы совпадают. Но ваш код
просто глаза открыл на то как надо писать :) Спасибо большое!

Еще один вопрос тогда. Каким образом из решения, состоящего из матрицы коэффициентов собрать полином и его нарисовать на экране? Тут я опять кинулся ручками записывать полином, а как рисовать вообще еще не понял, так как мне надо для сплайна задать точки и касательные и это как то шибко сложно выходит.

Вопросы наверное глупые, но я только пытаюсь понять общие принципы написания подобных вещей.

И еще мне надо потом итоговый полином с заданными точками и касательными взять и получить производную в произвольной точке полинома.

Вообще то сама задачка уже решена в тот момент когда коэффициенты найдены, писать потом я это все буду на java, но хотелось бы видеть как это правильно сделать на wolfram, на будущее.

 Профиль  
                  
 
 Re: Поиск коэффициентов полинома в Mathematica
Сообщение24.04.2016, 16:25 
Заслуженный участник


27/04/09
28128
3DRaven в сообщении #1117948 писал(а):
Еще один вопрос тогда. Каким образом из решения, состоящего из матрицы коэффициентов собрать полином и его нарисовать на экране?
Должно сработать coeffsMat . Table[t^i, {i, 0, 3}] или Transpose[coeffsMat] . Table[t^i, {i, 0, 3}] — смотря как матрица получается.

Чтобы построить параметрическую кривую, используйте ParamtericPlot (для двумерной) или ParametricPlot3D (здесь вторую, конечно, но и первая может пригодиться!). Тут это будет ParametricPlot3D[что-то от t, {t, 0, 1}].

Кстати, если читаете по-английски, смело жмите F1 — справка довольно подробная. Есть даже страницы с функциями и их опциями по разным темам.

И ещё может быть полезным знать, что Solve, раз уж я её упоминал, выдаёт результаты в таком виде, чтобы можно было подставить их в какое-нибудь выражение, включая искомый многочлен: если к коду выше добавить
Код:
poly[t] /. %[[1]]
(% — предыдущий результат), получится сразу p0 + t v0 + t^2 (-3 p0 + 3 p1 - 2 v0 - v1) + t^3 (2 p0 - 2 p1 + v0 + v1) без нужды выделять из ответа коэффициенты и умножать на степени t вручную.

Хотя не все вещи делаются так просто, конечно.

 Профиль  
                  
 
 Re: Поиск коэффициентов полинома в Mathematica
Сообщение24.04.2016, 17:08 


15/06/06
40
Я решение начал умножать на {t^3,t^2,t,1} В общем совсем куда то не туда пошел :) Буду разбираться, направление видно. Спасибо!

-- Вс апр 24, 2016 18:27:43 --

Даже что то начертил! :)
Код:
Clear["Global`*"];
coeffs = Table[a[i], {i, 0, 3}];
poly[t_] = Sum[a[i] t^i, {i, 0, 3}]
eqs = {poly[0] == p0, poly[1] == p1, poly'[0] == v0, poly'[1] == v1}
sol = Solve[eqs, coeffs]
sub[t_] = poly[t] /. sol[[1]]
p0 = {0, 0, 0};
p1 = {1, 1, 0};
v0 = {0, 0, 0};
v1 = {1, 1, 1};
ParametricPlot3D[{sub[t]}, {t, 0, 1}]


Правда половину написанного я понимаю только немного :) Буду разбираться постепенно.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group