¡¡¡Cómo usar matlab para encajar datos discretos en ecuaciones, esperando en línea!!!!
Estoy de acuerdo con la respuesta del Piso 1, use cftool. Pero sin conocer la forma de la función, el ajuste no es bueno.
Existen varios métodos de ajuste de funciones, que no están incluidos en cftool, pero que se utilizan comúnmente en la investigación científica. Puede probarlos, como la aproximación de Padé, la red de regresión generalizada, el componente principal, etc. Red de regresión generalizada, descomposición de componentes principales, etc.
Proporcionarle una red de avance de BP entrenada con regularización bayesiana y permitirle probarla
El valor de retorno funObj es la ecuación adecuada
-- ---- ------ Línea divisoria-----------------
función funObj = netFit(x, y)
maxID= 1; toma 1 aquí. Por lo tanto, los resultados serán diferentes cada vez que lo ejecute y, si toma un valor mayor, los resultados serán básicamente los mismos.
El manual de Matlab recomienda entrenar múltiples redes para obtener un promedio, por ejemplo maxID=100.
Se puede acelerar en paralelo
Consulte el tren de documentación --gt; useParallel, useGPU.
net = feedforwardnet(15); Este es un valor aleatorio, pero aún tiene algún significado. .. .
net.trainFcn = 'trainbr';?
net.divideParam.trainRatio = 0,7;
net.divideParam.valRatio = 0,3;
net.divideParam.testRatio = 0;
net = configurar( net, x, y
net.trainParam.showWindow = 0; >
h = waitbar(0,'Entrenamiento con regularización bayesiana 0');
netCollect = cell(maxID, 1
para netID=1: maxID); p>
net = init(net);
net = train(net, x, y
waitbar(netID/maxID, h,...). .. sprintf('Entrenamiento con regularización bayesiana 4.1f', netID/maxID*100));
netCollect{netID} = net;
end
eliminar( h); ...
funObj = @(x)evalNet(netCollect, x);
xfit = linspace(min(x), max(x), 100
yfit = funObj(xfit);
figura(10); plot(xfit, yfit, 'r-', x, y, 'ok'); p>
legend('Línea ajustada', 'Datos') xlabel('X', 'FontSize', 14); ylabel('Y', 'FontSize', 14 title('maxID= 100') p>
fin
función y = evalNet(netCollect, x)
NNet = longitud(netCollect);
y = ceros(tamaño (x ));
para netId=1: NNet
net = netCollect{netId}
y = y net(x); >
fin
y = y/NNet;
fin