数模打怪(四)之拟合模型

一、什么是“拟合”

拟合:得到一条确定的曲线,经过尽可能多的点

插值:要经过所有样本点,为了避免龙格现象通常采取分段

倾向于选择拟合,因为希望得到确定的曲线

二、拟合的方法:最小二乘法 

三、评价拟合效果:R_2 

SSE也可当成拟合优度 

线性函数拟合效果看R_2,非线性函数和其他复杂的函数看SSE即可

此处线性函数不是针对变量而言,而是针对参数来说是线性  

 特别地,这里指数函数可以取对数,从而变为线性于参数的函数

四、代码

(补充)匿名函数:

handle=@(传入的参数,多个参数用逗号分隔)函数表达式

handle为调用匿名函数时使用的名字

比如:

%z=@(x,y)x^2+y^2

%z(1,2)

%ans=5

fplot函数可用于画出匿名一元函数的图形

fplot(f,xinterval)画出匿名函数f在指定区间xinterval=[xmin,xmax]上的图像

clear;clc

%画样本点
plot(x,y,'o')
%给x和y轴加上标签
xlabel('x的值')
ylabel('y的值')
n=size(x,1) %求行数->共有几个样本点(x和y的数据按列排下来)
k=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x))
b=(sum(x.*x)*sum(y)-sum(x.*y)*sum(x))/(n*sum(x.*x)-sum(x)*sum(x))
hold on %继续在之前的图上画
grid on %显示网格线

%模拟生成新数据(间隔设置得越小,画的图形越准确)
xx=2.5:0.1:7 
yy=k*xx+b
%plot(xx,yy,'-')

%匿名函数
%handle=@(传入的参数,多个参数用逗号分隔)函数表达式 handle为调用匿名函数时使用的名字
%比如
%z=@(x,y)x^2+y^2
%z(1,2)
%fplot函数可用于画出匿名一元函数的图形
%fplot(f,xinterval)画出匿名函数f在指定区间xinterval=[xmin,xmax]上的图像

f=@(x)k*x+b;
fplot(f,[2.5,7]);
legend('样本数据','拟合函数','Location','southeast')

y_hat=k*x+b %y的拟合值
SSR=sum((y_hat-mean(y)).^2) %回归平方和 mean()是求平均值的函数
SSE=sum((y_hat-y).^2) %误差平方和
SST=sum((y-mean(y)).^2) %总和平方和
SST-SSE-SSR %结果为0,证明SST=SSE+SSR
R_2=SSR/SST




五、强大的拟合工具箱:cftool

命令行窗口输入cftool 

注意:

拟合方式选择:Custom Equation(自定义方程)时,

写入自定义公式(注意在代码中写时,要把乘除写成点乘和点除,因为这里x和y是向量了)

若result栏显示: Fit computation did not converge即没有找到收敛解,且拟合图效果也不好,

则点击Fit Options,修改非线性拟合的初始值(StartPoint),r修改为0.02,xm修改为500

可以导出图片和代码

六、生成随机数(randi rand normrnd roundn)

%randi: 生成均匀分布的随机整数(i=int)
s1=randi(10,2,5) %生成1-10的随机整数矩阵,大小为2*5
s2=randi([-5,5],1,10) %生成-5至5之间的随机整数矩阵,大小为1*10

%rand: 生成在0-1之间均匀分布的随机数
s3=rand(1,5) %生成0-1的随机矩阵,大小为1*5
%a+(b-a)*rand(*,*): 生成在a和b之间均匀分布的随机矩阵
s4=2+(5-2)*rand(1,5) %生成2至5之间的随机矩阵,大小为1*5

%normrnd: 产生正态分布的随机数
%产生一个均值为0,标准差为2的正态分布随机矩阵,大小为3*4
%s5=normrnd(0,2,3,4)

%roundn: 任意位置四舍五入
% 0个位 1十位 2百位 -1小数点后一位 -2小数点后两位
a=3.1415
roundn(a,-2) %ans=3.1400
roundn(a,2) %ans=0
a=31415
roundn(a,2) %ans=31400
a=5.5
roundn(a,0) %ans=6
roundn(a,1) %ans=10

clear;clc
x=rand(30,1)*10 %x是0-10之间均匀分布的随机向量(30个样本)
y=3*exp(0.5*x)-5+normrnd(0,1,30,1)
cftool

*** 函数或变量 'normrnd' 无法识别:

1、命令行窗口输入doc normrnd,打开相应的文档(如图)

 

2、会显示未安装某某产品,点击进去,按提示安装即可 

相关推荐

  1. pytorch升级

    2024-07-15 15:56:05       37 阅读
  2. 机器学习和欠

    2024-07-15 15:56:05       68 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 15:56:05       101 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 15:56:05       109 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 15:56:05       87 阅读
  4. Python语言-面向对象

    2024-07-15 15:56:05       96 阅读

热门阅读

  1. 如何rpmbuild打包GLIBC二进制库文件?

    2024-07-15 15:56:05       23 阅读
  2. 认知偏差知识手册

    2024-07-15 15:56:05       24 阅读
  3. Python 实现技术指标邮件告警通知

    2024-07-15 15:56:05       20 阅读
  4. ESP-01S + STM32物联网

    2024-07-15 15:56:05       22 阅读
  5. Spring Cloud微服务开发框架

    2024-07-15 15:56:05       22 阅读
  6. 关于c语言在内存中的分配管理

    2024-07-15 15:56:05       22 阅读
  7. Scala之基础面向对象编程

    2024-07-15 15:56:05       22 阅读
  8. Linux入侵排查

    2024-07-15 15:56:05       20 阅读
  9. 短剧app系统开发

    2024-07-15 15:56:05       26 阅读
  10. Vue响应式源码解析

    2024-07-15 15:56:05       23 阅读
  11. qt 创建一个左侧边线,可以向左侧拖拽的矩形

    2024-07-15 15:56:05       29 阅读
  12. 关于vue环境变量的使用

    2024-07-15 15:56:05       18 阅读
  13. 软件测试中Bug分析的艺术:方法与实践

    2024-07-15 15:56:05       20 阅读