matlab建模遇见的一些问题和解决方法

工具:MATLAB
警告:Equation is badly conditioned. Remove repeated data points or try centering and scaling.
出现这一警告的一般是因为数据在横坐标方向上跨度太大,在这种跨度很大的多项式拟合里,为了提高拟合精度,通常希望让横坐标变得更加集中,因为在一个相对狭窄的小区间上去拟合,要比在一个相对很宽的区间上拟合更容易,且能提高拟合精度。MATLAB推荐的做法是: centering and scaling transformation,即以横坐标的均值为中心、以横坐标的标准差来做归一化因子,将数据变得相对集中。
比如将这段代码:

x=1990:1:2008;
y=[34.1972 38.0773 42.3786 47.1423 52.4127 58.2367 64.6644 71.7483 79.5432 88.1057 97.4938 107.7658 118.9796 131.1914 144.4542 158.8166 174.3208 191.0005 208.8791];
n=2;
p=polyfit(x,y,n);

变成:

x=1990:1:2008;
y=[34.1972 38.0773 42.3786 47.1423 52.4127 58.2367 64.6644 71.7483 79.5432 88.1057 97.4938 107.7658 118.9796 131.1914 144.4542 158.8166 174.3208 191.0005 208.8791];
n=3;
mu = [mean(x); std(x)];
x1 = (x - mu(1))/mu(2);   % 手动实现 centering and scaling
p1 = polyfit(x1,y,n);
plot(x,y,'bo',x,polyval(p1,x1),'r-')
legend('data','fitted',2)

警告:
Warning: Duplicate x-y data points detected: using average of the z values.
意思就是,你的(x,y) 坐标值出现了重复的点,计算时会取z的平均值来计算。

一个个检查有没有重复可不是什么好办法。好在看见网上有人出了一个很聪明的方法:先建立一个新的矩阵A,使得A=x+sqrt(-1)*y. 这样就使得xy坐标变成了一个复数。接着借助unique()函数,这个函数可以判断出一个矩阵中所有不重复的值。举个例子,如果A=[1 1 2 3 4 5 5 6], unique(A)=[1 2 3 4 5 6],因为A中出现了1到6. 这样利用unique(x+sqrt(-1)*y)就可以判断出数组中有没有重复的了。
可是我的数据经过这样的处理,发现并没有重复的xy值。这是怎么回事?
查询matlab的help文件,上面有这么一句话:
“this means that there are two or more data points where the input values (x, y) are the same or very close together.”
这就是说,如果两个值差得很近,也许也

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z_shsf

来包瓜子嘛,谢谢客官~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值