26 用lsqnonlin求解最小二乘问题(matlab程序)
1.简述
函数语法
x = lsqnonlin(fun,x0)
函数用于:
解决非线性最小二乘(非线性数据拟合)问题
解决非线性最小二乘曲线拟合问题的形式
变量x的约束上下限为ub和lb,
x = lsqnonlin(fun,x0)从x0点开始,找到fun中描述的函数的最小平方和。函数fun应该返回一个向量(或数组),而不是值的平方和。(该算法隐式地计算了fun(x)元素的平方和。)
2.代码
主程序:
%% 用lsqnonlin求解最小二乘问题
clear all
x0 = [0.3 0.4]; % 初值点
[x,resnorm] = lsqnonlin(@f1211,x0) % 调用最优化函数求 x 和 平方和残差
子程序:
function [xCurrent,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = lsqnonlin(FUN,xCurrent,LB,UB,options,varargin)
%LSQNONLIN solves non-linear least squares problems.
% LSQNONLIN attempts to solve problems of the form:
% min sum {FUN(X).^2} where X and the values returned by FUN can be
% X vectors or matrices.
%
% LSQNONLIN implements two different algorithms: trust region reflective
% and Levenberg-Marquardt. Choose one via the option Algorithm: for
% instance, to choose Levenberg-Marquardt, set
% OPTIONS = optimoptions('lsqnonlin', 'Algorithm','levenberg-marquardt'),
% and then pass OPTIONS to LSQNONLIN.
%
% X = LSQNONLIN(FUN,X0) starts at the matrix X0 and finds a minimum X to
% the sum of squares of the functions in FUN. FUN accepts input X
% and returns a vector (or matrix) of function values F evaluated
% at X. NOTE: FUN should return FUN(X) and not the sum-of-squares
% sum(FUN(X).^2)). (FUN(X) is summed and squared implicitly in the
% algorithm.)
%
% X = LSQNONLIN(FUN,X0,LB,UB) defines a set of lower and upper bounds on
% the design variables, X, so that the solution is in the range LB <= X
% <= UB. Use empty matrices for LB and UB if no bounds exist. Set LB(i)
% = -Inf if X(i) is unbounded below; set UB(i) = Inf if X(i) is
% unbounded above.
%
% X = LSQNONLIN(FUN,X0,LB,UB,OPTIONS) minimizes with the default
% optimization parameters replaced by values in OPTIONS, an argument
% created with the OPTIMOPTIONS function. See OPTIMOPTIONS for details.
% Use the SpecifyObjectiveGradient option to specify that FUN also
% returns a second output argument J that is the Jacobian matrix at the
% point X. If FUN returns a vector F of m components when X has length n,
% then J is an m-by-n matrix where J(i,j) is the partial derivative of
% F(i) with respect to x(j). (Note that the Jacobian J is the transpose
% of the gradient of F.)
%
% X = LSQNONLIN(PROBLEM) solves the non-linear least squares problem
% defined in PROBLEM. PROBLEM is a structure with the function FUN in
% PROBLEM.objective, the start point in PROBLEM.x0, the lower bounds in
% PROBLEM.lb, the upper bounds in PROBLEM.ub, the options structure in
% PROBLEM.options, and solver name 'lsqnonlin' in PROBLEM.solver. Use
% this syntax to solve at the command line a problem exported from
% OPTIMTOOL.
%
% [X,RESNORM] = LSQNONLIN(FUN,X0,...) returns
% the value of the squared 2-norm of the residual at X: sum(FUN(X).^2).
%
% [X,RESNORM,RESIDUAL] = LSQNONLIN(FUN,X0,...) returns the value of the
% residual at the solution X: RESIDUAL = FUN(X).
%
% [X,RESNORM,RESIDUAL,EXITFLAG] = LSQNONLIN(FUN,X0,...) returns an
% EXITFLAG that describes the exit condition. Possible values of EXITFLAG
% and the corresponding exit conditions are listed below. See the
% documentation for a complete description.
%
% 1 LSQNONLIN converged to a solution.
% 2 Change in X too small.
% 3 Change in RESNORM too small.
% 4 Computed search direction too small.
% 0 Too many function evaluations or iterations.
% -1 Stopped by output/plot function.
% -2 Bounds are inconsistent.
%
% [X,RESNORM,RESIDUAL,EXITFLAG,OUTPUT] = LSQNONLIN(FUN,X0,...) returns a
% structure OUTPUT with the number of iterations taken in
% OUTPUT.iterations, the number of function evaluations in
% OUTPUT.funcCount, the algorithm used in OUTPUT.algorithm, the number
% of CG iterations (if used) in OUTPUT.cgiterations, the first-order
% optimality (if used) in OUTPUT.firstorderopt, and the exit message in
% OUTPUT.message.
%
% [X,RESNORM,RESIDUAL,EXITFLAG,OUTPUT,LAMBDA] = LSQNONLIN(FUN,X0,...)
% returns the set of Lagrangian multipliers, LAMBDA, at the solution:
% LAMBDA.lower for LB and LAMBDA.upper for UB.
%
% [X,RESNORM,RESIDUAL,EXITFLAG,OUTPUT,LAMBDA,JACOBIAN] = LSQNONLIN(FUN,
% X0,...) returns the Jacobian of FUN at X.
%
% Examples
% FUN can be specified using @:
% x = lsqnonlin(@myfun,[2 3 4])
%
% where myfun is a MATLAB function such as:
%
% function F = myfun(x)
% F = sin(x);
%
% FUN can also be an anonymous function:
%
% x = lsqnonlin(@(x) sin(3*x),[1 4])
%
% If FUN is parameterized, you can use anonymous functions to capture the
% problem-dependent parameters. Suppose you want to solve the non-linear
% least squares problem given in the function myfun, which is
% parameterized by its second argument c. Here myfun is a MATLAB file
% function such as
%
% function F = myfun(x,c)
% F = [ 2*x(1) - exp(c*x(1))
% -x(1) - exp(c*x(2))
% x(1) - x(2) ];
%
% To solve the least squares problem for a specific value of c, first
% assign the value to c. Then create a one-argument anonymous function
% that captures that value of c and calls myfun with two arguments.
% Finally, pass this anonymous function to LSQNONLIN:
%
% c = -1; % define parameter first
% x = lsqnonlin(@(x) myfun(x,c),[1;1])
%
% See also OPTIMOPTIONS, LSQCURVEFIT, FSOLVE, @, INLINE.
% Copyright 1990-2018 The MathWorks, Inc.
% ------------Initialization----------------
defaultopt = struct(...
'Algorithm','trust-region-reflective',...
'DerivativeCheck','off',...
'Diagnostics','off',...
'DiffMaxChange',Inf,...
'DiffMinChange',0,...
'Display','final',...
'FinDiffRelStep', [], ...
'FinDiffType','forward',...
'FunValCheck','off',...
'InitDamping', 0.01, ...
'Jacobian','off',...
'JacobMult',[],...
'JacobPattern','sparse(ones(Jrows,Jcols))',...
'MaxFunEvals',[],...
'MaxIter',400,...
'MaxPCGIter','max(1,floor(numberOfVariables/2))',...
'OutputFcn',[],...
'PlotFcns',[],...
'PrecondBandWidth',Inf,...
'ScaleProblem','none',...
'TolFun', 1e-6,...
'TolFunValue', 1e-6, ...
'TolPCG',0.1,...
'TolX',1e-6,...
'TypicalX','ones(numberOfVariables,1)',...
'UseParallel',false );
% If just 'defaults' passed in, return the default options in X
if nargin==1 && nargout <= 1 && strcmpi(FUN,'defaults')
xCurrent = defaultopt;
return
end
if nargin < 5
options = [];
if nargin < 4
UB = [];
if nargin < 3
LB = [];
end
end
end
problemInput = false;
if nargin == 1
if isa(FUN,'struct')
problemInput = true;
[FUN,xCurrent,LB,UB,options] = separateOptimStruct(FUN);
else % Single input and non-structure.
error(message('optim:lsqnonlin:InputArg'));
end
end
% No options passed. Set options directly to defaultopt after
allDefaultOpts = isempty(options);
% Prepare the options for the solver
options = prepareOptionsForSolver(options, 'lsqnonlin');
% Set options to default if no options were passed.
if allDefaultOpts
% Options are all default
options = defaultopt;
end
if nargin < 2 && ~problemInput
error(message('optim:lsqnonlin:NotEnoughInputs'))
end
% Check for non-double inputs
msg = isoptimargdbl('LSQNONLIN', {'X0','LB','UB'}, ...
xCurrent,LB, UB);
if ~isempty(msg)
error('optim:lsqnonlin:NonDoubleInput',msg);
end
caller = 'lsqnonlin';
[funfcn,mtxmpy,flags,sizes,~,xstart,lb,ub,EXITFLAG,Resnorm,FVAL,LAMBDA, ...
JACOB,OUTPUT,earlyTermination] = lsqnsetup(FUN,xCurrent,LB,UB,options,defaultopt, ...
allDefaultOpts,caller,nargout,length(varargin));
if earlyTermination
return % premature return because of problem detected in lsqnsetup()
end
xCurrent(:) = xstart; % reshape back to user shape before evaluation
% Catch any error in user objective during initial evaluation only
switch funfcn{1}
case 'fun'
try
initVals.F = feval(funfcn{3},xCurrent,varargin{:});
catch userFcn_ME
optim_ME = MException('optim:lsqnonlin:InvalidFUN', ...
getString(message('optim:lsqnonlin:InvalidFUN')));
userFcn_ME = addCause(userFcn_ME,optim_ME);
rethrow(userFcn_ME)
end
initVals.J = [];
case 'fungrad'
try
[initVals.F,initVals.J] = feval(funfcn{3},xCurrent,varargin{:});
catch userFcn_ME
optim_ME = MException('optim:lsqnonlin:InvalidFUN', ...
getString(message('optim:lsqnonlin:InvalidFUN')));
userFcn_ME = addCause(userFcn_ME,optim_ME);
rethrow(userFcn_ME)
end
case 'fun_then_grad'
try
initVals.F = feval(funfcn{3},xCurrent,varargin{:});
catch userFcn_ME
optim_ME = MException('optim:lsqnonlin:InvalidFUN', ...
getString(message('optim:lsqnonlin:InvalidFUN')));
userFcn_ME = addCause(userFcn_ME,optim_ME);
rethrow(userFcn_ME)
end
try
initVals.J = feval(funfcn{4},xCurrent,varargin{:});
catch userFcn_ME
optim_ME = MException('optim:lsqnonlin:InvalidFUN', ...
getString(message('optim:lsqnonlin:InvalidJacobFun')));
userFcn_ME = addCause(userFcn_ME,optim_ME);
rethrow(userFcn_ME)
end
otherwise
error(message('optim:lsqnonlin:UndefCallType'))
end
% Check for non-double data typed values returned by user functions
if ~isempty( isoptimargdbl('LSQNONLIN', {'F','J'}, initVals.F, initVals.J) )
error('optim:lsqnonlin:NonDoubleFunVal',getString(message('optimlib:commonMsgs:NonDoubleFunVal','LSQNONLIN')));
end
% Flag to determine whether to look up the exit msg.
flags.makeExitMsg = logical(flags.verbosity) || nargout > 4;
[xCurrent,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...
lsqncommon(funfcn,xCurrent,lb,ub,options,defaultopt,allDefaultOpts,caller,...
initVals,sizes,flags,mtxmpy,varargin{:});
3.运行结果

相关文章:
26 用lsqnonlin求解最小二乘问题(matlab程序)
1.简述 函数语法 x lsqnonlin(fun,x0) 函数用于: 解决非线性最小二乘(非线性数据拟合)问题 解决非线性最小二乘曲线拟合问题的形式 变量x的约束上下限为ub和lb, x lsqnonlin(fun,x0)从x0点开始,找到fun中描述的函数的最小平方和。函数fu…...
Verilog语法学习——LV6_多功能数据处理器
LV6_多功能数据处理器 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 描述 根据指示信号select的不同,对输入信号a,b实现不同的运算。输入信号a…...
发送信息----策略模式
发送信息----策略模式 发送信息 发送信息 发送信息到手机、邮箱等,可扩展 package mainimport ("errors""fmt" )type PushContext struct {Phone, Email, Message stringTage int }type PaymentStrategy interface {Push(*P…...
PySpark介绍与安装
Spark是什么 定义:Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎。 简单来说,Spark是一款分布式的计算框架,用于调度成百上千的服务器集群,计算TB、…...
细讲TCP三次握手四次挥手(三)
TCP/IP 协议族 在互联网使用的各种协议中最重要和最著名的就是 TCP/IP 两个协议。现在人们经常提到的 TCP/IP 并不一定是单指 TCP 和 IP 这两个具体的协议,而往往是表示互联网所使用的整个 TCP/IP 协议族。 互联网协议套件(英语:Internet Pr…...
vue 组件中 data 为什么必须是函数
在Vue组件中,data选项为什么必须是函数而不是对象的原因是为了确保每个组件实例都拥有独立的数据副本。 当data选项是一个对象时,如果你有多个相同组件的实例,它们会共享同一个对象引用,这意味着一个组件的数据变化会影响到其他相…...
从零开始学python(十二)如何成为一名优秀的爬虫工程师
前言 回顾之前讲述了python语法编程 必修入门基础和网络编程,多线程/多进程/协程等方面的内容,后续讲到了数据库编程篇MySQL,Redis,MongoDB篇,和机器学习,全栈开发,数据分析前面没看的也不用往…...
为高性能计算构建,由亚马逊云科技Amazon Graviton3E驱动的最新实例正式可用
亚马逊云科技宣布两款基于最新一代自研芯片Amazon Graviton3E的新实例Amazon Elastic Compute Cloud(Amazon EC2)Hpc7g和Amazon EC2 C7gn正式可用。 其中,Hpc7g实例专为计算和网络密集型高性能计算(HPC)工作负载而构建…...
BUUCTF题目Crypto部分wp(持续更新)
Url编码 题目密文是%66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d,根据题目名字使用python的urllib模块解码即可。flag{and 11} from urllib.parse import quote, unquotec r%66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d m unquote(c, encodingutf-8) print(m)c2 quot…...
A Generalized Loss Function for Crowd Counting and Localization阅读笔记
简单来说,就是用了UOT来解决人群计数问题 代码:https://github.com/jia-wan/GeneralizedLoss-Counting-Pytorch.git 我改了一点的:https://github.com/Nightmare4214/GeneralizedLoss-Counting-Pytorch.git loss 设density map为 A { ( a…...
SocketD协议单链接双向RPC模式怎么实现
SocketD是一个基于Socket的通信框架,支持单链接双向RPC模式。在实现单链接双向RPC模式时,需要按照一定的协议进行通信,以下是一个简单的实现示例: 定义通信协议:首先,需要定义客户端和服务端之间的通信协议…...
apache poi 设置背景颜色
apache poi 设置背景颜色 要设置 Apache POI 中 HSSFCellStyle 的背景颜色,你可以按照以下步骤进行操作: 首先,创建一个 HSSFWorkbook 对象来表示你的 Excel 工作簿: HSSFWorkbook workbook new HSSFWorkbook();然后ÿ…...
Vue2-Vue3组件间通信-EventBus方式-函数封装
Vue3中采用EventBus方式进行组件间通信与Vue2有一定区别 1.创建EventBus 在Vue2中,我们可以在main.js中创建一个全局的EventBus,代码如下: // EventBus.js import Vue from vue const EventBus new Vue() export default EventBus// main.…...
【SpringBoot】| SpringBoot 和 web组件
目录 一:SpringBoot 和 web组件 1. SpringBoot中使用拦截器(重点) 2. SpringBoot中使用Servlet 3. SpringBoot中使用过滤器(重点) 4. 字符集过滤器的应用 一:SpringBoot 和 web组件 1. SpringBoot中使…...
dflow工作流使用1——架构和基本概念
对于容器技术、工作流等概念完全不懂的情况下理解dflow的工作方式会很吃力,这里记录一下个人理解。 dflow涉及的基本概念 工作流的概念很好理解,即某个项目可以分为多个步骤,每个步骤可以实现独立运行,只保留输入输出接口&#x…...
python小游戏课程设计报告,python游戏课程设计报告
大家好,给大家分享一下python2048游戏课程设计报告,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!...
使用Windbg分析从系统应用程序日志中找到的系统自动生成的dump文件去排查问题
目录 1、尝试将Windbg附加到目标进程上进行动态调试,但Windbg并没有捕获到 2、在系统应用程序日志中找到了系统在程序发生异常时自动生成的dump文件 2.1、查看应用程序日志的入口 2.2、在应用程序日志中找到系统自动生成的dump文件 3、使用Windbg静态分析dump文…...
后端技术趋势指南|如何选择自己的技术方向
编程多条路,条条通罗马 后台大佬 后台路线都是面对后台服务器业务,比如web后台服务器,视频后台服务器,搜索后台服务器,游戏后台服务器,直播后台服务器,社交IM后台服务器等等,大部分…...
Delphi XE的原生JSONObject如何判断键值是否存在?
【问题现象】 Delphi XE的原生JSONObject,取出键值的时候如下: //json是传入的参数,里面包括"food_name"等之类的键值,没有food_type键值 procedure XXXXFunciton(json:TJSONObject) var strFoodName,strFoodType:S…...
Go Runtime功能初探
以下内容,是对 运行时 runtime的神奇用法[1] 的学习与记录 目录: 1.获取GOROOT环境变量 2.获取GO的版本号 3.获取本机CPU个数 4.设置最大可同时执行的最大CPU数 5.设置cup profile 记录的速录 6.查看cup profile 下一次堆栈跟踪数据 7.立即执行一次垃圾回收 8.给变量…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
