Parece que estoy un poquito tarde para este partido en particular, pero pensé que tenía que mostrar otra manera de resolver el OP algebraica del sistema, que voy a refundir aquí en notación diferente:
$$\begin{aligned}
w_1+w_2+w_3&=m_0\\
w_1 x_1+w_2 x_2+w_3 x_3&=m_1\\
w_1 x_1^2+w_2 x_2^2+w_3 x_3^2&=m_2\\
w_1 x_1^3+w_2 x_2^3+w_3 x_3^3&=m_3\\
w_1 x_1^4+w_2 x_2^4+w_3 x_3^4&=m_4\\
w_1 x_1^5+w_2 x_2^5+w_3 x_3^5&=m_5
\end{aligned}$$
y el problema es encontrar los $x_i$ y el $w_i$ satisfacer el sistema de ecuaciones.
La clave aquí es reconocer que este es exactamente el problema de la recuperación de los nodos $x_i$ y pesos $w_i$ de $n$-punto de cuadratura de Gauss de la regla con un poco de peso de la función $w(u)$ y un poco de apoyo intervalo $[a,b]$, dado los momentos de $m_j=\int_a^b w(u)u^j \mathrm du,\quad j=0\dots2n-1$. Recordemos que $$n-punto las reglas son diseñadas para exactamente integrar funciones de la forma $w(u)p(u)$, donde $p(u)$ es un polinomio de grado a lo más $2n-1$, y esta es la razón por la que tenemos $2n$ ecuaciones.
Como es bien sabido, los nodos y los pesos de una cuadratura de Gauss puede ser obtenida si sabemos que los polinomios ortogonales $P_k(u)$ asociadas con el peso de la función $w(u)$. Esto es debido al hecho de que los nodos de una $n$-punto de Gauss regla son las raíces del polinomio ortogonal $P_n(u)$. La primera fase del problema, ahora, es determinar el conjunto de polinomios ortogonales de los momentos.
Por suerte, en 1859(!), Chebyshev obtenido un método para determinar la recursividad de los coeficientes de $a_k$, $b_k$ para el polinomio ortogonal de recurrencia
$$P_{k+1}(u)=(u-a_k)P_k(u)-b_k P_{k-1}(u)\quad P_{-1}(u)=0,P_0(u)=1$$
cuando se les da la $m_j$. Chebyshev del algoritmo es el siguiente: inicializar las cantidades
$$\sigma_{-1,l}=0,\quad l=1,\dots,2n-2$$
$$\sigma_{0,l}=m_l,\quad l=0,\dots,2n-1$$
$$a_0=\frac{m_1}{m_0}$$
$$b_0=m_0$$
y, a continuación, realizar la recursividad
$$\sigma_{k,l}=\sigma_{k-1,l+1}-a_{k-1}\sigma_{k-1,l}-b_{k-1}\sigma_{k-2,l}$$
para $l=k,\dots,2n-k+1$ y $k=1,\dots,n-1$, a partir de la cual la recursividad coeficientes de $k=1,\dots,n-1$ son dadas por
$$a_k=\frac{\sigma_{k,k+1}}{\sigma_{k,k}}-\frac{\sigma_{k-1,k}}{\sigma_{k-1,k-1}}$$
$$b_k=\frac{\sigma_{k,k}}{\sigma_{k-1,k-1}}$$
Voy a omitir los detalles de cómo el algoritmo se obtuvo, y en lugar de decirle a usted para buscar en este papel por Walter Gautschi donde se habla de estas cosas.
Una vez que el $a_k$ y $b_k$ se han obtenido, resolviendo el conjunto original de ecuaciones se puede hacer a través de la Golub-Welsch algoritmo; esencialmente, uno resuelve un tridiagonal simétrica eigenproblem donde $a_k$ son las entradas de la diagonal y el $b_k$ son las entradas fuera de la diagonal (el polinomio característico de este tridiagonal simétrica la matriz es de $P_n(x)$). El $x_i$ son los autovalores de la matriz, y los $w_i$ puede ser obtenido a partir de los primeros componentes de los vectores propios normalizados por la multiplicación de los cuadrados de esas cantidades con $m_0$.
He sido totalmente teórico hasta este punto, y usted y la mayoría de la gente prefiere tener el código para jugar con. Por lo tanto, ofrecen la siguiente Mathematica aplicación de la teoría de los descritos anteriormente:
(* Chebyshev's algorithm *)
chebAlgo[mom_?VectorQ, prec_: MachinePrecision] :=
Module[{n = Quotient[Length[mom], 2], si = mom, ak, bk, np, sp, s, v},
np = Precision[mom]; If[np === Infinity, np = prec];
ak[1] = mom[[2]]/First[mom]; bk[1] = First[mom];
sp = PadRight[{First[mom]}, 2 n - 1];
Do[
sp[[k - 1]] = si[[k - 1]];
Do[
v = sp[[j]];
sp[[j]] = s = si[[j]];
si[[j]] = si[[j + 1]] - ak[k - 1] s - bk[k - 1] v;
, {j, k, 2 n - k + 1}];
ak[k] = si[[k + 1]]/si[[k]] - sp[[k]]/sp[[k - 1]];
bk[k] = si[[k]]/sp[[k - 1]];
, {k, 2, n}];
N[{Table[ak[k], {k, n}], Table[bk[k], {k, n}]}, np]
]
(* Golub-Welsch algorithm *)
golubWelsch[d_?VectorQ, e_?VectorQ] :=
Transpose[
MapAt[(First[e] Map[First, #]^2) &,
Eigensystem[
SparseArray[{Band[{1, 1}] -> d, Band[{1, 2}] -> Sqrt[Rest[e]],
Band[{2, 1}] -> Sqrt[Rest[e]]}, {Length[d], Length[d]}]], {2}]]
(Tomo nota de que la aplicación aquí de Chebyshev del algoritmo se ha optimizado para el uso de dos vectores en lugar de una matriz de dos dimensiones.)
Vamos a intentar un ejemplo. Deje de $m_j=j!$ y tomar el sistema anterior ($n=3$):
{d, e} = chebAlgo[Range[0, 5]!]
{{1., 3., 5.}, {1., 1., 4.}}
xw = golubWelsch[d, e]
{{6.2899450829374794, 0.010389256501586145}, {2.2942803602790467, 0.27851773356923976}, {0.4157745567834814, 0.7110930099291743}}
Tenemos aquí la equivalencia xw[[i, 1]]
$=x_i$ y xw[[i, 2]]
$=w_i$; vamos a ver si el conjunto original de ecuaciones son satisfechos:
Chop[Table[Sum[xw[[j, 2]] xw[[j, 1]]^i, {j, 3}] - i!, {i, 0, 5}]]
{0, 0, 0, 0, 0, 0}
y lo son.
(Este ejemplo corresponde a la generación de los tres puntos de Gauss-Laguerre de la regla.)
Como final a un lado, la solución dada por Aryabhata es una manera aceptable de la generación de cuadratura de Gauss reglas de momentos, a pesar de que se requieren $O(n^3)$ esfuerzo en la solución de las ecuaciones lineales, frente a los $O(n^2)$ esfuerzo que se requiere para la combinación de Chebyshev y Golub-Welsch. Hildebrand da una discusión de este enfoque en su libro.
Aquí es Aryabhata propuesta en Mathematica código (después de haber hecho la eliminación de las variables correspondientes en el fondo):
gaussPolyGen[mom_?VectorQ, t_] :=
Module[{n = Quotient[Length[mom], 2]},
Expand[Fold[(#1 t + #2) &, 1, Reverse[LinearSolve[
Apply[HankelMatrix, Partition[mom, n, n-1]], -Take[mom, -n]]]]]]
y comparar, utilizando el ejemplo anterior:
gaussPolyGen[Range[0, 5]!, t]
-6 + 18*t - 9*t^2 + t^3
% == -6 LaguerreL[3, t] // Simplify
True
Después de haber encontrado las raíces del polinomio generado por gaussPolyGen[]
, uno sólo resuelve un adecuado Vandermonde sistema lineal para obtener los pesos.
nodes = t /. NSolve[gaussPolyGen[Range[0, 5]!, t], t, 20]
{0.4157745567834791, 2.294280360279042, 6.2899450829374794}
weights = LinearAlgebra`VandermondeSolve[nodes, Range[0, 2]!]
{0.711093009929173, 0.27851773356924087, 0.010389256501586128}
Los resultados aquí y desde el método anterior son comparables.