Ускорение интегрирования

Форум пользователей пакета Maple

Модератор: Admin

NikitaTsybin
Сообщения: 17
Зарегистрирован: Чт ноя 22, 2018 2:10 pm

Ускорение интегрирования

Сообщение NikitaTsybin » Пн дек 10, 2018 5:48 pm

Я применяю ортогонализацию Грамма-Шмидта к системе степенных полиномов. Скалярное произведение при этом записывается как интеграл. Можно ли как-то уменьшить время интегрирования? Возможно посоветуете подключить какие-либо пакеты. Для дальнейших расчетов я буду использовать значение nmax=25.
Вложения
Интегрирование.rar
(32.74 КБ) 33 скачивания

Markiyan Hirnyk
Сообщения: 1343
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Ускорение интегрирования

Сообщение Markiyan Hirnyk » Пн дек 10, 2018 6:02 pm

Попробуйте применить пакет OrthogonalExpansions.

NikitaTsybin
Сообщения: 17
Зарегистрирован: Чт ноя 22, 2018 2:10 pm

Re: Ускорение интегрирования

Сообщение NikitaTsybin » Пн дек 10, 2018 6:31 pm

Markiyan Hirnyk, Спасибо большое! интересный пакет, скачал себе. Заинтересовала функция GramSchmidtL2. Подскажите, можно ли в ней использовать иной (неклассический) вид скалярного произведения (как например scL в приложенном мной файле) ?

Markiyan Hirnyk
Сообщения: 1343
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Ускорение интегрирования

Сообщение Markiyan Hirnyk » Пн дек 10, 2018 6:40 pm

Затрудняюсь ответить. Ваш код без комментария. GramSchmidtL2 работает и с кратными интегралами.

NikitaTsybin
Сообщения: 17
Зарегистрирован: Чт ноя 22, 2018 2:10 pm

Re: Ускорение интегрирования

Сообщение NikitaTsybin » Пн дек 10, 2018 6:50 pm

Markiyan Hirnyk, В приложении классическое скалярное произведение функций и пример скалярного произведения, которое нужно реализовать мне. Можно ли в функцию GramSchmidtL2 передать вид скалярного произведения как аргумент?
Вложения
2.PNG
2.PNG (25.65 КБ) 379 просмотров
1.PNG
1.PNG (10.07 КБ) 379 просмотров

Markiyan Hirnyk
Сообщения: 1343
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Ускорение интегрирования

Сообщение Markiyan Hirnyk » Пн дек 10, 2018 7:03 pm

NikitaTsybin, не понял вопрос, поэтому не могу ответить. Обращение за помощью с периодом 20 минут не производит положительное впечатление. Извините, я сейчас занят.

Markiyan Hirnyk
Сообщения: 1343
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Ускорение интегрирования

Сообщение Markiyan Hirnyk » Пн дек 10, 2018 9:44 pm

NikitaTsybin,
1. Формула в 2.PNG не задает скалярное произведение на векторном пространстве многочленов от двух переменных с действительными коэффициентами, т.к. не выполнено условие 3. (например, для многочлена x*y^2). Вдобавок

Код: Выделить всё

scL := proc (f1, f2) options operator, arrow; int(L(f1)*L(f2), [y = -(1/2)*h .. (1/2)*h, x = -(1/2)*b .. (1/2)*b])+bnd(f1, f2) end proc

содержит дополнительное слагаемое bnd(f1, f2). Не уверен, работает ли ортогонализация Грама-Шмидта
в этом случае.
2. Команда GramSchmidtL2 для вычисления scL неприменима.

NikitaTsybin
Сообщения: 17
Зарегистрирован: Чт ноя 22, 2018 2:10 pm

Re: Ускорение интегрирования

Сообщение NikitaTsybin » Ср дек 12, 2018 11:42 pm

Markiyan Hirnyk, Спасибо за ответ! Пакет мне все-же очень понравился.
Ортогонализация работает, после ортогонализации условие ортогональности для полученных полиномов выполняется. В моем случае это не совсем скалярное произведение, нечто иное.
Вопрос однако в другом. При вычислении своего "скалярного" произведения я интегрирую степенные полиномы. Когда число слагаемых велико (231 например) время интегрирования значительно увеличивается. При этом разница во времени счета при переходе от рациональных чисел к числам с плавающей точкой, присутствует, но не так значительна. Вопрос, каким образом можно ускорить интегрирование при работе с числами с плавающей запятой. Возможно в функцию int нужно вписать какой-либо параметр? Или, возможно, есть подключаемые пакеты, позволяющие это сделать?

Markiyan Hirnyk
Сообщения: 1343
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Ускорение интегрирования

Сообщение Markiyan Hirnyk » Ср дек 12, 2018 11:47 pm

NikitaTsybin, не знаю.
Ортогонализация работает, после ортогонализации условие ортогональности для полученных полиномов выполняется
- голословное утверждение.

NikitaTsybin
Сообщения: 17
Зарегистрирован: Чт ноя 22, 2018 2:10 pm

Re: Ускорение интегрирования

Сообщение NikitaTsybin » Чт дек 13, 2018 12:31 pm

Markiyan Hirnyk,
Исходный

Код: Выделить всё

1, x, y, x^2, x*y, y^2, x^3, x^2*y, x*y^2, y^3, x^4, x^3*y, x^2*y^2, x*y^3, y^4, x^5, x^4*y, x^3*y^2, x^2*y^3, x*y^4, y^5

После ортогонализации

Код: Выделить всё

seq(B[k], k = 0 .. kmax)

Код: Выделить всё

.3535533906, -.3273268354*x, .3273268354*y, -.2408104871*x^2+.1605403246, .4330127020*x*y, -.2411310465*y^2+.1690403212-0.1242943538e-1*x^2, .3111141839*x^3-.5600055310*x, -.3906613355*x^2*y+.1674262867*y, .3939862883*x*y^2-.2420699573*x+0.4067705047e-1*x^3, -.3137621038*y^3+.5866621662*y-0.5107755173e-1*x^2*y, 0.2082899774e-1*x^4+0.1492960456e-1-0.4034904859e-1*x^2-0.7914562532e-3*y^2, -.4278485634*x^3*y+.5562031328*x*y, .5394200566*x^2*y^2-0.5842284352e-1+.1604243966*x^2-.1807973076*y^2-.1796698354*x^4, -.4872148312*x*y^3+.9363766216*x*y-.2330748772*x^3*y, .5961180560*y^4+0.9283979140e-2+1.106641879*x^2-1.104233666*y^2-.5680155278*x^4-0.8325291376e-1*x^2*y^2, -0.7216856579e-2*x^5-0.6507284862e-2*x+0.1413628387e-1*x^3+0.1433914196e-3*x*y^2, 0.3606018851e-1*x^4*y+0.2104721102e-1*y-0.6578996715e-1*x^2*y-0.2324840511e-2*y^3, -.6470770747*x^3*y^2-0.8142607446e-1*x-0.2359168892e-1*x^3+.4863032997*x*y^2+.1294122257*x^5, .4337565630*x^2*y^3-.1197100038*y+.4616020162*x^2*y-.1262167709*y^3-.4326294998*x^4*y, -1.191670637*x*y^4-.5391659083*x-.4069599132*x^3+2.518906251*x*y^2+.3313345237*x^5-.4650454407*x^3*y^2, .3557838860*y^5-.5316003744*y+2.522691992*x^2*y-.3878616949*y^3-1.109779386*x^4*y-.6684543703*x^2*y^3

Код: Выделить всё

seq(seq(scL(B[k], B[m]), m = 0 .. kmax), k = 0 .. kmax)

Код: Выделить всё

1.000000000, 0., 0., -4.2*10^(-10), 0., -1.6*10^(-10), 0., 0., 0., 0., -6.8*10^(-11), 0., 4.0*10^(-10), 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.000000001, 0., 0., 0., 0., 2.*10^(-11), 0., 1.8*10^(-10), 0., 0., 0., 0., 0., 0., -1.08*10^(-11), 0., 3.6*10^(-10), 0., 2.04*10^(-9), 0., 0., 0., 1.000000000, 0., 0., 0., 0., 8.*10^(-11), 0., 1.*10^(-10), 0., 0., 0., 0., 0., 0., -1.0*10^(-11), 0., -6.4*10^(-10), 0., 2.04*10^(-9), -4.2*10^(-10), 0., 0., .9999999996, 0., -2.*10^(-11), 0., 0., 0., 0., -4.2*10^(-11), 0., 1.0*10^(-10), 0., 2.16*10^(-9), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.000000001, 0., 0., 0., 0., 0., 0., 8.*10^(-10), 0., 1.4*10^(-9), 0., 0., 0., 0., 0., 0., 0., -1.6*10^(-10), 0., 0., -2.*10^(-11), 0., .9999999997, 0., 0., 0., 0., -1.6*10^(-12), 0., -1.86*10^(-10), 0., -5.6*10^(-10), 0., 0., 0., 0., 0., 0., 0., 2.*10^(-11), 0., 0., 0., 0., 1.000000000, 0., 2.0*10^(-10), 0., 0., 0., 0., 0., 0., 8.6*10^(-12), 0., 8.*10^(-11), 0., -6.*10^(-10), 0., 0., 0., 8.*10^(-11), 0., 0., 0., 0., .9999999998, 0., -1.0*10^(-10), 0., 0., 0., 0., 0., 0., 4.4*10^(-11), 0., 0., 0., -3.24*10^(-9), 0., 1.8*10^(-10), 0., 0., 0., 0., 2.0*10^(-10), 0., 1.000000000, 0., 0., 0., 0., 0., 0., -3.4*10^(-13), 0., 0., 0., -1.6*10^(-9), 0., 0., 0., 1.*10^(-10), 0., 0., 0., 0., -1.0*10^(-10), 0., .9999999996, 0., 0., 0., 0., 0., 0., 4.*10^(-12), 0., 0., 0., -1.6*10^(-9), -6.8*10^(-11), 0., 0., -4.2*10^(-11), 0., -1.6*10^(-12), 0., 0., 0., 0., 1.000000000, 0., 5.03*10^(-10), 0., -1.627*10^(-8), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 8.*10^(-10), 0., 0., 0., 0., 0., 0., .9999999992, 0., -6.6*10^(-10), 0., 0., 0., 0., 0., 0., 0., 4.0*10^(-10), 0., 0., 1.0*10^(-10), 0., -1.86*10^(-10), 0., 0., 0., 0., 5.03*10^(-10), 0., .9999999992, 0., -1.318*10^(-10), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.4*10^(-9), 0., 0., 0., 0., 0., 0., -6.6*10^(-10), 0., 1.000000001, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 2.16*10^(-9), 0., -5.6*10^(-10), 0., 0., 0., 0., -1.627*10^(-8), 0., -1.318*10^(-10), 0., .9999999998, 0., 0., 0., 0., 0., 0., 0., -1.08*10^(-11), 0., 0., 0., 0., 8.6*10^(-12), 0., -3.4*10^(-13), 0., 0., 0., 0., 0., 0., 1.000000001, 0., -1.34909*10^(-8), 0., -3.9493*10^(-8), 0., 0., 0., -1.0*10^(-11), 0., 0., 0., 0., 4.4*10^(-11), 0., 4.*10^(-12), 0., 0., 0., 0., 0., 0., .9999999990, 0., 6.39*10^(-9), 0., 2.131*10^(-8), 0., 3.6*10^(-10), 0., 0., 0., 0., 8.*10^(-11), 0., 0., 0., 0., 0., 0., 0., 0., -1.34909*10^(-8), 0., .9999999995, 0., -3.077544*10^(-10), 0., 0., 0., -6.4*10^(-10), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 6.39*10^(-9), 0., .9999999992, 0., 2.2060*10^(-9), 0., 2.04*10^(-9), 0., 0., 0., 0., -6.*10^(-10), 0., -1.6*10^(-9), 0., 0., 0., 0., 0., 0., -3.9493*10^(-8), 0., -3.077544*10^(-10), 0., .9999999997, 0., 0., 0., 2.04*10^(-9), 0., 0., 0., 0., -3.24*10^(-9), 0., -1.6*10^(-9), 0., 0., 0., 0., 0., 0., 2.131*10^(-8), 0., 2.2060*10^(-9), 0., 1.000000000
Вложения
Интегрирование2.rar
(10.09 КБ) 31 скачивание