我有一个功能,我想要使用数据集(x,y)
:
E = exp(-a*R)*sum(c(i)*R^i) , i= 1,2 ,3 ...
a
和c
是变量。我希望适应不同的i
。
如何扩展此等式并在以下命令中用作函数? lsqcurvefit(EQ,var,R,E)
此外,我想将扩展的等式写入文本文件,如下例所示:
fprintf(fitting_text,' EQ E(R)= exp(-a*R)*c1 *R; \n');
感谢。
答案 0 :(得分:0)
计算总和的矢量化方法是使用bsxfun
与R
建立Vandermonde-like matrix,然后执行矩阵向量乘法运算:
sum = bsxfun(@power,R,1:k)*c(1:k);
它不像循环计算效率高,但它很好而且紧凑。
对于传递给拟合函数的函数,您可以选择两条路径中的一条。
您可以将EQ
作为三个参数的函数,最后一个是R
的最大幂(请注意,我已将a
转换为参数向量的最后一个元素{{1假设一切都是列向量):
c
您还可以让EQ = @(c,R,k) exp(-c(k+1)*R) .* ( bsxfun(@power,R,1:k)*c(1:k) );
c = lsqcurvefit(@(c,R) EQ(c,R,3),var,R,E); % cubic fit
仅为EQ
的函数,并返回参数k
和c
的函数句柄:
R
(我觉得这个选项更美观)。
也可以使用函数句柄创建自适应字符串:
EQ = @(k) @(c,R) exp(-c(k+1)*R) .* ( bsxfun(@power,R,1:k)*c(1:k) );
c = lsqcurvefit(EQ(3),var,R,E); % cubic fit