【问题标题】:Write Equation from Fit in Legend, Matlab用图例中的拟合写方程,Matlab
【发布时间】:2018-06-19 18:16:23
【问题描述】:

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

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

【问题讨论】:

  • 你可以在这里看看我的回答:legend with fit-fcn
  • 这是我昨天发布的问题,我已经完成了所有这些:P。看看我的编辑,也许你会明白我的问题。
  • 我明白了 :) 已经有两个很好的答案了 :o

标签: matlab plot


【解决方案1】:

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')

示例输出:

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

【讨论】:

  • 对不起,如果我的问题不清楚,但我如何获得系数 C 和 x?我只有一条拟合线(来自“拟合”函数),但没有系数值。 Matlab有没有办法像Excel一样写出拟合线的公式?
  • @Djamillah 我添加了关于如何获取参数的说明,如果它不起作用,请告诉我!
【解决方案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 首选项,然后是编辑器,然后是显示),您可以通过将鼠标光标放在对象上来即时查看存储的数据。

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

    • 欢迎来到 Stack Overflow!虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加 context 将提高答案的长期价值。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。提及为什么这个答案比其他答案更合适也没有什么坏处。
    猜你喜欢
    • 2017-08-24
    • 1970-01-01
    • 2013-05-10
    • 2021-09-26
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    相关资源
    最近更新 更多