matlab使用polyfit无法拟合出曲线

matlab在进行多项式拟合的时候出现无法拟合出曲线的情况,也没有报错!
读取的数据
在这里插入图片描述
程序如下:

fileName='materialData.xlsx';
%fileId=open("fileName")
data=xlsread(fileName,'Sheet1','A2:D8');
figure(1)
hold on

%Q235B
plot(data(:,1),data(:,2),'*')
p1=polyfit(data(:,1),data(:,2),3);
plot((20:300),polyval(p1,(20:300)))
Q235B=polyval(p1,175)

%20
plot(data(:,1),data(:,3),'o')
p2=polyfit(data(:,1),data(:,3),3);
plot((20:300),polyval(p2,(20:300)));
steel20=polyval(p2,175)

%Q345R
plot(data(:,1),data(:,4),'x')
p3=polyfit(data(:,1),data(:,4),3);
plot((20:300),polyval(p3,(20:300)))
Q345R=polyval(p3,175)

legend( 'Q235B原始数据','Q235B拟合曲线数据', ...
    '20钢原始数据','20钢拟合曲线数据', ...
    'Q345R原始数据','Q345R拟合曲线数据')
xlabel('温度/℃')
ylabel('弹性模量/KN/mm')

结果如下:
在这里插入图片描述
我以为有几个空数据不会影响polyfit函数拟合,但是就是这几个空数据导致无法拟合出系数
在这里插入图片描述
于是修改如下,这种方法比较笨。就是不读取空的数据。我觉得还有更好的方法就是检测矩阵中是否有空数据有的话就舍弃该点的数据。

fileName='materialData.xlsx';
%fileId=open("fileName")
data=xlsread(fileName,'Sheet1','A2:D8')
figure(1)
hold on

%Q235B
plot(data(:,1),data(:,2),'*')
p1=polyfit(data(:,1),data(:,2),3);
plot((20:300),polyval(p1,(20:300)))
Q235B=polyval(p1,175)

%20
plot(data(:,1),data(:,3),'o')
p2=polyfit(data(:,1),data(:,3),3);
plot((20:300),polyval(p2,(20:300)));
steel20=polyval(p2,175)

%Q345R
plot(data(:,1),data(:,4),'x')
%修改部分----------------
p3=polyfit([data(1:3,1);data(7,1)],[data(1:3,4);data(7,4)],3);
%修改部分----------------
plot((20:300),polyval(p3,(20:300)))
Q345R=polyval(p3,175)

legend( 'Q235B原始数据','Q235B拟合曲线数据', ...
    '20钢原始数据','20钢拟合曲线数据', ...
    'Q345R原始数据','Q345R拟合曲线数据')
xlabel('温度/℃')
ylabel('弹性模量/KN/mm')


%还可优化,我就是想说一点,如果读取的数据有空的话可能导致polyfit函数无法拟合多项式系数




最后结果
在这里插入图片描述

总结:还可优化的更好,我就是想说一点,如果读取的数据有空的话可能导致polyfit函数无法拟合多项式系数

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值