用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