matlab多项式拟合、作图、计算R方

一、多项式拟合

1
2
3
4
5
% 输入x与y的数值
x=[5 10 15 20 25 30 40 45 50];
y=[745.8 744.3 742.9 741.1 740.5 740.2 740.1 740.4 740.5];
% 利用polyfit函数做多项式拟合,三个变量分别为自变量、因变量、多项式最高项次数。
P= polyfit(x, y, 2)

结果为

1
2
3
P =

0.0058 -0.4343 747.8814

二、画图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
% x轴范围0到70,间隔为1
xi=0:1:70;
% 利用polyval函数求对应y值。y=polyval(p,x)计算多项式p在x的每个点处的值。
yi= polyval(P, xi);
% 利用plot函数绘制两组数据点(xi,yi)和(x,y)
% 且第二组数据点(x,y)以红色星号'r*'的形式显示
plot(xi,yi,x,y,'r*');
% 依次加上图标题、x轴标题、y轴标题
title('拟合图像')
xlabel('悬丝点距端点距离x/mm')
ylabel('共振频率f/Hz')
% 设置图形窗口大小。
% 6,6是图形窗口左下角相对于屏幕左下角的坐标(以厘米为单位)
% 14.5,12是图形窗口的宽度和高度(同样以厘米为单位)。
set(gcf, 'Units', 'centimeters', 'Position', [6, 6, 14.5, 12]);

结果为

三、计算R2

1
2
3
4
5
6
7
8
9
10
11
% 使用拟合的多项式系数计算拟合的y值
y_fit = polyval(P, x);
% 计算总平方和(SST)
meany = mean(y);
SST = sum((y - meany).^2);
% 计算残差平方和(SSE)
SSE = sum((y - y_fit).^2);
% 计算R方
R_squared = 1 - SSE / SST;
% 显示R方值,num2str()将变量的数值转换为字符串。
disp(['R-squared: ', num2str(R_squared)]);

结果为

1
R-squared: 0.98576