在matlab中我试图使用polyfitZero函数将多项式拟合到数据,迫使y截距为零。但是,我的代码似乎没有实现这一点,但我不确定我做错了什么。
a = [2.0044 2.0056 2.0021 2.0021 2.0048 2.0026 2.0035 2.0013 2.0035 2.0026];
b = [0.1006 0.0848 0.0502 0.0502 0.0909 0.0385 0.0732 0.0732 0.0896 0.0772];
scatter(a, b, 6);
hold on
p = polyfitZero(a,b,1);
f = polyval(p,a);
plot(a,f,'Color',[0.7500 0.7500 0.7500],'linewidth',1.5)
box on;
ylim([0 0.11]);
答案 0 :(得分:3)
实际上,你的代码完全符合预期:拟合多项式精确地在(0,0)处与y轴交叉。您只需在脚本末尾添加xlim([0 2.1]);
即可查看此内容:That's how it looks
我可能认为问题是你的数据沿着x轴移动了2.如果你想要你的多项式运行(2,0)那么这个解决方案可能是合适的:
a = [2.0044 2.0056 2.0021 2.0021 2.0048 2.0026 2.0035 2.0013 2.0035 2.0026];
b = [0.1006 0.0848 0.0502 0.0502 0.0909 0.0385 0.0732 0.0732 0.0896 0.0772];
scatter(a, b, 6);
hold on
a=a-2;
p = polyfitZero(a,b,1);
f = polyval(p,a);
a=a+2;
plot(c,f,'Color',[0.7500 0.7500 0.7500],'linewidth',1.5)
box on;
ylim([0 0.11]);
尽管如此,你应该解释一下你对结果的期望。