You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab中semilogy绘图时lsline线性拟合失效问题求助

解决半对数坐标系下lsline拟合失效的问题

我来帮你搞定这个问题~你遇到的核心问题是**lsline只对原始数据做线性拟合**,但你用的是半对数坐标系(y轴取对数显示),这时候你需要的其实是log(N)和X之间的线性关系,而不是原始N和X的线性关系。

为什么原来的方法不行?

当你用semilogy或者设置yscale='log'时,图表只是把y轴的显示改成了对数刻度,但lsline依然会计算原始数据N = a*X + b的线性拟合,这条直线在对数轴上会变成曲线,看起来就像是“拟合失效”了——但其实lsline只是做了它原本该做的事,只是不符合你的需求而已。

正确的解决方案

我们需要手动对N做对数转换,拟合log(N)与X的线性关系,再还原成原始刻度绘制拟合线。这里分两种写法给你参考:

方法1:配合semilogy使用

X = [0.5762 0.6191 0.6594 0.6997 0.7359 0.7753];
N = [10 * 0.000001; 40 * 0.000001; 160 * 0.000001; 640 * 0.000001; 2560 * 0.000001; 10240 * 0.000001];

figure(1);
semilogy(X,N,'r*'); hold on;

% 对N取自然对数,拟合log(N)和X的线性关系
p = polyfit(X, log(N), 1);
% 还原拟合值(自然对数用exp,常用对数用10.^)
N_fit = exp(p(1)*X + p(2));
% 绘制拟合线
semilogy(X, N_fit, 'b-', 'LineWidth',1.5);
hold off;

方法2:配合scatter+log轴使用

X = [0.5762 0.6191 0.6594 0.6997 0.7359 0.7753];
N = [10 * 0.000001; 40 * 0.000001; 160 * 0.000001; 640 * 0.000001; 2560 * 0.000001; 10240 * 0.000001];

scatter(X,N,25,'b','*'); 
set(gca,'yscale','log'); hold on;

% 用常用对数拟合(对应y轴的log10刻度)
p = polyfit(X, log10(N), 1);
N_fit = 10.^(p(1)*X + p(2));
plot(X, N_fit, 'r-', 'LineWidth',1.5);
hold off;

这样绘制出来的拟合线就是半对数图上的直线,完全符合你的需求啦~

内容的提问来源于stack exchange,提问作者roffensive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:04:33