Tabla de contenido
1. Operador de generación de acumulación
2. Operador generador de media
3. Análisis de factibilidad (prueba de gradación)
4. Establecer el modelo GM(1,1)
3. Construya la matriz de datos B y el vector de datos Y:
prefacio
Presente brevemente el modelo de pronóstico gris y use matlab para analizar casos específicos, y continuará agregando más adelante
1. Realización del modelo
1. Introducción al proceso
- Gray genera nuevos operadores
- Análisis de viabilidad
- Construir un modelo GM(1,1)
- prueba de precisión
2. Generación gris
En pocas palabras, el propósito del nuevo operador de generación gris es debilitar la aleatoriedad de la secuencia desordenada y transformarla en una secuencia ordenada para mostrar las reglas y analizarla. Los operadores de generación comunes son los siguientes:
- 1. Operador de Generación Acumulativa (AGO)
- 2. Operador de generación acumulativa inversa (IAGO)
- 3. Operador de generación media (MEAN)
- 4. Operador de generación de escala
1. Operador de generación de acumulación
El gráfico lineal de la nueva sucesión y la sucesión antigua es el siguiente, se puede observar que la nueva sucesión convierte la sucesión irregular original en una sucesión claramente regular y creciente :
2. Operador generador de media
Es decir, calcule el valor promedio de los dos elementos adyacentes del operador generador acumulativo , tomando como ejemplo el ejemplo anterior:
3. Análisis de factibilidad (prueba de gradación)
Primero calcula la razón de cada ítem de la secuencia original , es decir la razón, tomando como ejemplo el ejemplo anterior:
Relación de grado calculada :
Si se cumple la proporción de calificaciones:
Entonces el nuevo operador puede establecer un modelo GM(1,1)
pd: Hay una condición de que debe ser no negativo. Si hay un elemento de número negativo, agregue un número positivo a después de él para que y o no sean negativos antes de realizar operaciones posteriores.
4. Establecer el modelo GM(1,1)
1. Preprocesamiento de datos:
Suponga primero que la secuencia original pasa la prueba de grado,
Tome el operador generador medio como ejemplo:
Nuevo orden:
pd: De manera similar, si la prueba de proporción de calificación falla, también se puede agregar un número positivo a después de ella , de modo que todas las proporciones de calificación estén dentro del rango permitido.
2. Construye un modelo:
1. Forma original: , propósito: averiguar a, b
2. Estime a, b por análisis de regresión, la ecuación diferencial de blanqueamiento correspondiente y su solución son:
De esto obtenemos el valor predicho:
Valor de predicción de secuencia original :
3. Construya la matriz de datos B y el vector de datos Y:
Entonces , resolviendo la ecuación diferencial anterior, obtenemos
Calcule a, b y sustituya el valor predicho anterior para que se ajuste a una función de valor predicho
5. Inspección de precisión
Prueba residual:
Si el valor absoluto de todos los residuos es inferior a 0,1, se considera que cumple con los requisitos superiores, si es inferior a 0,2, cumple con los requisitos generales;
Prueba de desviación de escala:
Si el valor absoluto de todas las desviaciones de relación de grado es inferior a 0,1, se considera que cumple con los requisitos más altos, si es inferior a 0,2, cumple con los requisitos generales;
2. Análisis de casos
Prediga el número de residentes permanentes en los próximos n años con base en el número de residentes permanentes en la provincia de Fujian en los últimos diez años
Datos de 2010--2020: [3693,3784,3841,3885,3945,3984,4016,4065,4104,4137,4161] millones de personas
1. Prueba de relación de grado:
Cumple con el intervalo de prueba de relación de grado: (0.8574, 1.1663)
La relación de grado calculada por matlab es:
Aprobó la prueba de grado
código:
%级比检验通过
check = [];
for k = 2:n
lambda(k) = data(k-1)/data(k);
if (exp(-2/(n+1))<lambda(k))&&(lambda(k)<exp(2/(n+1)))
check(end+1) = 1; %通过则输出1
else check(end+1) = 0; %不通过则输出0
end
end
2. Operador de generación:
Operador de generación acumulada:
Operador generador medio:
código:
%累加生成算子
X1 = cumsum(data);
for i=2:n
z(i) = 0.5*(X1(i-1)+X1(i));
end
3. Encuentra la matriz de datos B y el vector de datos Y
POR:
código:
%数据矩阵B及数据向量Y
Y = data(2:n)';
B = [-z(2:n)',ones(n-1,1)];
u = (B'*B)\B'*Y;
a = u(1,1);
b = u(2,1);
4. Genera predicciones y
:
:
código:
%预测值
f_X1 = [];
f_X0 = [];
for k=1:n-1
f_X1(1)=data(1);
f_X1(k+1) = (data(1)-b/a)*exp(-a*k) + b/a;
end
for k=2:n
f_X0(1)=data(1);
f_X0(k)=f_X1(k)-f_X1(k-1);
end
5. Prueba de error residual y prueba de desviación de escala:
Prueba residual:
Prueba de desviación de escala:
Ambos son inferiores a 0,1, lo que demuestra que el modelo tiene una alta precisión y se puede utilizar para la predicción.
código:
%残差检验&级比偏差值检验
for k=1:n-1
sigma(k)=abs((data(k)-f_f_X0(k))/data(k));
rho(k+1)=abs(1-((1-0.5*a)*lambda(k+1))/(1+0.5*a));
end
6. El código completo es el siguiente, debe predecir cuánto puede ingresar usted mismo:
%10至20年数据,21年数据为4219
data = [3693,3784,3841,3885,3945,3984,4016,4065,4104,4137,4161];
n = length(data);
%级比检验通过
check = [];
for k = 2:n
lambda(k) = data(k-1)/data(k);
if (exp(-2/(n+1))<lambda(k))&&(lambda(k)<exp(2/(n+1)))
check(end+1) = 1;
else check(end+1) = 0;
end
end
%累加生成算子
X1 = cumsum(data);
for i=2:n
z(i) = 0.5*(X1(i-1)+X1(i));
end
%数据矩阵B及数据向量Y
Y = data(2:n)';
B = [-z(2:n)',ones(n-1,1)];
u = (B'*B)\B'*Y;
a = u(1,1);
b = u(2,1);
%预测值
f_X1 = [];
f_X0 = [];
for k=1:n-1
f_X1(1)=data(1);
f_X1(k+1) = (data(1)-b/a)*exp(-a*k) + b/a;
end
for k=2:n
f_X0(1)=data(1);
f_X0(k)=f_X1(k)-f_X1(k-1);
end
%残差检验&级比偏差值检验
for k=1:n-1
sigma(k)=abs((data(k)-f_f_X0(k))/data(k));
rho(k+1)=abs(1-((1-0.5*a)*lambda(k+1))/(1+0.5*a));
end
%预测下n个值
test = input('nums:');
n=n+test;
f_f_X1 = [];
f_f_X0 = [];
for k=1:n-1
f_f_X1(1)=data(1);
f_f_X1(k+1) = (data(1)-b/a)*exp(-a*k) + b/a;
end
for k=2:n
f_f_X0(1)=data(1);
f_f_X0(k)=f_f_X1(k)-f_f_X1(k-1);
end
Como resultado, la población residente de 21 años es de 42,28 millones, que se acerca al dato real de 4219.
3. Análisis y resumen