在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]);
发布于 2016-01-22 13:04:45
实际上,你的代码做的正是它应该做的:拟合的多项式正好在(0,0)处横过y轴。只需将xlim([0 2.1]);
添加到脚本的末尾:这就是它的样子,就可以检查这一点。
我可能假设问题是数据沿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]);
这就是它的工作原理。
尽管如此,你应该解释一下你期望你的结果会是什么样子。
https://stackoverflow.com/questions/34939897
复制相似问题