Я хотел бы эффективно рассчитать следующую функцию, и, следовательно, предпочтительно с помощью ручки функции.
В данном уравнении только "s" является переменной. Остальные являются известными константами, но они изменяются внутри цикла. Я хотел бы получить это как дескриптор функции, потому что позже мне нужно найти корни этой функции.
Этот вопрос относится к этому вопросу, который я недавно задавал . Но ответ кажется неэффективным, и я не могу получить единый дескриптор функции для всего этого. Есть ли способ?
Моя проба:
K=10;
N=4;
for ii=1:K
for jj=1:N
f{ii,jj}=@(x) p_th0{ii}(jj).*log(p_th1{ii}(jj)/p_th0{ii}(jj)).*(p_th1{ii}(jj)/p_th0{ii}(jj)).^x;
end
end
function y = sum_of_functions(f,x)
y = 0;
for ii=1:numel(f)
y = y + f{ii}(x);
end
end
r = FindRoots(@(x)sum_of_functions(f,x),A,B,2^5,0);
В этом коде «x» (соответствует «s» в формуле) - это переменная, для которой позже будут найдены корни. «p_th0» и «p_th1» являются ячейками некоторых известных констант (изменяющихся внутри внешнего цикла while). В приведенном выше коде этой части в f {ii, jj} = @ (x) отсутствует термин, на который нам нужно разделить сумму. Таким образом, он учитывает только двойную сумму по числителю на данном рисунке.
Я также должен отметить, что я недоволен отсутствием единого дескриптора функции для всего этого. У меня есть просто ячейка с некоторыми функциями, и каждый раз, когда мне нужно оценить сумму, я должен сначала построить ее. Вместо этого я хотел бы собрать сумму дескриптора функции один раз и просто использовать этот дескриптор функции в «FindRoots».