所以,我使用'fit'为一些数据点拟合了指数曲线,现在我想在图中的Legend中得到拟合曲线的等式。我怎样才能做到这一点?我想在图例中的y = Ce ^ -xt形式上有一个等式。我可以从拟合曲线中得到系数C和x,然后将方程式放入图例中吗?或者我可以用某种方式写出整个方程吗?我有很多绘制的图表,所以如果这个方法耗费时间不长,我将不胜感激。
编辑:也许我不清楚。主要问题是如何从我绘制的拟合线中得出系数。然后我想在图表中的图例中包含等式。我是否必须手动取出系数(以及如何完成?)或者Matlab可以直接写出它,例如excel?答案 0 :(得分:3)
documentation解释说您可以获得从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')
示例输出:
您可能需要调整数字格式和文本框的大小以满足您的需求。
答案 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