Я ищу способ оптимизировать мою целевую функцию (RMSE) с помощью fminsearch. У меня есть 4 переменные: a, b, c & d. Кроме того, у меня есть 23 простых уравнения, которые должны быть заменены значениями a, b, c и d (это значения для оптимизации).
Затем создается столбец 1x23, который я называю CFPPi с результаты этих значений.
Следующая инструкция должна создать матрицу 23 x69 со следующей инструкцией: предсказание = CFPPi. * biodiesel_composition (biodiesel_composition - это база данных 23x69).
Затем я создаю строку размером 1 x 69, выполняя сумму для каждого столбца прогноза, используя следующую операцию: biodisel_cfpp = sum (прогноз, 1).
Наконец, у меня есть еще один ряд размером 1 x69, называемый экспериментальный_значение. Это значения, к которым я хочу приблизиться путем оптимизации a, b, c и d, и эти 4 переменные могут быть любым случайным числом, которое помогает минимизировать ошибку.
Основная цель - сделать RMSE ошибка как можно меньше. Я сделал вышеописанное решение для Excel с использованием нелинейного метода GNR, и результаты были довольно хорошими, но я хочу дважды проверить в Matlab, если оптимизация могла бы быть лучше. Кто-нибудь может предложить решение?
syms a b c d
c6=1*a+4*b+1*d;
c8=1*a+6*b+1*d;
c10=1*a+8*b+1*d;
c12=1*a+10*b+1*d;
c14=1*a+12*b+1*d;
c14_1=1*a+10*b+2*c+1*d;
c15=1*a+13*b+1*d;;
c16=1*a+14*b+1*d;;
c16_1=1*a+12*b+2*c+1*d;
c17=1*a+15*b+1*d;
c17_1=1*a+13*b+2*c+1*d;
c18=1*a+16*b+1*d;
c18_1=1*a+14*b+2*c+1*d;
c18_2=1*a+12*b+4*c+1*d;
c18_3=1*a+10*b+6*c+1*d;
c20=1*a+18*b+1*d;
c20_1=1*a+16*b+2*c+1*d;
c20_2=1*a+14*b+4*c+1*d;
c20_4=1*a+10*b+8*c+1*d;
c22=1*a+20*b+1*d;
c22_1=1*a+18*b+2*c+1*d;
c24=1*a+22*b+1*d;
c24_1=1*a+20*b+2*c+1*d;
%%%%%%% with the 23 equations above, a matrix 23 x 1 is created:
CFPPi=[c6;c8;c10;c12;c14;c14_1;c15;c16;c16_1;c17;c17_1;c18;c18_1;c18_2;c18_3;c20;c20_1;c20_2;c20_4;c22;c22_1;c24;c24_1];
prediccion=CFPPi.*biodiesel_composicion; %23 x69 matrix
biodisel_cfpp=sum(prediccion,1); %1 x 69 row by doing the sum of each prediction column
function rmse (valores_experimentales,biodisel_cfpp)
r = sqrt(sum((valores_experimentales(:)-biodisel_cfpp(:)).^2/numel(valores_experimentales)))
end
fminsearch(rmse(valores_experimentales,biodisel_cfpp),[2 1 -1 3])
Примечание: когда я пытаюсь вызвать fminsearch с помощью функции rmse, я получаю следующее сообщение: Ошибка при использовании rmse Слишком много выходных аргументов. Примечание 2: valores_experimentales - это база данных Excel. Заранее благодарим за вашу ценную помощь:)