在图例中用Matlab编写拟合方程

在图例中用Matlab编写拟合方程,matlab,plot,Matlab,Plot,所以,我已经用“拟合”将指数曲线拟合到一些数据点,现在我想在图表的图例中得到拟合曲线的方程。我该怎么做?我想在图例中有一个y=Ce^-xt形式的方程。我可以从拟合曲线中得到系数C和x,然后将方程放入图例中吗?或者我可以用某种方式写出整个方程吗?我有许多绘制的图表,因此如果该方法不那么耗时,我将不胜感激 编辑:也许我不清楚。主要的问题是我应该如何从我绘制的拟合线中得到系数。然后我想在我的图表中的图例中有一个等式。我必须用手取出系数吗(怎么做?),或者Matlab可以像在excel中那样直接写出来吗

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

编辑:也许我不清楚。主要的问题是我应该如何从我绘制的拟合线中得到系数。然后我想在我的图表中的图例中有一个等式。我必须用手取出系数吗(怎么做?),或者Matlab可以像在excel中那样直接写出来吗?

解释说,您可以从拟合中获得系数,执行为
c=fit(…)
,如下所示

coef=coeffvalues(c) 
C=coef(1)
x=coef(2)
您可以创建自己的图例,如下例所示

C
x
定义为拟合的参数

% 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')
示例输出:

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

解释说,您可以从拟合中获得系数,执行为
c=fit(…)
,如下所示

coef=coeffvalues(c) 
C=coef(1)
x=coef(2)
您可以创建自己的图例,如下例所示

C
x
定义为拟合的参数

% 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')
示例输出:


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

下面是一段代码,它将在图例框中显示拟合的公式。例如,您可以通过操纵
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首选项,然后是编辑器,然后是显示),您将通过将鼠标光标放在对象上获得存储数据的即时视图

下面是一段代码,它将在图例框中显示拟合方程。例如,您可以通过操纵
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));
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

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

你可以看看我在这里的答案:这是我昨天发布的问题,我已经做了所有这些:p.看看我的编辑,也许你会理解我的问题。我明白了:)这里已经有两个很好的答案:你可以看看我在这里的答案:这是我昨天发布的问题,我已经做了所有这些:p.看看我的答案编辑一下,也许你会理解我的问题。我明白了:)现在已经有两个很好的答案了:如果我的问题不清楚,那么我怎么得到系数C和x?我只有一条拟合线(来自“拟合”函数),但没有系数的值。Matlab没有办法写出拟合线的公式吗?比如Excel?@Djamillah我添加了一个关于如何获取参数的解释,如果不起作用,请告诉我!如果我的问题不清楚,很抱歉,但是我如何得到系数C和x?我只有一条拟合线(来自“拟合”函数),但没有系数的值。Matlab没有办法写出拟合线的公式吗?比如Excel?@Djamillah我添加了一个关于如何获取参数的解释,如果不起作用,请告诉我!欢迎来到堆栈溢出!虽然此代码可以回答问题,但提供关于如何和/或为什么解决问题的额外信息将提高答案的长期价值。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。提到为什么这个答案比其他答案更合适也没什么坏处。欢迎来到Stack Overflow!虽然此代码可以回答问题,但提供关于如何和/或为什么解决问题的额外信息将提高答案的长期价值。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。提到为什么这个答案比其他答案更合适也没什么坏处。
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