1

所以,我已经使用“拟合”将指数曲线拟合到一些数据点,现在我想在图中的图例中获得拟合曲线的方程。我怎样才能做到这一点?我想在图例中有一个 y=Ce^-xt 形式的方程。我可以从拟合曲线中获得系数 C 和 x,然后将方程放入图例中吗?或者我可以以某种方式写出整个方程式吗?我有很多绘制的图表,所以如果该方法不那么耗时,我将不胜感激。

编辑:也许我不清楚。主要问题是我应该如何从我绘制的拟合线中取出系数。然后我想在我的图表中的图例中有方程。我是否必须手动取出系数(以及如何完成?)或者Matlab可以像在excel中一样直接写出来吗?

4

3 回答 3

3

文档解释说,您可以获得从执行为的拟合得出的系数c = fit(...),如

coef=coeffvalues(c) 
C=coef(1)
x=coef(2)

您可以创建自己的图例,如下例所示。

定义Cx作为适合您的参数,

% simulate and plot some data
t= [0:0.1:1];
C = 0.9;
x = 1;
figure, hold on
plot(t,C*exp(-x*t)+ 0.1*randn(1,length(t)),'ok', 'MarkerFaceColor','k')
plot(t,C*exp(-x*t),':k')
axis([-.1 1.2 0 1.2])

% here we add the "legend"
line([0.62 0.7],[1 1],'Linestyle',':','color','k')
text(0.6,1,[ '               ' num2str(C,'%.2f'),' exp(-' num2str(x,'%.2f') ' t)   ' ],'EdgeColor','k')
set(gca,'box','on')

示例输出:

在此处输入图像描述

您可能需要调整数字格式和文本框的大小以满足您的需要。

于 2013-08-08T12:20:35.780 回答
2

这是一段代码,它将在图例框中显示拟合方程。sprintf您可以通过操作选项%f来减少图例中的位数:%3.2f例如。

%some data
load census
s = fitoptions('Method','NonlinearLeastSquares','Lower',[0,0],'Upper',[Inf,max(cdate)],'Startpoint',[1 1]);
f = fittype('a*(x-b)^n','problem','n','options',s);

%fit, plot and legend
[c2,gof2] = fit(cdate,pop,f,'problem',2)
plot(c2,'m');
legend(sprintf('%f * (x - %f)^%d',c2.a,c2.b,c2.n));

该命令disp(c2)将在命令窗口中显示fit对象中存储的内容。此外,通过启用“编辑模式下的数据提示”选项(Matlab 首选项,然后是编辑器,然后是显示),您可以通过将鼠标光标放在对象上来即时查看存储的数据。

于 2013-08-08T16:40:17.713 回答
0
function [S]=evaFit(ffit)
  S=sprintf('y=%s',formula(ffit));
  S2='';
  N=coeffnames(ffit);
  V=coeffvalues(ffit);
  for i= 1:numcoeffs(ffit)
      S2=sprintf('%s %c=%f',S2, string(N(i)), V(i));
  end
  S=sprintf('%s%s',S, S2);
end
于 2018-06-19T09:35:21.233 回答