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

用matlab作为函数展开求和,并将其写入文本文件,matlab,Matlab,我有一个函数,我想与数据集配合(x,y): a和c是变量。我想适应不同的I 如何展开此方程式并将其用作以下命令中的函数lsqcurvefit(等式、变量、R、E) 此外,我还想将扩展方程写入文本文件,如以下示例所示: fprintf(fitting_text,' EQ E(R)= exp(-a*R)*c1 *R; \n'); 谢谢。计算总和的矢量化方法是使用R构建一个矩阵,然后执行矩阵向量乘法: sum = bsxfun(@power,R,1:k)*c(1:k); 这不是一个计算效

我有一个函数,我想与数据集配合
(x,y)

a
c
是变量。我想适应不同的
I

如何展开此方程式并将其用作以下命令中的函数<代码>lsqcurvefit(等式、变量、R、E)

此外,我还想将扩展方程写入文本文件,如以下示例所示:

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

谢谢。

计算总和的矢量化方法是使用
R
构建一个矩阵,然后执行矩阵向量乘法:

sum = bsxfun(@power,R,1:k)*c(1:k);
这不是一个计算效率高的循环,但它是好的和紧凑的

至于要传递到拟合函数的函数,可以选择两条路径之一。 可以将
EQ
作为三个参数的函数,最后一个参数是
R
的最大幂(注意,我已将
a
转换为参数向量
c
的最后一个元素,并假设所有参数都是列向量):

您还可以让
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
(我觉得这个选项更美观)

还可以使用函数句柄生成自适应字符串:

>> startOfLine = 'EQ    E(R) = exp(-a*R) * ';
>> str = @(k) [startOfLine,'(',strjoin(strcat({'c'},num2str((1:k)'),'*R^',num2str((1:k)')),' + '),')'];
>> str(3)
ans =
EQ    E(R)exp(-a*R) * (c1*R^1 + c2*R^2 + c3*R^3)

计算总和的矢量化方法是使用
R
构建一个矩阵,然后执行矩阵向量乘法:

sum = bsxfun(@power,R,1:k)*c(1:k);
这不是一个计算效率高的循环,但它是好的和紧凑的

至于要传递到拟合函数的函数,可以选择两条路径之一。 可以将
EQ
作为三个参数的函数,最后一个参数是
R
的最大幂(注意,我已将
a
转换为参数向量
c
的最后一个元素,并假设所有参数都是列向量):

您还可以让
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
(我觉得这个选项更美观)

还可以使用函数句柄生成自适应字符串:

>> startOfLine = 'EQ    E(R) = exp(-a*R) * ';
>> str = @(k) [startOfLine,'(',strjoin(strcat({'c'},num2str((1:k)'),'*R^',num2str((1:k)')),' + '),')'];
>> str(3)
ans =
EQ    E(R)exp(-a*R) * (c1*R^1 + c2*R^2 + c3*R^3)
使用符号工具箱(创建
symfun
而不是函数句柄)并使用
subs
替换
i
使用符号工具箱(创建
symfun
而不是函数句柄)并使用
subs
替换
i