从Fit in Legend,Matlab编写公式

时间:2013-08-08 09:48:06

标签: matlab plot

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

编辑:也许我不清楚。主要问题是如何从我绘制的拟合线中得出系数。然后我想在图表中的图例中包含等式。我是否必须手动取出系数(以及如何完成?)或者Matlab可以直接写出它,例如excel?

3 个答案:

答案 0 :(得分:3)

documentation解释说您可以获得从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')

示例输出:

enter image description here

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

答案 1 :(得分: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首选项,然后是编辑器,然后显示),您可以通过将鼠标光标放在对象上来即时查看存储的数据。

答案 2 :(得分: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