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

Этот пример показывает, как решить полиномиальные уравнения и системы уравнений и работать с результатами с помощью Symbolic Math Toolbox™.

Гауссовы квадратурные правила аппроксимируют интеграл по суммам abf(t)w(t)dti=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 st полинома, коэффициенты которого еще предстоит определить.

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 * X

Решить для коэффициентов 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)[-сим (1/24); sym (1/24)]

ans = 

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

ans = 

(-33)[-сим (3); sym (3)]

ans = 

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

ans = 

(-11)[-сим (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+1т ^ 4/24 - (2 * т ^ 3 )/3 + 3 * т ^ 2 - 4 * т + 1

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

laguerreL(n, t)
ans = 

t424-2t33+3t2-4t+1т ^ 4/24 - (2 * т ^ 3 )/3 + 3 * т ^ 2 - 4 * т + 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[корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1); корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2); корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3); корень (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.745761101158346575688167125179'); 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)) * syxrt(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 * (7) (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 (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 * ssm 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(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 * (7) (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 (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 * ssm(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) + 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(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(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 * (7) (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(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 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(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(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 * (7) (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(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

Веса α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 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) + y2 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) + y3 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24 * root y1 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) ^ 2 + y2 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) ^ 2 + y3 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 y1 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) ^ 3 + y2 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) ^ 3 + y3 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96

Решить систему как численно, так и символически. Решение является желаемым вектором весов α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)- (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) + корень(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) + корень(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) - корень(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 )/((корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) - корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2))* (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) + корень(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) - корень(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) - корень(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(корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) + корень(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) + корень(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) - корень(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 )/((корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) - корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1))* (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) - корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3))* (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) - корень(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)(корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) + корень(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) + корень(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) - корень(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 )/((корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) - корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 4))* (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) - корень(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) - корень(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) + корень(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)- (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) + корень(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) + корень(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) - корень(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 )/(корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 4) ^ 2 * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) + корень(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) + корень(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) - корень(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) - корень(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) - корень(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) - корень(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[- (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) + корень(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) + корень(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) - корень(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 )/((корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) - корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2))* (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) + корень(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) - корень(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) - корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) ^ 2)); (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) + корень(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) + корень(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) - корень(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 )/((корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) - корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1))* (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) - корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3))* (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) - корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 4))); (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) + корень(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) + корень(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) - корень(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 )/((корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) - корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 4))* (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) - корень(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) - корень(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) + корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) ^ 2)); - (корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1)* корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) + корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1)* корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) + корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2)* корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) - корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1)* корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2)* корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) - 2 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) - 2 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) - 2 * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 3) + 6 )/( корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 4) ^ 2 * корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) + корень(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) + корень(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) - корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 4)^ 3 + корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) * корень(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) - корень(z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 1) * корень (z ^ 4 - 16 * z^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 2) * корень (z ^ 4 - 16 * z ^ 3 + 72 * z ^ 2 - 96 * z + 24, z, 4) - корень(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) - корень(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[корень (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); корень (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); корень (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); корень (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)jit-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+23корень (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-сым (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.

Для просмотра документации необходимо авторизоваться на сайте