MATALB运用——最小二乘法拟合

简介: MATALB运用——最小二乘法拟合

实验一

编制以函数image.png 为基的多项式最小二乘拟合程序,并用于对下表中的数据作3次多项式最小二乘拟合。

47271a6454117125880e290117c00fd6_20210602111350410.png

image.png


1、思路

在MATLAB中,多项式最小二乘法的拟合可以采用库函数polyfit()

p = polyfit(x,y,n) :返回次数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(在最小二乘方式中)。p 中的系数按降幂排列,p 的长度为 n+1。

2、程序

function test_1
format long
%利用库函数polyfit做3次多项式最小二乘拟合
%求参数{a_k}、平方误差、拟合函数的图形
x=[-1.0,-0.5,0.0,0.5,1.0,1.5,2.0];
y=[-4.447,-0.452,0.551,0.048,-0.447,0.549,4.552];
p=polyfit(x,y,3);%3次多项式最小二乘拟合
y1=polyval(p,x);
r=sum((y-y1).^2);%平方误差
clf;
plot(x,y,'*');
hold on;
x0=[-1:0.01:2];
plot(x0,polyval(p,x0),'r-');
axis([-1.5,2.5,-5,5]);
xlabel('x轴');ylabel('y轴');title('3次多项式最小二乘拟合');
disp(['平方误差:',sprintf('%g',r)]);
disp(['参数:',sprintf('%g\t',p)]);

3、运行结果

平方误差:2.17619e-05

参数:1.99911 -2.99767 -3.96825e-05


实验二

编制正交化多项式最小二乘法拟合程序,并用于求解上题中的3次多项式最小二乘法拟合问题,做拟合曲线的图形,计算平方误差,并于实验一进行比较。

1、思路

2、程序

function test_3_2
format long
%利用正交化求数据的二次多项式拟合
%输出:拟合系数参数、平方误差、拟合图像
x=[-1.0,-0.5,0.0,0.5,1.0,1.5,2.0];
y=[-4.447,-0.452,0.551,0.048,-0.447,0.549,4.552];
w=[1,1,1,1,1,1,1];
n=3;
[a,b,c,alph,r]=flp(x,y,w,n)
disp(['平方误差:',sprintf('%g',r)]);
disp(['参数:',sprintf('%g\t',alph)]);
clf;
plot(x,y,'*');
hold on;
x0=[-1:0.01:2];
plot(x0,polyval(alph,x0),'r-');
axis([-1.5,2.5,-5,5]);
xlabel('x轴');ylabel('y轴');title('正交化的3次多项式最小二乘拟合');
function [a,b,c,alph,r]=flp(x,y,w,n)
%求正交递推公式的参数a、b,拟合多项式的系数c,整理之后的降幂系数alpha
m=length(x);
s1=ones(1,m);
v1=sum(w);
d(1)=y*w';c(1)=d(1)/v1;
for k=1:n
    xs=x.*s1.^2*w';
    a(k)=xs/v1;
    if (k==1)
        s2=(x-a(k)).*s1;
    else
        b(k)=v2/v11;
        s2=(x-a(k)).*s1-b(k)*s0;
    end
    v2=s2.^2*w';
    d(k+1)=y.*s2*w';c(k+1)=d(k+1)/v2;
    v11=v1;v1=v2;s0=s1;s1=s2;
end
%求平方误差r
r=y.*y*w'-c*d';
%拟合多项式合并同类项后的降幂系数
syms x
p0=1;
T=c(1)*p0;
for k=2:n+1
    if (k==2)
        p2=x-a(k-1);
    else
        p2=(x-a(k-1))*p1-b(k-1)*p0;
        p0=p1;
    end
    T=T+c(k)*p2;
    p1=p2;
end
T=collect(T);%合并同类项
alph=sym2poly(T);

3、运行结果

可见,但多项式次数为3时,两种方法拟合的结果和误差基本一致。

目录
相关文章
|
9月前
|
机器学习/深度学习 人工智能 前端开发
魔搭社区模型速递(3.23-3.29)
🙋魔搭ModelScope本期社区进展:619个模型,93个数据集,151个创新应用,7篇内容。
387 4
魔搭社区模型速递(3.23-3.29)
|
应用服务中间件 nginx
nginx输入请求的header和body到日志
nginx输入请求的header和body到日志
976 1
|
11月前
|
人工智能 JSON 自然语言处理
Jina Reader:一键将网页内容转为适合 LLM 处理的文本格式,自动抓取和清洗网页内容,支持多种输出格式
Jina Reader 是一款由 Jina AI 推出的开源工具,能够将网页内容快速转换为适合大型语言模型(LLMs)处理的纯文本格式,支持多种输出格式和动态内容处理。
1594 20
Jina Reader:一键将网页内容转为适合 LLM 处理的文本格式,自动抓取和清洗网页内容,支持多种输出格式
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch 中的动态图与静态图:理解它们的区别及其应用场景
【8月更文第29天】深度学习框架中的计算图是构建和训练神经网络的基础。PyTorch 支持两种类型的计算图:动态图和静态图。本文旨在阐述这两种计算图的区别、各自的优缺点以及它们在不同场景下的应用。
3315 0
|
JavaScript 前端开发 测试技术
selenium的底层核心原理
Selenium 是一个强大的Web应用自动化测试工具,通过模拟用户与浏览器的交互来测试Web应用。其核心组件WebDriver支持多种浏览器,通过HTTP请求管理和操作浏览器会话,实现跨浏览器和跨平台的自动化测试。Selenium Grid支持分布式测试,提高测试效率。作为一个开源项目,Selenium不断发展,适应快速变化的Web技术。
|
人工智能 算法 数据可视化
智慧停车场车位引导及反向寻车解决方案
智慧停车场导航系统结合了先进的室内定位技术和导航算法,旨在解决大型公共场所停车难、找车难等问题。系统不仅提供精准的停车引导、反向寻车及停车场内导航服务,还通过大数据分析优化停车场管理和用户体验,是提升现代城市智能化水平的重要组成部分。
1316 0
|
关系型数据库 MySQL 数据库
史上最详细Docker部署Mysql主从复制,带每一步骤图!!!
史上最详细Docker部署Mysql主从复制,带每一步骤图!!!
1223 2
|
缓存 Java 应用服务中间件
JSP的内置对象 request和response
这篇文章详细介绍了JSP的内置对象,包括request、response、out、session和application对象的使用方法和特性,以及如何通过这些对象处理HTTP请求和响应、管理会话和输出数据。
|
Java Shell 开发工具
03. 【Java教程】在 MacOS 上安装 Java
03. 【Java教程】在 MacOS 上安装 Java
302 1
|
存储 缓存 算法
交换机转发机制:存储转发与直通转发
交换机转发机制:存储转发与直通转发
2470 1