У меня проблема, когда мне нужно оценить набор функций, которые хранятся в списке.Как вы оцениваете функции из списка в MATLAB
У меня есть функция дг и значения параметров для «а» и «B» в paramList:
syms a b x;
dg = symfun((a*exp(-a*(x-b)))/((1+exp(-a*(x-b)))^2),[a b x]);
paramList = [0.18, 20; 0.25, 25; 0.35, 15; 0.3, 20; 0.33, 30];
и нужно сделать список этой функции f (х) с различными значениями параметров для «а 'и' b '.
У меня есть функция, которая может сделать это:
function [ out ] = getFunList(paramList, func)
syms a b x;
s = size(paramList);
s = s(1);
out = symfun.empty(1,s);
for i = 1:s
newFun = subs(func,a,paramList(i,1));
newFun = subs(newFun,b,paramList(i,2));
out(1,i) = newFun;
end
end
Использование описанной выше функции приведет к
>> funList = getFunList(paramList,dg)
funList =
[ (9*exp(18/5 - (9*x)/50))/(50*(exp(18/5 - (9*x)/50) + 1)^2), exp(25/4 - x/4)/(4*(exp(25/4 - x/4) + 1)^2), (7*exp(21/4 - (7*x)/20))/(20*(exp(21/4 - (7*x)/20) + 1)^2), (3*exp(6 - (3*x)/10))/(10*(exp(6 - (3*x)/10) + 1)^2), (33*exp(99/10 - (33*x)/100))/(100*(exp(99/10 - (33*x)/100) + 1)^2)]
но если я пытаюсь оценить здесь не работает:
>> subs(funList(1,1),x,5)
ans =
(9*exp(27/10))/(50*(exp(27/10) + 1)^2)
Есть ли способ получить последнее выражение для оценки точно?
>> eval(funList(1))
ans =
(9*exp(18/5 - (9*x)/50))/(50*(exp(18/5 - (9*x)/50) + 1)^2)
не работает.
Или есть хороший способ хранения массива ячеек анонимных функций? Я пробовал это, но не могу понять, как создать анонимные функции из переменных. Например:
>> cellarr = cell(1,3)
>> cellarr{1} = @(x) eval(funList(1))
cellarr =
@(x)eval(funList(1)) [] []
>>
Это не дает то, что я хочу. Я не уверен, как получить массив ячеек для хранения
@(x) (9*exp(18/5 - (9*x)/50))/(50*(exp(18/5 - (9*x)/50) + 1)^2)
но извлечен из переменной.
Любая помощь будет отличной. Благодарю.
Что вы имеете в виду «оценить точно»? Вы хотите представление с плавающей запятой? То, что вы сделали с 'subs (funList (1,1), x, 5), кажется мне прекрасным. – rayryeng