要在最小二乘拟合例程lsqcurvefit
中使用,我需要一个函数,如:
F = @(D, t) F0 - D(1)*(1-exp(-t))...
- D(2)*(1-exp(-t))...
- D(3)*(1-exp(-t))...
...
- D(n)*(1-exp(-t));
但是,系列中的术语数量由用户决定;所以匿名函数F需要在循环中创建,比如
F = @(D, t) F0;
for i=1:n
F = F - D(i)*(1-exp(-t));
end
不幸的是,上述方法在MATLAB中不起作用;是否有可能让它发挥作用?
答案 0 :(得分:1)
除非我误解了某些内容,否则你的功能实际上并不是递归的。你可以这样做:
g.loc['total']=g.sum()
print (g)
b sum b % wa b mean c sum c mean d sum
a
5 2067.0 0.344672 5.969521 5.991304 2062.0 5.976812 2104.0
6 1875.0 0.312656 5.954667 6.009615 1857.0 5.951923 1859.0
7 2055.0 0.342671 6.085645 5.991254 2084.0 6.075802 2058.0
total 5997.0 1.000000 18.009832 17.992173 6003.0 18.004536 6021.0
或者,如果您想明确指定F = @(D,t) F0 - sum(D*(1-exp(-t));
:
n
或者,如果F = @(D,n,t) F0 - sum(D(1:n)*(1-exp(-t));
是与t
相同大小的向量:
D
答案 1 :(得分:0)
执行此操作的最佳方法是使用匿名和普通函数。
recursionDepth = 5
CoefficientList = ones(numel(recursionDepth) + 1);
functionResults = @(t) myFunction(t, CoefficientList, recursionDepth);
function F = myFunction(t, CoefficientList, Depth)
F = CoefficientList(1);
for idx = 1:Depth
F = CoefficientList(idx) * (1 - exp(-1));
end
end
我在这里所做的是定义包含模型及其所有参数的完整函数,然后将其包装到匿名函数中,该函数在匿名函数中设置用户可选择的,不变的参数,并离开单个可调参数作为输入。您必须针对您的特定型号进行调整,但这是您的基本模板。