matlab的拟合函数polyfit()函数
matlab的多项式拟合:
polyfit()函数
功能:在最小二乘法意义之上,求解Y关于X的最佳的N次多项式函数。
clc;clear; close all; x=[1 2 3 4 5]; y=[2.7 7.4 20.0 54.5 148.4]; r=corrcoef(x,y) ;%两个变量的相关系数 a=polyfit(x,y,2) x1=1:0.1:5; P=polyval(a,x1);%a是多项式拟合后返回的系数 figure(1);hold on;plot(x,y,'r*',x1,P,'b-.');
注:a是返回的两次多项式的系数,返回结果是:14.3071 -51.9929 45.2000,这意味着拟合的多项式是:
y=45.2000+(-51.9929)*x+14.3071*x^2
clc;clear; close all; x=[1 2 3 4 5]; y=[2.7 7.4 20.0 54.5 148.4]; r=corrcoef(x,y) ; %a=polyfit(x,y,2) b=polyfit(x,y,3) c=polyfit(x,y,4) x1=1:0.1:5; %Pa=polyval(a,x1);%a是多项式拟合后返回的系数 Pb=polyval(b,x1);%a是多项式拟合后返回的系数 Pc=polyval(c,x1);%a是多项式拟合后返回的系数 %figure(1);hold on;plot(x,y,'r*',x1,Pa,'b-.'); figure(1);hold on;plot(x,y,'r*',x1,Pb,'r-.'); figure(1);hold on;plot(x,y,'r*',x1,Pc,'g-.');
注:红色是三次拟合的结果。
绿色是四次拟合的结果。
例1:
clc;clear; close all; x=[1 2 3 4 5]; y=[2.7 7.4 20.0 54.5 148.4]; r=corrcoef(x,y) ; %a=polyfit(x,y,2) [b s]=polyfit(x,y,3) %c=polyfit(x,y,4) x1=1:0.1:5; %Pa=polyval(a,x1);%a是多项式拟合后返回的系数 Pb=polyval(b,x1);%a是多项式拟合后返回的系数 %Pc=polyval(c,x1);%a是多项式拟合后返回的系数 %figure(1);hold on;plot(x,y,'r*',x1,Pa,'b-.'); figure(1);hold on;plot(x,y,'r*',x1,Pb,'r-.'); %figure(1);hold on;plot(x,y,'r*',x1,Pc,'g-.');
注:[b s]=polyfit(x,y,3) %这里返回的s是个结构体,s中的normr表示拟合的残差的二范。
以下例子的来源:https://blog.csdn.net/qq_33591755/article/details/82453757
有如下数据
时间t |
1900 |
1910 |
1920 |
1930 |
1940 |
1950 |
1960 |
1970 |
1980 |
1990 |
2000 |
人口y |
76 |
92 |
106 |
123 |
132 |
151 |
179 |
203 |
227 |
250 |
281 |
1. y与t的经验公式为 y = at^2 + bt + c
clear; clf; %清除当前窗口 clc; t = 1900:10:2000; %时间t y = [76 92 106 123 132 151 179 203 227 250 281]; %人口y plot(t,y,'k*'); hold on; % figure; %重新开一个图 p1 = polyfit(t,y,2); h=polyval(p1, t); plot(t, h); axis([1900 2000 0 300]); %图像xy轴范围 disp(char(['y=',poly2str(p1,'t')],['a=',num2str(p1(1)),' b=',... num2str(p1(2)),' c=',num2str(p1(3))]));
2. y与t的经验公式为y = a e^(bt)
clear; clf; %清除当前窗口 clc; t = 1900:10:2000; %时间t y = [76 92 106 123 132 151 179 203 227 250 281]; %人口y yy = log(y); %指数基尼必需的线性化变形 p2 = polyfit(t,yy,1); b = p2(1); a = exp(p2(2)); y2 = a * exp(b*t); %指数拟合函数式 plot(t,y,'rp',t,y2,'k-'); grid off; xlabel('时间t'); ylabel('人口数(百万)'); title('人口数据');
最佳拟合次数的确定:
clc;clear; close all; x=[1 2 3 4 5]; y=[2.7 7.4 20.0 54.5 148.4]; for i=1:6 y2=polyfit(x,y,i); Y=polyval(y2,x);%计算拟合函数在x处的值。 if sum((Y-y).^2)<0.1 c=i break; end end
polyfit
polyfit函数简介
polyfit函数是matlab中用于进行曲线拟合的一个函数。其数学基础是最小二乘法曲线拟合原理。曲线拟合:已知离散点上的数据集,即已知在点集上的函数值,构造一个解析函数(其图形为一曲线)使在原离散点上尽可能接近给定的值。
用法
p = polyfit(x,y,n)
p = polyfit(x,y,n) 返回阶数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(在最小二乘方式中)。p 中的系数按降幂排列,p 的长度为 n+1
p(x)=p1xn+p2xn−1+...+pnx+pn+1p(x)=p1xn+p2xn−1+...+pnx+pn+1
[p,S] = polyfit(x,y,n)
比上面多返回了结构体S,S可以在polyval中进行误差的计算
字段 说明
R Vandermonde 矩阵 x 的 QR 分解的三角因子
df 自由度
normr 残缺的范数
[p,S,mu] = polyfit(x,y,n)
mu 是一个二元素向量,包含中心化值和定标值。mu(1) 是 mean(x),mu(2) 是 std(x)。使用这些值时,polyfit 将 x 的中心置于零值处并定标为具有单位标准差,可以作为 polyval 的第四个输入以计算 p 在定标点 (x - mu(1))/mu(2) 处的解
简单的例子
利用polyfit和sin(x)函数拟合
x = linspace(0,4*pi,10); y = sin(x); %在区间 [0,4*pi] 中沿正弦曲线生成 10 个等间距的点 p = polyfit(x,y,7); %七次拟合 x1 = linspace(0,4*pi); y1 = polyval(p,x1); figure plot(x,y,'o'); hold on plot(x1,y1,'r') %画图
拟合的效果
polyval
polyval简介
主要用于多项式的计算
polyval用法
y = polyval(p,x)
y = polyval(p,x) 返回在 x 处计算的 n 次多项式的值。输入参数 p 是长度为 n+1 的向量,其元素是按要计算的多项式降幂排序的系数。
y = polyval(p,x,[],mu)
[y,delta] = polyval(p,x,S) 使用 polyfit 生成的可选输出结构体 S 来生成误差估计值 delta。delta 是使用 p(x) 预测 x 处的未来观测值时的误差标准差估计值。如果 p 中的系数是 polyfit 计算的最小二乘估计值,polyfit 数据输入中的误差呈独立正态分布,并拥有常量方差,则 y±delta 至少包含 x 处 50% 的未来观测值。
[y,delta] = polyval(p,x,S)
[y,delta] = polyval(p,x,S,mu)
官方链接:多项式计算 - MATLAB polyval - MathWorks 中国
polyvalm和polyval基本相似,只不过输入为矩阵,用作矩阵多项式的计算
————————————————
版权声明:本文为CSDN博主「YinJianxiang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/YinJianxiang/article/details/81455958
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理