文件交换

图像缩略图

polyfitZero

版本1.3.0.0(47.1 kB) 马克Mikofski
将多项式拟合到数据,强制y截距到零或arb。值和斜率为零或arb。价值
4.8
18评级

65下载

更新2014年2月19日

视图版本历史

查看许可协议

[更新2014-02-19:修复PolyfitBm中的错误,添加root和Select-inget工具]
此提交包含四个类似于POLYFIT的便利多项式拟合函数。
1.POLYFITZERO -拟合多项式数据,迫使y截距为零。
2. Polyfitb - Force Y-拦截到“B”。
3.POLYFITB0 -力y轴截距“b”和斜率在(0,b)到零。
4. PolyfitBm - Force Y截止到“B”和X = 0到“M”的斜率,例如Dy / Dx = m。
5.POLYFITBROOT -力拦截和根
6. polyfitbmroot - 力拦截,斜坡和根
7.力截距,斜率,根和项

如果你看到POLYFITBMROOTTERMS,请使用John D'Errico的POLYFITN:
//www.tatmou.com/matlabcentral/fileexchange/34765-polyfitn.

迫使Y截距到零是通过注意到多项式P = [AN,...,A3,A2,A1,A0]来实现。

即:Y = * Y ^ n + ... + A3 * Y ^ 3 + A2 * Y ^ 2 + A1 * Y + A0

当x为零时,y是恒定术语“a0”。因此,A0 = 0,或者在迫使Y截距到任意值时,A0 = B.

使斜率在x=0处,可以通过注意p的导数来实现

y = N*aN*y^(N-1) +…加上3*a3*y^2 + 2*a2*y + a1

在x = 0处计算得到a1。因此,当斜率为0时,a1 = 0,或者在一般情况下,当斜率为任意值时,a1 = m。

引用作为

Mark Mikofski(2021)。polyfitZero(//www.tatmou.com/matlabcentral/fileexchange/35401-polyfitzero),Matlab中央文件兑换。检索到

评论和评级(26

Macarena Santillan.

谢谢你!当使用这个函数时,有什么方法知道gof吗?

Jan Ulbrich.

有人可以解释什么“根”吗?我没有找到任何解释或举例。

Christos Ziavras.

Ayca Altay.

Sukhwinder辛格

Reece nixon-luke

极好的!对于我的数据集的polyfit()速度快得多。

华伦天奴

托马斯•高柏

西蒙斯特雅图斯

Dana-Adriana Botesteanu

Fri Ani.

曲线拟合功能的良好努力。我尝试过在扩展范围内使用它,以获得非常复杂的等式;与Microsoft Excel中的曲线拟合函数相比,其性能低于PAR。

J G.

没关系,想起来。伟大的功能!

J G.

I am trying to use polyfitZero function to fit polynomial to data, forcing y-intercept to zero, i.e. get the polynomial to go through (2,0), however this doesn't seem to work and I'm unsure what I'm doing wrong. Thanks in advance!
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.0909 0.0385 0.0732 0.0732 0.0896 0.0772];
散射(A,B,6);
坚持,稍等
P = Polyfitzero(A,B,1);
f = polyval (p);
情节(f“颜色”,[0.7500 0.7500 0.7500],“线宽”,1.5)
框;
ylim (0.11 [0]);

andreas J.

露西娅Morales-Rivas

Subhashree Mishra

zoe.

千兆

马克Mikofski

约翰,对不起,我的反应太慢了。你可以用同样的方法完成这个,我把最后一个系数消去。

例如。要强制第一个订单系数为零:

%......
x = x (:);
y = y(:);

%因为你可能想要包含常数项,
%将“z”更改为一个1的矩阵,并使其宽一列
%以包括0阶项

% z = 0(昏暗,度);%注释掉这一行没有包含常量
z = =(昏暗,学位+ 1);%添加此行,现在包括0阶项

当n = 1时:度
z(:,n)= x。^(度-N + 1);
结束

你不需要计算常数项,
%,因为它将是一列(即x ^ 0 = 1)
%现在删除您不想放入的任何列
例如,我们想使一阶系数为零
Orderofzerocooffs = 1;从回归中省略术语的术语矢量,例如,[1,0],
%你可以让“orderOfZeroCoeffs”作为函数的输入

%现在,去掉那些系数为0的项
Orderofnonzocoeffs =〜ISMember(学位:-1:0,Orderofzerocoeffs);
z = z (:, orderOfNonZeroCoeffs);%用删除的列替换z
%有1000种方法来写这个代码!

%评论以下行
因为现在更复杂了
%pzero = z \ y;
% p0 = [p0;0]';

而是创建零的向量
%任何未计算的术语已设置为零
Pzero =零(1,学位+ 1);
%索引分配将系数直接替换为“Pzero”
pZero (orderOfNonZeroCoeffs) = y z \;

%......

试一试。我很好奇你用这个做什么。再看看Jennifer Sanders在上面找到的另一个polyfit0 (fex272)函数。您可以按照我在这里展示的完全相同的方式修改它,但是您还必须修改其他输出参数。

约翰

我想知道你是否可以修改一下程序,这样更高的幂也可以被强制为零。例如,当前例程将常数系数设置为零。但是,一阶系数也可以是零。等等……

詹妮弗•桑德斯

g!它没有发布我的初始邮件,该邮件询问如何使用Polyfit通常如此生成结构s。因此,允许您计算梯度上的错误。然后我找到了一个在文件交换机上执行的文件(请参阅上面的帖子:它发布了两次?!)。

詹妮弗•桑德斯

哦,我刚发现有一个m-file,做了我想要的;Polyfit0.m,发现:

//www.tatmou.com/matlabcentral/fileexchange/272

不管怎么说,还是要谢谢你,

詹妮弗•桑德斯

哦,我刚发现有一个m-file,做了我想要的;Polyfit0.m,发现:

//www.tatmou.com/matlabcentral/fileexchange/272

不管怎么说,还是要谢谢你,

马克Mikofski

谢谢约翰 - 你绝对是对的!我最初写过Polyfitzero for Modfitzero为一个同事,他们想要将Y拦截约束为零作为Excel,但后者当我意识到我可以使用conv()时,我喜欢它的愚蠢原因,即我很少地划分多项式或使用卷积。但是,指出除以零的危险是正确的,我应该在上面的评论中更明确地,Polyfitzero_v2不适合穿过Y轴的功能,因为您指出的所有原因。我希望我能删除那条评论。再次感谢。

约翰D 'Errico

叹。我不喜欢这样做,但马克的评论只是一个非常糟糕的想法。在没有错误时可能是正确的。如果您没有X实际接近零,则可能会有意义。但它在任何其他案例中都是一个可怕的想法。请不要跟随他的建议!!!!!

如果x正好是0会怎样?是的,除以0。但即使对于x的任何元素接近于零,你所做的本质上是一个加权回归,接近于零的点会得到一个很大的权重。这是回归分析中唯一重要的一点。

事实是,一个多项式拟合没有常数项是微不足道的,通过各种方法来实现。这段代码使用了一种合理的方法,正确地处理数据,避免了正常数据被除零的风险。

再次,请避免追随马克的建议。

马克Mikofski

还有一种更简单的方法。先除以x,然后调用polyfit,然后用conv将2多项式相乘

功能pzero2 = polyfitzero_v2(x,y,n)
q = y./x;
qnozero = q(x〜= 0); xnozero = x(x〜= 0);
pZero2 = polyfit (xnozero qnozero, n - 1);
pZero2 = conv([1 0],pZero2);
结束

Matlab释放兼容性
用R2011B创建
兼容任何释放
平台的兼容性
视窗 苹果系统 Linux

社区宝藏狩猎

在MATLAB中心找到宝藏,并发现社区可以如何帮助您!

开始狩猎!