matlab-lsqcurvefit函数

2023-11-11

lsqcurvefit函数(least-squares curve-fitting):用于最小二乘法求解非线性曲线拟合问题。即已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x, xdata),但不知道系数向量x。

1.语法

x = lsqcurvefit(fun,x0,xdata,ydata)

从 x0 开始,求取合适的系数 x,使非线性函数 fun(x,xdata) 对数据 ydata 的拟合最佳(基于最小二乘指标)。ydata 必须与 fun 返回的向量(或矩阵)F 大小相同。

(1)fun:符号函数句柄,如果是以m文件的形式调用的时候,别忘记加@;
(2)x0:最开始预估的值(预拟合的未知参数的估计值)。即方程系数的预估值。
(3)xdata:已有的xdata.
(4)ydata:与xdata对应的ydata.

复杂一点的结构:x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options) 使用 options 所指定的优化选项执行最小化。使用 optimoptions 可设置这些选项。如果不存在边界,则为 lb 和 ub 传递空矩阵。

算法选择:
默认的 ‘trust-region-reflective’ 算法,可以通过设置改为’levenberg-marquardt’ 算法:

options = optimoptions('lsqcurvefit','Algorithm','levenberg-marquardt');
lb = [];
ub = [];
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)

测试:

fun = @(x,xdata)x(1)*exp(x(2)*xdata);
x0 = [100,-1];
%Optimset函数:‘Gradobj’指用户自定义的目标函数梯度;‘MaxITer’指最大迭代次数,‘100’也就是最大迭代次数,这一项只能为整数。
options = optimset('MaxFunEvals',800,'MaxIter',500);
lb = [];
ub = [];
[x,resnorm,residual,exitflag,output] = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options);%返回在解 x 处的残差 fun(x,xdata)-ydata 的值、描述退出条件的值 exitflag,以及包含优化过程信息的结构体 output。

默认迭代次数:100* 拟合参数个数。

2.测试

%test
xdata = [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3];
ydata = [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5];

fun = @(x,xdata)x(1)*exp(x(2)*xdata);
x0 = [100,-1];
x = lsqcurvefit(fun,x0,xdata,ydata)

times = linspace(xdata(1),xdata(end));
plot(xdata,ydata,'ko',times,fun(x,times),'b-')
legend('Data','Fitted exponential')
title('Data and Fitted Curve')

在这里插入图片描述
3.举例
(1)先创建一个函数文件myfun.m

function F = myfun(x,xdata)
F = x(1)*xdata.^2 + x(2)*sin(xdata) + x(3)*xdata.^3;

(2)重新建一个脚本文件

clc;clear;

xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];
ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];

x0 = [10, 10, 10]; 
[x,resnorm] = lsqcurvefit(@myfun,x0,xdata,ydata)

运行结果:
在这里插入图片描述
解释:

  • x为解出的系数最优估计值;
  • resnorm为残差平方和sum((fun(x,xdata)-ydata).^2)

实际运用时报错:Function value and YDATA sizes are not equal.
(1)拟合函数形式参数x和系数参数a顺序写反了,正确的顺序为f = @(a,x);
(2)初值的选择;
(3)lsqcurvefit要求x、y向量组为列向量,所以需要将两个向量进行转置;

参考资料:
matlab-非线性拟合函数lsqcurvefit的使用和初值选取:https://www.cnblogs.com/hyb965149985/p/10102335.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab-lsqcurvefit函数 的相关文章

随机推荐

  • Springboot 接口方式硬通知实现ConfigurationProperties 、@Value 动态刷新

    前言 看到这个文章标题 也许有的看官就觉得很多余 因为Nacos 可以设置 NacosValue value XXX autoRefreshed true 实现动态刷新 又因为cloud config的 RefreshScope 实现动态刷
  • 基于Warshall算法的连通图及欧拉图判定方法

    1736年欧拉解决了哥尼斯堡七桥问题 他在这一具体问题的基础上进一步研究 最终找到了一个简便的原则可以鉴别一个图 多重图 能否一笔画成 本文中 笔者使用布尔矩阵来存储一个无向图 并结合集合论中 传递闭包 的概念给出了一种欧拉图的判定方法 本
  • (系统的推送)友盟推送

    今年再次负责这个模块 最大亮点就是支持了系统的推送 也就是说你设备退出后台应用了 发推送还可以收到推送 https info umeng com detail id 169 cateId 1 测试方案 选择测试模式 可以无限制的发送数量 公
  • Pytorch深度学习入门与实战三——循环神经网络

    1 常见的循环神经网络 RNN LSTM GRU RNN torch nn RNN 单纯的RNN会出现随着地柜次数的增加 权重指数级爆炸或小时的问题 从而难以捕捉长时间的关联 导致RNN训练是收敛困难 LSTM 引入门的机制 使网络有更强的
  • 草料二维码统计扫描信息

    目录 1 注册账号并登陆 2 创建活码 2 1 点击活码后编辑 2 1 1 新建 gt 空白建码 也可以选择模板 3 查看统计信息 3 1 扫描创建的活码 3 2 数据分析 gt 扫描量统计 需求说明 由于服务推广需要统计扫码人数 所以使用
  • 相似图像的检测方法

    背景 以图搜图 是日常生活中我们经常会用到 例如在选购一款商品时 想要对比价格 往往会在各个购物app上通过搜图的形式来看同一款产品的价格 当你碰到某种不认识的植物时 也可以通过以图搜图的方式来获取该种植物的名称 而这些功能大都是通过计算图
  • Hook 学习系列(一) —— State Hook

    React Hook State Hook 使用多个 state 变量 以 use 开头的函数被称为 Hook React Hook 是 React 16 8 引入的新特性 它用在函数组件中 允许开发者不使用 class 的情况下 使用状态
  • QT 正则表达式 QRegExp 使用

    直接贴代码 QRegExp rx startxref s d rx setMinimal false int pos 0 while pos rx indexIn trl pos 1 pos rx matchedLength qDebug
  • 重构-提取重复的代码

    在编写程序过程中 特别是刚刚入行没有多久的程序员 经常会犯的一个错误就是大段大段的复制粘贴代码 把功能相近的代码直接复制过来而不加以修改 这个习惯也许来源于你的老师也许来源于你本身的原因 总之 对于这一类程序员最好的设计模式就是 Ctrl
  • 电信aep平台和iot平台区别_移远BC95使用CoAP协议接入华为IoT平台

    点击上方蓝色字体 关注我们 BC95的CoAP测试需要云平台配合 当前的支持CoAP协议的平台有华为OceanConnect平台 电信天翼云 除了 Logo 其他和华为的一样 移动 OneNet等 此教程以华为的OceanConnect 平
  • leetcode 第55题 跳跃游戏

    题目 给定一个非负整数数组 nums 你最初位于数组的 第一个下标 数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标 示例1 输入 nums 2 3 1 1 4 输出 true 解释 可以先跳 1 步 从下标
  • 习题8-6 删除字符 (20分)

    本题要求实现一个删除字符串中的指定字符的简单函数 函数接口定义 void delchar char str char c 其中char str是传入的字符串 c是待删除的字符 函数delchar的功能是将字符串str中出现的所有c字符删除
  • Python01-- Python遇到的代码错误:TypeError: __init__() missing 1 required positional argument: ‘priviledges‘

    Python遇到的代码错误 TypeError init missing 1 required positional argument priviledges 这是在学习python中遇到的一个问题 是关于类的参数问题 说到底还是对类的知识
  • 查看tenorflow对python版本的要求

    查看tenorflow对python版本的要求 一 前言 由于不同版本的tensorflow对所支持的python版本有所限制 两者不匹配则无法使用 所以我们在安装tensorflow时 应该查看与python版本相匹配的tensorflo
  • 安装SQL Server详细教程

    安装SQL Server2019详细教程 1 官网下载SQL Server 2019 Developer Developer下载地址 下载完成后 打开安装程序 选择自定义安装 选择安装路径 不推荐安装在C盘 然后等待下载安装 此过程较为缓慢
  • 华为手机微信如何与电脑连接到服务器,有华为手机,还用微信QQ传文件到电脑?Huawei share秒传了解一下...

    原标题 有华为手机 还用微信QQ传文件到电脑 Huawei share秒传了解一下 华为手机用户 还用微信 QQ传文件到电脑 Huawei share秒传了解一下 我们在办公的时候 难免需要手机和电脑之间互传文件 很多朋友都会选择用微信或者
  • jstl详解

    原文地址 http www blogjava net maverick1003 articles 236575 html JSTL标签库的使用是为类弥补html表的不足 规范自定义标签的使用而诞生的 在告别modle1模式开发应用程序后 人
  • nuxt框架快速了解

    公司最近有一个文献检索系统的研发项目 也让我第一次接触到Nuxt js框架 Nuxt js 是一个基于 Vue js 的通用应用框架 它可以通过对客户端 服务端基础架构的抽象组织 Nuxt js 主要关注的是应用的 UI渲染 Nuxt js
  • Linux系统入门----虚拟机安装CentOS,jdk,tomcat,mysql的配置[笔记]

    随着学习的深入 要捣鼓一下Linux系统 还不错 虽然不如deepin系统那么好看 但是对于企业来讲常常用CentOS 这不我又开始搞事情了 大家习惯用Vmware或者VirtureBox但是Win10自带一个虚拟机软件 可以不用再下载Vm
  • matlab-lsqcurvefit函数

    lsqcurvefit函数 least squares curve fitting 用于最小二乘法求解非线性曲线拟合问题 即已知输入向量xdata和输出向量ydata 并且知道输入与输出的函数关系为ydata F x xdata 但不知道系