exponenta event banner

Квадратурные оценочные точки и веса Гаусса-Лагера

В этом примере показано, как решать полиномиальные уравнения и системы уравнений и работать с результатами с помощью символьных математических Toolbox™.

Правила гауссовой квадратуры аппроксимируют интеграл суммами ∫abf (t) w (t) dt≈∑i=1nf (xi) αi. Здесь xi и αi являются параметрами метода, в зависимости от n, но не от f. Они следуют из выбора весовой функции w (t) следующим образом. С весовой функцией связано семейство ортогональных многочленов. Корни многочленов являются точками оценки xi. Наконец, веса αi определяются условием, что метод будет правильным для многочленов малой степени. Рассмотрим весовую функцию w (t) = exp (-t) на интервале [0,∞]. Этот случай известен как квадратура Гаусса-Лагера.

syms t
n = 4;
w(t) = exp(-t);

Предположим, что вы знаете первые n членов семейства ортогональных многочленов. В случае рассматриваемого здесь квадратурного правила они оказываются многочленами Лагера.

F = laguerreL(0:n-1, t)
F = 

(11-tt22-2t+1-t36+3t22-3t+1)[sym(1), 1 - t, t^2/2 - 2*t + 1, - t^3/6 + (3*t^2)/2 - 3*t + 1]

Давайте L быть n + 1-м многочленом, коэффициенты которого ещё предстоит определить.

X = sym('X', [1, n+1])
X = (X1X2X3X4X5)[X1, X2, X3, X4, X5]
L = poly2sym(X, t)
L = X1t4+X2t3+X3t2+X4t+X5X1*t^4 + X2*t^3 + X3*t^2 + X4*t + X5

Представление отношений ортогональности между многочленами Лагера F и L в системе уравнений sys.

sys = [int(F.*L.*w(t), t, 0, inf) == 0]
sys = (24X1+6X2+2X3+X4+X5=0-96X1-18X2-4X3-X4=0144X1+18X2+2X3=0-96X1-6X2=0)[24*X1 + 6*X2 + 2*X3 + X4 + X5 == 0, - 96*X1 - 18*X2 - 4*X3 - X4 == 0, 144*X1 + 18*X2 + 2*X3 == 0, - 96*X1 - 6*X2 == 0]

Добавьте условие, что полином имеет норму 1.

sys = [sys, int(L^2.*w(t), 0, inf) == 1]
sys = (24X1+6X2+2X3+X4+X5=0-96X1-18X2-4X3-X4=0144X1+18X2+2X3=0-96X1-6X2=040320X12+10080X1X2+1440X1X3+240X1X4+48X1X5+720X22+240X2X3+48X2X4+12X2X5+24X32+12X3X4+4X3X5+2X42+2X4X5+X52=1)[24*X1 + 6*X2 + 2*X3 + X4 + X5 == 0, - 96*X1 - 18*X2 - 4*X3 - X4 == 0, 144*X1 + 18*X2 + 2*X3 == 0, - 96*X1 - 6*X2 == 0, 40320*X1^2 + 10080*X1*X2 + 1440*X1*X3 + 240*X1*X4 + 48*X1*X5 + 720*X2^2 + 240*X2*X3 + 48*X2*X4 + 12*X2*X5 + 24*X3^2 + 12*X3*X4 + 4*X3*X5 + 2*X4^2 + 2*X4*X5 + X5^2 == 1]

Решение для коэффициентов L.

S = solve(sys, X)
S = struct with fields:
    X1: [2x1 sym]
    X2: [2x1 sym]
    X3: [2x1 sym]
    X4: [2x1 sym]
    X5: [2x1 sym]

solve возвращает два решения в массиве структуры. Просмотрите решения.

structfun(@display, S)
ans = 

(-124124)[-sym(1/24); sym(1/24)]

ans = 

(23-23)[sym(2/3); -sym(2/3)]

ans = 

(-33)[-sym(3); sym(3)]

ans = 

(4-4)[sym(4); -sym(4)]

ans = 

(-11)[-sym(1); sym(1)]

Сделать решение уникальным, наложив дополнительное условие, чтобы первый коэффициент был положительным:

sys = [sys, X(1)>0];
S = solve(sys, X)
S = struct with fields:
    X1: [1x1 sym]
    X2: [1x1 sym]
    X3: [1x1 sym]
    X4: [1x1 sym]
    X5: [1x1 sym]

Замените раствор на L.

L = subs(L, S)
L = 

t424-2t33+3t2-4t+1t^4/24 - (2*t^3)/3 + 3*t^2 - 4*t + 1

Как и ожидалось, этот многочлен является многочленом Лагера:

laguerreL(n, t)
ans = 

t424-2t33+3t2-4t+1t^4/24 - (2*t^3)/3 + 3*t^2 - 4*t + 1

Точки оценки xi являются корнями многочлена L. Решить L для точек оценки. Корни выражены в терминах root функция.

x = solve(L)
x = 

(root(σ1,z,1)root(σ1,z,2)root(σ1,z,3)root(σ1,z,4))where  σ1=z4-16z3+72z2-96z+24[root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1); root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2); root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3); root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)]

Форма решений может предполагать, что ничего не достигнуто, но на них доступны различные операции. Вычисление аппроксимаций с плавающей запятой с помощью vpa:

vpa(x)
ans = 

(0.322547689619392311800361459104371.74576110115834657568681671251794.53662029692112798327928538495719.3950709123011331292335364434205)[vpa('0.32254768961939231180036145910437'); vpa('1.7457611011583465756868167125179'); vpa('4.5366202969211279832792853849571'); vpa('9.3950709123011331292335364434205')]

Могут возникнуть некоторые ложные мнимые части. Докажи символически, что корни реальные числа:

isAlways(in(x, 'real'))
ans = 4x1 logical array

   1
   1
   1
   1

Для многочленов степени меньше или равной 4 можно использовать MaxDegree для получения растворов в терминах вложенных радикалов, а не в терминах root. Однако последующие операции с результатами этой формы будут медленными.

xradical = solve(L, 'MaxDegree', 4)
xradical = 

(4-σ1-σ34+σ1-σ3σ3-σ2+4σ3+σ2+4)where  σ1=96σ6σ4-3σ5σ4-288σ4-512366+36i2768+12836i1/6144σ6+9σ5+8641/4  σ2=96σ6σ4-3σ5σ4-288σ4+512366+36i2768+12836i1/6144σ6+9σ5+8641/4  σ3=σ42768+12836i1/6  σ4=16σ6+σ5+96  σ5=768+12836i2/3  σ6=768+12836i1/3[4 - sqrt(96*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3)*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) - 3*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3)*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) - 288*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) - 512*sqrt(sym(3))*sqrt(sym(6))*sqrt(6 + sqrt(sym(3))*sqrt(sym(6))*sym(1i)))/(2*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/6)*(144*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + 9*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 864)^sym(1/4)) - sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96)/(2*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/6)); 4 + sqrt(96*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3)*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) - 3*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3)*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) - 288*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) - 512*sqrt(sym(3))*sqrt(sym(6))*sqrt(6 + sqrt(sym(3))*sqrt(sym(6))*sym(1i)))/(2*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/6)*(144*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + 9*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 864)^sym(1/4)) - sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96)/(2*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/6)); sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96)/(2*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/6)) - sqrt(96*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3)*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) - 3*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3)*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) - 288*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) + 512*sqrt(sym(3))*sqrt(sym(6))*sqrt(6 + sqrt(sym(3))*sqrt(sym(6))*sym(1i)))/(2*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/6)*(144*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + 9*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 864)^sym(1/4)) + 4; sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96)/(2*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/6)) + sqrt(96*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3)*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) - 3*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3)*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) - 288*sqrt(16*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + (768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 96) + 512*sqrt(sym(3))*sqrt(sym(6))*sqrt(6 + sqrt(sym(3))*sqrt(sym(6))*sym(1i)))/(2*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/6)*(144*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(1/3) + 9*(768 + 128*sqrt(sym(3))*sqrt(sym(6))*sym(1i))^sym(2/3) + 864)^sym(1/4)) + 4]

Веса αi задаются условием, что для многочленов степени меньше n квадратурное правило должно давать точные результаты. Достаточно, если это для базиса векторного пространства этих многочленов. Это условие приводит к системе из четырех уравнений в четырех переменных.

y = sym('y', [n, 1]);
sys = sym(zeros(n));
for k=0:n-1 
    sys(k+1) = sum(y.*(x.^k)) == int(t^k * w(t), t, 0, inf); 
end
sys
sys = 

(y1+y2+y3+y4=1000y1root(σ1,z,1)+y2root(σ1,z,2)+y3root(σ1,z,3)+y4root(σ1,z,4)=1000y1root(σ1,z,1)2+y2root(σ1,z,2)2+y3root(σ1,z,3)2+y4root(σ1,z,4)2=2000y1root(σ1,z,1)3+y2root(σ1,z,2)3+y3root(σ1,z,3)3+y4root(σ1,z,4)3=6000)where  σ1=z4-16z3+72z2-96z+24[y1 + y2 + y3 + y4 == 1, sym(0), sym(0), sym(0); y1*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1) + y2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) + y3*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + y4*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) == 1, sym(0), sym(0), sym(0); y1*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)^2 + y2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)^2 + y3*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)^2 + y4*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)^2 == 2, sym(0), sym(0), sym(0); y1*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)^3 + y2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)^3 + y3*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)^3 + y4*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)^3 == 6, sym(0), sym(0), sym(0)]

Решите систему как численно, так и символически. Раствор представляет собой желаемый вектор весов αi.

[a1, a2, a3, a4] = vpasolve(sys, y)
a1 = 0.60315410434163360163596602381808vpa('0.60315410434163360163596602381808')
a2 = 0.35741869243779968664149201745809vpa('0.35741869243779968664149201745809')
a3 = 0.03888790851500538427243816815621vpa('0.03888790851500538427243816815621')
a4 = 0.00053929470556132745010379056762059vpa('0.00053929470556132745010379056762059')
[alpha1, alpha2, alpha3, alpha4] = solve(sys, y)
alpha1 = 

-σ3σ2+σ3σ1+σ2σ1-σ3σ2σ1-2σ3-2σ2-2σ1+6σ4-σ3σ4σ2+σ4σ1-σ2σ1-σ42where  σ1=root(z4-16z3+72z2-96z+24,z,4)  σ2=root(z4-16z3+72z2-96z+24,z,3)  σ3=root(z4-16z3+72z2-96z+24,z,2)  σ4=root(z4-16z3+72z2-96z+24,z,1)-(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + 6)/((root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2))*(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)^2))

alpha2 = 

root(σ1,z,1)root(σ1,z,3)+root(σ1,z,1)root(σ1,z,4)+root(σ1,z,3)root(σ1,z,4)-root(σ1,z,1)root(σ1,z,3)root(σ1,z,4)-2root(σ1,z,1)-2root(σ1,z,3)-2root(σ1,z,4)+6root(σ1,z,2)-root(σ1,z,1)root(σ1,z,2)-root(σ1,z,3)root(σ1,z,2)-root(σ1,z,4)where  σ1=z4-16z3+72z2-96z+24(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + 6)/((root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1))*(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3))*(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)))

alpha3 = 

σ3σ2+σ3σ1+σ2σ1-σ3σ2σ1-2σ3-2σ2-2σ1+6σ4-σ1σ3σ2-σ3σ4-σ2σ4+σ42where  σ1=root(z4-16z3+72z2-96z+24,z,4)  σ2=root(z4-16z3+72z2-96z+24,z,2)  σ3=root(z4-16z3+72z2-96z+24,z,1)  σ4=root(z4-16z3+72z2-96z+24,z,3)(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + 6)/((root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4))*(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)^2))

alpha4 = 

-σ3σ2+σ3σ1+σ2σ1-σ3σ2σ1-2σ3-2σ2-2σ1+6σ42σ3+σ42σ2+σ42σ1-σ43+σ3σ2σ1-σ3σ2σ4-σ3σ1σ4-σ2σ1σ4where  σ1=root(z4-16z3+72z2-96z+24,z,3)  σ2=root(z4-16z3+72z2-96z+24,z,2)  σ3=root(z4-16z3+72z2-96z+24,z,1)  σ4=root(z4-16z3+72z2-96z+24,z,4)-(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + 6)/(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)^2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)^2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)^2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)^3 + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4))

Кроме того, решение можно получить в виде структуры, указав только один выходной аргумент.

S = solve(sys, y)
S = struct with fields:
    y1: [1x1 sym]
    y2: [1x1 sym]
    y3: [1x1 sym]
    y4: [1x1 sym]

structfun(@double, S)
ans = 4×1

    0.6032
    0.3574
    0.0389
    0.0005

Преобразование структуры S в символьный массив:

Scell = struct2cell(S);
alpha = transpose([Scell{:}])
alpha = 

(-σ3+σ15+σ2-σ6-σ12-σ11-σ10+6root(σ16,z,1)-root(σ16,z,2)σ1+σ4-σ2-root(σ16,z,1)2σ1+σ4+σ2-σ7-σ13-σ11-σ10+6root(σ16,z,2)-root(σ16,z,1)root(σ16,z,2)-root(σ16,z,3)root(σ16,z,2)-root(σ16,z,4)σ5+σ4+σ15-σ8-σ13-σ12-σ10+6root(σ16,z,3)-root(σ16,z,4)σ5-σ1-σ3+root(σ16,z,3)2-σ5+σ1+σ3-σ9-σ13-σ12-σ11+6σ14root(σ16,z,1)+σ14root(σ16,z,2)+σ14root(σ16,z,3)-root(σ16,z,4)3+σ9-σ8-σ7-σ6)where  σ1=root(σ16,z,1)root(σ16,z,3)  σ2=root(σ16,z,3)root(σ16,z,4)  σ3=root(σ16,z,2)root(σ16,z,3)  σ4=root(σ16,z,1)root(σ16,z,4)  σ5=root(σ16,z,1)root(σ16,z,2)  σ6=root(σ16,z,2)root(σ16,z,3)root(σ16,z,4)  σ7=root(σ16,z,1)root(σ16,z,3)root(σ16,z,4)  σ8=root(σ16,z,1)root(σ16,z,2)root(σ16,z,4)  σ9=root(σ16,z,1)root(σ16,z,2)root(σ16,z,3)  σ10=2root(σ16,z,4)  σ11=2root(σ16,z,3)  σ12=2root(σ16,z,2)  σ13=2root(σ16,z,1)  σ14=root(σ16,z,4)2  σ15=root(σ16,z,2)root(σ16,z,4)  σ16=z4-16z3+72z2-96z+24[-(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + 6)/((root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2))*(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)^2)); (root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + 6)/((root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1))*(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3))*(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4))); (root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) + 6)/((root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4))*(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)^2)); -(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) - 2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) + 6)/(root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)^2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)^2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2) + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)^2*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)^3 + root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4) - root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4))]

Символическое решение выглядит сложным. Упростите его и преобразуйте в вектор с плавающей запятой:

alpha = simplify(alpha)
alpha = 

(root(σ1,z,1)272-29root(σ1,z,1)144+23root(σ1,z,2)272-29root(σ1,z,2)144+23root(σ1,z,3)272-29root(σ1,z,3)144+23root(σ1,z,4)272-29root(σ1,z,4)144+23)where  σ1=z4-16z3+72z2-96z+24[root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)^2/72 - (29*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1))/144 + sym(2/3); root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2)^2/72 - (29*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 2))/144 + sym(2/3); root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3)^2/72 - (29*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 3))/144 + sym(2/3); root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4)^2/72 - (29*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 4))/144 + sym(2/3)]

vpa(alpha)
ans = 

(0.603154104341633601635966023818080.357418692437799686641492017458090.038887908515005384272438168156210.00053929470556132745010379056762059)[vpa('0.60315410434163360163596602381808'); vpa('0.35741869243779968664149201745809'); vpa('0.03888790851500538427243816815621'); vpa('0.00053929470556132745010379056762059')]

Повышение читаемости путем замены вхождений корней x в alpha по сокращениям:

subs(alpha, x, sym('R', [4, 1]))
ans = 

(R1272-29R1144+23R2272-29R2144+23R3272-29R3144+23R4272-29R4144+23)[R1^2/72 - (29*R1)/144 + sym(2/3); R2^2/72 - (29*R2)/144 + sym(2/3); R3^2/72 - (29*R3)/144 + sym(2/3); R4^2/72 - (29*R4)/144 + sym(2/3)]

Суммировать веса, чтобы показать, что их сумма равна 1:

simplify(sum(alpha))
ans = 1sym(1)

Другим способом получения весов квадратурного правила является их вычисление по формуле αi=∫abw (t) ∏j≠it-xjxi-xjdt. Сделайте это для i = 1. Это приводит к тому же результату, что и другой метод:

int(w(t) * prod((t - x(2:4)) ./ (x(1) - x(2:4))), t, 0, inf)
ans = 

root(z4-16z3+72z2-96z+24,z,1)272-29root(z4-16z3+72z2-96z+24,z,1)144+23root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1)^2/72 - (29*root(z^4 - 16*z^3 + 72*z^2 - 96*z + 24, z, 1))/144 + sym(2/3)

Квадратурное правило дает точные результаты даже для всех многочленов степени меньше или равной 2n-1, но не для t2n.

simplify(sum(alpha.*(x.^(2*n-1))) -int(t^(2*n-1)*w(t), t, 0, inf))
ans = 0sym(0)
simplify(sum(alpha.*(x.^(2*n))) -int(t^(2*n)*w(t), t, 0, inf))
ans = -576-sym(576)

Примените правило квадратуры к косинусу и сравните с точным результатом:

vpa(sum(alpha.*(cos(x))))
ans = 0.50249370546067059229918484198931vpa('0.50249370546067059229918484198931')
int(cos(t)*w(t), t, 0, inf)
ans = 

12sym(1/2)

Для степеней косинуса погрешность колеблется между нечётными и чётными степенями:

errors = zeros(1, 20);
for k=1:20 
    errors(k) = double(sum(alpha.*(cos(x).^k)) -int(cos(t)^k*w(t), t, 0, inf));
end
plot(real(errors))

Figure contains an axes. The axes contains an object of type line.