使用matlab作为函数展开求和并将其写入文本文件

时间:2015-06-21 09:05:12

标签: matlab

我有一个功能,我想要使用数据集(x,y)

E = exp(-a*R)*sum(c(i)*R^i) ,       i= 1,2 ,3 ... 

ac是变量。我希望适应不同的i

如何扩展此等式并在以下命令中用作函数? lsqcurvefit(EQ,var,R,E)

此外,我想将扩展的等式写入文本文件,如下例所示:

fprintf(fitting_text,' EQ     E(R)= exp(-a*R)*c1 *R;  \n');

感谢。

1 个答案:

答案 0 :(得分:0)

计算总和的矢量化方法是使用bsxfunR建立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的函数,并返回参数kc的函数句柄:

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
相关问题