首页
默认分类
技术经验
工作学习
娱乐爱好
闲言碎语
更多
统计
关于
登录
1
李芒果空岛-1.20.1-发展记录-05
305 阅读
2
“日晕“
248 阅读
3
108第一届中国象棋比赛
242 阅读
4
Mac安装Homebrew
213 阅读
5
初试3D打印——手机支架
210 阅读
Search
标签搜索
天文
Minecraft
李芒果空岛
macOS
空间物理学
数值计算
非线性最小二乘
typecho
Python
PTCG
GSL
gcc
迭代法
Fortran
Halo
朗谬尔波
Langmiur
环法自行车赛
Win10
Linux
Washy
累计撰写
72
篇文章
累计收到
2
条评论
首页
栏目
默认分类
技术经验
工作学习
娱乐爱好
闲言碎语
页面
统计
关于
管理后台
搜索到
72
篇与
的结果
2023-04-25
赤道仪的使用——测试1
本次的问题 忘记给手机充电 极轴校准选错了星星 问题分析 吸取上次教训,准备妥当了所有配件,并提前调研了赤道仪的使用方法,但忘记了给手机充电。因为还没买相机,暂时使用手机进行拍摄。 今天提前了很久去的观星点,等待了将近一个小时天才黑,勉强看到北方的一个星星时,就下意识的以为是北极星,使用该星星校准极轴镜之后,自动导星至天狼星,发现存在巨大偏差。使用天狼星进行一星校准后,自动导星至月亮,依然存在巨大偏差。将赤道仪归至零位,尝试在望远镜中寻找北极星,寻找过程中发现北极星对错了。可惜晚上还有其他的事情,没有来得及重新校准极轴便收摊回去了。 一些知识 北极星(Polaris):又称北辰、紫微星,指的是最靠近北天极的一颗恒星,现阶段所指的是“勾陈一”。因地球围绕着地轴进行自转,而北极星与地轴的北部延长线极为接近,所以夜晚看天空北极星是几乎不动的,且在头顶偏北方向,因此可以指示北方。 磁偏角:地理轴与地磁轴的夹角称为磁偏角,当前大约11.5°。 北极星是否处于指南针的正北方向,取决于所处位置是否处在地理轴和地磁轴构成的平面上。
2023年04月25日
115 阅读
0 评论
0 点赞
2023-04-18
HEQ5赤道仪的使用
准备物品 赤道仪部分:三脚架、本体、重锤、电源 主镜部分:主镜、主镜配件 使用步骤 安装赤道仪 打开三脚架,使得三脚架N标识符朝向正北 将赤道仪本体放置在三脚架上,拧紧底部螺丝,然后安装托盘,托盘尽量拧紧些 观察赤道仪上的水平泡,通过调节三脚架三条腿的高度,将水平泡调至中心位置 安装主镜 先安装重锤,然后安装主镜,最后安装主镜配件 松开赤纬旋钮,调节主镜的平衡,调好后锁死赤纬 松开赤经旋钮,调节主镜和重锤的平衡,调好后锁死赤经 调节零位 安装赤道仪手控器及电源线 放下重锤杆,调节赤经,使重锤杆与三脚架平行;调节赤纬,旋钮在东侧,鸩尾槽朝向北方 给赤道仪上电,操作手控器,输入经度、纬度、海拔高度、日期和时间 校准极轴 打开极轴盖,将赤纬旋转90度 观察极轴镜,通过调节方位角和仰角,使北极星落在极轴镜中的正确位置 盖上极轴盖 附加 以上参考了B站【摄日者云课堂】信达HEQ5赤道仪安装调试方法视频,按照我的理解,调节零位应该在安装主镜之后,校准极轴应该在上电之后,所以排了以上的顺序。
2023年04月18日
100 阅读
0 评论
0 点赞
2023-04-18
域名备案的相关事项
域名备案事项 相关问题 什么条件下需要进行域名备案? 购买了域名,并解析至国内的云服务器时,需要进行域名备案。并且域名完成备案前不可使用,备案完成后需要在网站页脚标注备案信息,并在网站发布的30天内进行公安备案。 只够买了域名,使用Hexo + GitHub Pages布置静态博客,需要备案吗? 不需要。 购买了域名以及境外的云服务器,需要进行域名备案吗? 不需要。 域名备案时,身份证的地址信息与实际户口所在地不同(即迁了户口但还没有更换新的身份证),如何选择备案地? 按照身份证上的地址信息进行备案。 在不同商家购买了域名和云服务器,应该在哪个商家进行域名备案? 在购买云服务器的商家处进行域名备案。如在阿里云购买了域名,在腾讯云购买了云服务器,则在腾讯云进行域名备案操作。 官网链接 域名备案:云服务器购买商的官网 公安备案:https://www.beian.gov.cn/portal/index.do
2023年04月18日
102 阅读
0 评论
0 点赞
2023-04-16
使用Wordpress搭建博客
1 初步认识 1.1 简介 WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。 WordPress是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP语言和MySQL数据库开发的,用户可以在支持 PHP 和 MySQL数据库的服务器上使用自己的博客。 WordPress有许多第三方开发的免费模板,安装方式简单易用。不过要做一个自己的模板,则需要你有一定的专业知识。比如你至少要懂的标准通用标记语言下的一个应用HTML代码、CSS、PHP等相关知识。 WordPress官方支持中文版,同时有爱好者开发的第三方中文语言包,如wopus中文语言包。WordPress拥有成千上万个各式插件和不计其数的主题模板样式。 百度百科 - Wordpress 1.2 运行环境 由上可知,Wordpress可以在任意安装了PHP和MySQL的电脑或服务器上运行。 PHP和MySQL两款软件可以单独配置,也可以使用集成软件直接配置。集成软件可选择小皮面板(PhPstudy)、宝塔面板等。 1.3 本文内容 下面将简要介绍如何在服务器搭建Wordpress网站,如果想在本地运行,只需在本地安装小皮面板或宝塔面板,其他步骤一致即可。 2 准备阶段 购买一个云服务器:作为博客网站使用时选择最低配置即可,推荐腾讯云、阿里云,如果是新用户会有比较大的折扣 购买一个域名:云服务器在国内需要备案,关于备案请看腾讯云的《网站备案》以及本站博客《域名备案的相关事项》 下载最新版Wordpress文件,官网下载链接https://cn.wordpress.org/download/ 3 宝塔面板 连接服务器,Ubuntu/Deepin使用如下命令进行安装。此处大概率已经不是最新版本,建议前往宝塔面板官网查看最新命令。对于腾讯云服务器用户,也可以在初始化时直接选在带有宝塔面板的系统 wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec 进入宝塔面板,选择LNMP一键极速安装,等待安装完成 点击左侧导航栏的【网站】-【添加站点】- 填写域名 - 创建数据库 - 提交 域名:备案审核已通过的话,使用域名;还没通过的,使用公网IP 数据库:选择创建 添加站点后,点击站点名后的【设置】,修改【伪静态】为wordpress 点击站点名后的【根目录】链接,进入站点根目录(/www/wwwroot/站点域名),删除所有原始文件,上传下载的Wordpress压缩包并解压 将解压后的所有文件从wordpress文件夹剪切至站点根目录,删除wordpress文件夹和上传的压缩包 浏览器输入站点域名进入Wordpress配置界面,点击【现在就开始】 输入数据库名称和密码,点击【提交】。数据库名称和密码可在宝塔面板左侧【数据库】页面查询 输入站点标题、用户名、密码和电子邮件,点击【安装Wordpress】 至此,一个Wordpress网站就搭建完成了。当然现在网站页面还比较丑,需要安装一个合适的主题并配置。
2023年04月16日
117 阅读
0 评论
0 点赞
2023-04-13
博客网站规划
当前博客网站使用typecho框架搭建。 基本信息 [X] 增加备案信息(2023-04-12) [X] 增加《关于》页面:简要介绍作者和网站(2023-04-16) 前台界面 增加指定分类首页排除功能 [X] Wordpress实现(2023-04-13) [ ] typecho待实现 [X] 文章页优化:修改引用显示样式,修改1~3级无序列表显示样式 Wordpress实现(2023-05-15) [X] 代码高亮显示(2023-05-17) [X] 文章页优化:作者介绍、文章分享、版权信息等(2023-05-17) [X] 增加网站明亮/暗黑模式切换按钮(2023-05-17) 其它 [ ] 绑定手机小程序
2023年04月13日
114 阅读
0 评论
0 点赞
2023-04-12
博客搭建框架介绍
经过近两周的折腾,初步搭建了当前的博客网站,这期间调研了不少博客网站搭建的文章和教程,这里简要介绍下各个框架的特点,以便需要的人参考。 博客网站框架 最近主要接触了以下几种博客框架: 序号 名称 官网 特点 主题库 1 Hexo https://hexo.io/zh-cn/ 无后台,配置简单,功能简单 大量免费开源的主题 2 Halo https://halo.run/ 有后台,配置简单,正在发展中 相对较少,但未来可期 3 typecho https://typecho.org/ 有后台,配置简单,仅适合博客 大量免费开源的主题 4 Wordpress https://cn.wordpress.org/ 有后台,配置复杂,功能强大 大量免费以及付费的主题 博客框架推荐 以下仅为个人观点。 博客框架的选择需要考虑自身需求和各种成本问题,这里主要基于以下几点进行分析: 网站功能: Hexo:纯静态网站,没有后台操作界面,即无法在线编辑,只能本地写好文章后,使用命令上传至GitHub或服务器。安装插件可实现文章评论功能,不支持用户注册。 Halo:有后台操作界面,支持markdown语法。支持评论、用户注册。 typecho:有后台操作界面,支持markdown语法,仅支持作为博客网站。支持评论、用户注册。 Wordpress:有后台操作界面,安装插件后支持markdown语法,拥有众多强大的功能。支持评论、用户注册。 网站美观: Hexo:有不少好看的主题且免费开源 Halo:主题库相对较少,尤其是更新后的2.0版本 typecho:主题库丰富,众多免费主题可供挑选 Wordpress:主题库丰富,免费版、付费版均有 搭建网站的时间成本: Hexo:很小,根据教程十几分钟即可在GitHub上搭建好。但评论等功能的添加需要额外花费时间。 Halo/typecho:云服务搭建半天左右,域名备案一周左右。 Wordpress:云服务器和域名配置同上。找到适合的主题比较花时间。 网站搭建的金钱投入: Hexo:使用GitHub Pages,可以零成本。购买域名,一年几块到几十块不等。 Halo/typecho/Wordpress:必须购买服务器和域名。新手优惠至少一百多每年,老用户至少六百多每年。 后期维护及优化 Hexo:一劳永逸,后期几乎不需要维护和优化。 Halo/typecho:暂不清楚。 Wordpress:随着内容的增多,需要进行额外的维护和优化。 综上所述,如果想完全白嫖,使用Hexo+GitHub Pages;如果购买了云服务器和域名,又不想投入太多精力在网站搭建上,建议使用Halo或typecho;如果比较想折腾或者完美主义者,直接Wordpress。
2023年04月12日
136 阅读
0 评论
0 点赞
2023-03-29
非线性最小二乘法拟合函数-3
在前面两个博客中,推导得到了Levenberg-Marquardt算法(简称LM算法)的迭代公式,这里将讲述如何使用Fortran编写一个简单的LM算法。 此处介绍待定系数只有一个的情况。 1 程序设计 1.1 Levenberg_Maquardt_Fit 简介:LM算法子例程,输入离散数据,迭代拟合待定系数 传递参数: n 离散数据的长度 x 离散数据的自变量 y 离散数据的因变量 a 待定系数 1.2 myfunc 简介:待拟合函数的数值计算子例程。为了具有普适性,假定待拟合函数的解析式未知,函数结果只能由此子例程数值计算得到。 传递参数: n 离散数据的长度 x 离散数据的自变量 a 待定系数的当前值 fx 待拟合函数的数值计算结果 1.3 Calculate_Jacobian 简介:计算待拟合函数的Jacobian矩阵的子例程。为了具有普适性,使用差分法计算一阶导数。 传递参数: n 离散数据的长度 x 离散数据的自变量 y 待拟合函数的数值计算结果 a 待定系数的当前值 J 待拟合函数的Jacobian矩阵 2 源代码 2.1 Levenberg_Maquardt_Fit 此处迭代次数上限设置为30次,可根据需求自行更改 对于自变量有多个的情况,可将输入x改为x1,x2,...,满足自变量个数即可 SUBROUTINE Levenberg_Maquardt_Fit(n, x, y, a) IMPLICIT NONE ! 输入参数 INTEGER, INTENT(IN) :: n ! 数据点个数 REAL, DIMENSION(n), INTENT(IN) :: x, y ! 数据点 ! REAL, DIMENSION(3), INTENT(INOUT) :: a ! 待求的拟合系数 REAL, INTENT(INOUT) :: a ! 待求的拟合系数 ! 定义常量 INTEGER, PARAMETER :: m = 1 ! 待求的系数个数 REAL, PARAMETER :: eps = 1.0E-6 ! 收敛阈值 ! 定义变量 REAL :: da(m), r(n), J(n,m), H(m,m) ! 拟合系数、残差、雅可比矩阵、Hessian矩阵 REAL :: lambda, alpha(m) ! 调节因子、步长 INTEGER :: i, iter ! 循环计数器 REAL :: fx(n) ! 初始化调节因子 lambda = 0.001 ! 开始迭代 iter = 0 DO WHILE(iter < 30) ! 迭代次数上限为10000 iter = iter + 1 ! 计算被拟合函数值 CALL myfunc(n,x,a,fx) ! 计算残差向量 r = y - fx ! 计算雅可比矩阵 CALL Calculate_Jacobian(n, x, fx, a, J) ! 计算Hessian矩阵 H = MATMUL(TRANSPOSE(J), J) ! 计算梯度向量 da = MATMUL(TRANSPOSE(J), r) ! 计算搜索方向 DO i = 1, m H(i,i) = H(i,i) + lambda END DO ! CALL SOLVE_LINEAR_SYSTEM(m, H, da, alpha) alpha = da(1)/H(1,1) ! 计算新的拟合系数 a = a + alpha(1) ! 更新调节因子 IF (NORM2(r) < eps) THEN EXIT ELSE IF (NORM2(r) < NORM2(r - MATMUL(J, alpha))/2) THEN lambda = lambda/10. ELSE lambda = lambda*10. END IF END DO END SUBROUTINE 2.2 myfunc 此处使用了一个非常简单的一次函数作为示例,使用时需要将fx = a*x修改为实际的待拟合函数的形式。若待拟合函数是一个子例程,则在此处使用CALL调用 若在Levenberg_Maquardt_Fit子例程中修改了自变量个数,此处需要对应修改 SUBROUTINE myfunc(n,x,a,fx) IMPLICIT NONE ! 输入参数 INTEGER, INTENT(IN) :: n REAL, INTENT(IN) :: x(n) ! 自变量 REAL, INTENT(IN) :: a ! 拟合系数 REAL, INTENT(OUT) :: fx(n) fx = a*x END SUBROUTINE 2.3 Calculate_Jacobian 本子例程使用了差分法计算一阶导数,因此几乎适用于所有的待拟合函数 若在前面修改了自变量的个数,此处需对应修改 SUBROUTINE Calculate_Jacobian(n, x, y, a, J) IMPLICIT NONE ! 输入参数 INTEGER, INTENT(IN) :: n ! 数据点个数 REAL, DIMENSION(n), INTENT(IN) :: x, y ! 数据点 REAL, INTENT(IN) :: a ! 拟合系数 ! 输出参数 REAL, DIMENSION(n,1), INTENT(OUT) :: J ! 雅可比矩阵 ! 定义变量 INTEGER :: i ! 循环计数器 REAL :: dela, y1(n) ! 步进 dela = 0.01 ! 计算 a+dela 对应的 y1 CALL myfunc(n,x,a+dela,y1) ! 计算雅可比 DO i = 1, n J(i,1) = (y1(i) - y(i))/dela END DO END SUBROUTINE 3 测试 编写程序主体,设定y约为x的两倍,调用LM子例程计算待定系数a program name implicit none INTEGER n real :: x(5),y(5),a x = (/1.,2.,3.,4.,5./) y = (/2.1,4.1,5.9,8.1,9.9/) ! y = 2*x**2 + n = 5 a = 1.0 call Levenberg_Maquardt_Fit(n, x, y, a) print *,a end program name 使用gfortran编译生成可执行文件,运行可执行文件后,在终端打印出 1.99818182 离散数据的因变量约为自变量的两倍,因此上述计算结果符合预期
2023年03月29日
115 阅读
0 评论
0 点赞
2023-03-29
非线性最小二乘法拟合函数-2
问题1:假设有$n$个离散点$(x_i,y_i)$,存在一个系数未知的被拟合函数$f(x,a)$,如何使用非线性最小二乘法拟合得到最优的待定系数$a$。 问题2:假设有$n$个离散点$(x_i,y_i)$,存在一个系数未知的被拟合函数$f(x,a_1,a_2,\dots,a_m)$,如何使用非线性最小二乘法拟合得到最优的待定系数组$a_1,a_2,\dots,a_m$。 1 数学推导 上一个博客讲解了问题1的数学推导,这里关注待定系数有多个的问题2。 1.1 问题数学化 对于问题2,第$i$个数据的残差表达式如下 $$ r_i (a_1,a_2,\dots,a_m) = y_i - f(x_i,a_1,a_2,\dots,a_m) = y_i - f_i(a_1,a_2,\dots,a_m) $$ 上式中,$x_i,y_i$均为已知量,为书写方便,将$f(x_i,a_1,a_2,\dots,a_m)$简写为$f_i(a_1,a_2,\dots,a_m)$。 使用残差的平方和作为损失函数,如下 $$ L(a_1,a_2,\dots,a_m) = \sum_{i=1}^n r_i^2(a_1,a_2,\dots,a_m) = \sum_{i=1}^n[y_i - f_i(a_1,a_2,\dots,a_m)]^2 $$ 则问题2可表示为求解损失函数$L(a_1,a_2,\dots,a_m)$最小值对应的待定系数组$a_1,a_2,\dots,a_m$。同样的,将最小值问题近似为极小值问题。为书写方便,使用向量$\mathbf{a}$表示$a_1,a_2,\dots,a_m$,则上式修改为 $$ L(\mathbf{a}) = \sum_{i=1}^n [y_i - f_i(\mathbf{a})]^2 $$ 1.2 求函数极值点 1.2.1 迭代法递推公式 求解函数的极值点问题,即为求解一阶导数的零点问题,求函数$L(\mathbf{a})$对$\mathbf{a}$的一阶导数,如下 $$ \frac{d L(\mathbf{a})}{d \mathbf{a}} = -2 \sum_{i=1}^n [y_i - f_i(\mathbf{a})] \frac{d f_i(\mathbf{a})}{d \mathbf{a}} = -2 \sum_{i=1}^n [y_i - f_i(\mathbf{a})] J_i(\mathbf{a}) $$ 其中$J_i(\mathbf{a}) = d f_i(\mathbf{a}) / d \mathbf{a}$。令 $$ g(\mathbf{a}) = -\frac{1}{2} \frac{d L(\mathbf{a})}{d \mathbf{a}} = \sum_{i=1}^n J_i(\mathbf{a}) [y_i - f_i(\mathbf{a})] $$ 至此,将求解函数$L(\mathbf{a})$的极值点问题转化为求解函数$g(\mathbf{a})$的零点问题。对$g(\mathbf{a})$在$\mathbf{a}=\mathbf{a_0}$处进行泰勒展开,其中$\mathbf{a_0}$表示待定系数组$\mathbf{a}$的初始值,只保留一阶项有 $$ g(\mathbf{a}) \approx \sum_{i=1}^n J_i(\mathbf{a_0}) [y_i - f_i(\mathbf{a_0}) - J_i(\mathbf{a_0}) (\mathbf{a} - \mathbf{a_0})] = \mathbf{J^T}(\mathbf{a_0}) \mathbf{r} (\mathbf{a_0}) - \mathbf{H} (\mathbf{a_0}) \Delta \mathbf{a} $$ 其中$\mathbf{H} (\mathbf{a}) = \mathbf{J^T} \mathbf{J}$为Hession矩阵,$\mathbf{J}(\mathbf{a})$为Jacobian矩阵,表达式如下 $$ \mathbf{J} (\mathbf{a}) = \left[ \begin{matrix} \frac{\partial J_1}{\partial a_1} & \frac{\partial J_1}{\partial a_2} & \cdots & \frac{\partial J_1}{\partial a_m} \\ \frac{\partial J_2}{\partial a_1} & \frac{\partial J_2}{\partial a_2} & \cdots & \frac{\partial J_2}{\partial a_m} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial J_n}{\partial a_1} & \frac{\partial J_n}{\partial a_2} & \cdots & \frac{\partial J_n}{\partial a_m} \end{matrix} \right] $$ 令$g(\mathbf{a})=0$可得 $$ \mathbf{H} (\mathbf{a_0}) \Delta \mathbf{a} = \mathbf{J^T}(\mathbf{a_0}) \mathbf{r} (\mathbf{a_0}) $$ 上式即为高斯-牛顿法迭代公式。引入阻尼因子$\mu$得到Levenberg-Marquardt算法迭代公式如下 $$ [ \mathbf{H} (\mathbf{a_0}) + \mu \mathbf{I} ] \Delta \mathbf{a} = \mathbf{J^T}(\mathbf{a_0}) \mathbf{r} (\mathbf{a_0}) $$ 其中$\mathbf{I}$为单位矩阵。整理后可得 $$ \Delta \mathbf{a} = [ \mathbf{H} (\mathbf{a_0}) + \mu \mathbf{I} ]^{-1} \mathbf{J^T}(\mathbf{a_0}) \mathbf{r} (\mathbf{a_0}) $$ 进而可以得到递推公式为 $$ \mathbf{a_{k+1}} = \mathbf{a_{k}} + [ \mathbf{H} (\mathbf{a_0}) + \mu \mathbf{I} ]^{-1} \mathbf{J^T}(\mathbf{a_0}) \mathbf{r} (\mathbf{a_0}) $$ 至此,得到了非线性最小二乘拟合的Levenberg-Marquardt算法迭代公式。 上述迭代公式得到的是待定系数组。 1.2.2 Jocabian矩阵 对于可直接求导得到一阶导数解析表达式的函数,直接代入相应的解析表达式即可。对于只能数值求解的函数,可使用差分近似求解,即 $$ J(\mathbf{a}) \approx \frac{f(\mathbf{a}+\delta \mathbf{a}) - f(\mathbf{a})}{\delta \mathbf{a}} $$ 其中$\delta \mathbf{a}$表示一个小量。至此,即可使用Levenberg-Marquardt算法迭代公式进行迭代求解。 1.2.3 结束迭代的条件 残差的范数小于某个值 超出最大循环次数 2 两个问题的联系 在本文中,Jacobian矩阵的大小为n行m列,Hession矩阵的大小为m行m列。其中,n为离散点的个数,m为待定系数的个数。当$m=1$时,问题2退化为问题1,即Jacobian矩阵变为n行1列的向量,Hession矩阵变为一个标量。
2023年03月29日
113 阅读
0 评论
0 点赞
2023-03-29
非线性最小二乘法拟合函数-1
从数学推导至程序实现,对非线性最小二乘拟合原理及应用进行简单的介绍,希望能够帮助到有需要的人。 0 问题引入 问题1:假设有$n$个离散点$(x_i,y_i)$,存在一个系数未知的被拟合函数$f(x,a)$,如何使用非线性最小二乘法拟合得到最优的待定系数$a$。 问题2:假设有$n$个离散点$(x_i,y_i)$,存在一个系数未知的被拟合函数$f(x,a_1,a_2,\dots,a_m)$,如何使用非线性最小二乘法拟合得到最优的待定系数组$a_1,a_2,\dots,a_m$。 问题2是问题1的拓展,由一个待定系数变为多个待定系数。之后的介绍和推导将由浅入深,从问题1开始讲起。 1 非线性最小二乘法 概念:非线性最小二乘法是一种优化方法,它通过最小化非线性函数与实验数据之间的残差平方和来确定未知参数的最优解。 非线性函数:参数未知的非线性被拟合函数,常用的有多项式函数、指数函数、幂函数、高斯函数等。 残差:是指在拟合过程中,模型预测值与实际观测值之间的差异。 对残差的要求: 独立同分布:残差之间应该是独立的且来自同一个概率分布。一般指高斯分布,如果不是,可能会出现偏差、误差较大的问题; 零均值:残差的平均值应该为0; 常数方差:残差的方差应该为常数。 求解方法:通常使用迭代优化算法来寻找最优解,如高斯-牛顿法、Levenberg-Marquardt算法等。 2 迭代法 概念:迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程。迭代法是用计算机解决问题的一种基本方法,它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值,迭代法又分为精确迭代和近似迭代。 百度百科——迭代法 下面介绍两种使用迭代法的场景。 2.1 求函数的零点 对函数$f(x)$在$x=x_0$处进行泰勒展开,只保留到一阶项,即 $$ f(x) \approx f(x_0) + f'(x_0) (x - x_0) $$ 令上式等于零,若函数$f(x)$的一阶导数存在且不为零,可得 $$ x = x_0 - f(x_0)/f'(x_0) $$ 进而可以得到递推公式 $$ x_{k+1} = x_k - f(x_k)/f'(x_k) $$ 设增量$\Delta = x_{k+1} - x_k$,则 $$ \Delta = - f(x_k)/f'(x_k) $$ 根据递推公式即可完成迭代求解,本方法为牛顿迭代法。 2.2 求函数的极值点 已知极值点处的一阶导数为零,即问题可修改为求函数$f'(x)$的零点。利用2.1节的方法,对$f'(x)$进行泰勒展开,可得 $$ f'(x) \approx f'(x_0) + f''(x_0) (x - x_0) $$ 同样的,可得增量表达式为 $$ \Delta = - f'(x_k)/f''(x_k) $$ 3 数学推导 由浅入深,先讲解待定系数只有一个的问题1。 3.1 问题数学化 问题1:假设有$n$个离散点$(x_i,y_i)$,存在一个系数未知的被拟合函数$f(x,a)$,如何使用非线性最小二乘法拟合得到最优的待定系数$a$。 对于问题1,第$i$个数据的残差表达式如下 $$ r_i (a) = y_i - f(x_i,a) = y_i - f_i(a) $$ 上式中,$x_i,y_i$均为已知量,为书写方便,将$f(x_i,a)$简写为$f_i(a)$。 根据第1节的概念,使用残差的平方和作为损失函数,表达式如下 $$ L(a) = \sum_{i=1}^n r_i^2(a) = \sum_{i=1}^n[y_i - f_i(a)]^2 $$ 则问题1可表示为求解损失函数$L(a)$最小值对应的待定系数$a$。最小值的问题通常不容易求解,因此可将其近似为求解损失函数$L(a)$极小值对应的待定系数$a$。若最终求得的极小值不是最小值,则为局部最优解。 3.2 求函数L(a)的极值点 3.2.1 迭代法递推公式 求解函数的极值点问题,即为求解一阶导数的零点问题,求函数$L(a)$对$a$的一阶导数,如下 $$ \frac{d L(a)}{d a} = -2 \sum_{i=1}^n [y_i - f_i(a)] \frac{d f_i(a)}{d a} $$ 令$J_i (a) = d f_i (a) / d a$,则有 $$ g(a) = -\frac{1}{2} \frac{d L(a)}{d a} = \sum_{i=1}^n [y_i - f_i(a)] J_i (a) $$ 至此,将求解函数$L(a)$的极值点问题转化为求解函数$g(a)$的零点问题。对$g(a)$在$a=a_0$处进行泰勒展开,并且只保留一阶项,有 $$ g(a) \approx \sum_{i=1}^n J_i (a_0) [y_i - f_i(a_0) - J_i(a_0) (a - a_0)] = \sum_{i=1}^n J_i (a_0) r_i(a_0) - H(a_0) \Delta a $$ 其中$H(a_0) = \sum_{i=1}^n J_i^2(a_0)$,$\Delta a = a - a_0$。令$g(a)=0$可得 $$ H(a_0) \Delta a = \sum_{i=1}^n J_i (a_0) r_i(a_0) $$ 上式即为高斯-牛顿法迭代公式。引入阻尼因子$\mu$得到Levenberg-Marquardt算法迭代公式如下 $$ [H(a_0) + \mu] \Delta a = \sum_{i=1}^n J_i (a_0) r_i(a_0) $$ 整理后可得 $$ \Delta a = [H(a_0) + \mu]^{-1} \sum_{i=1}^n J_i(a_0) r_i(a_0) $$ 进而可以得到递推公式为 $$ a_{k+1} = a_k + [H(a_k) + \mu]^{-1} \sum_{i=1}^n J_i(a_k) r_i(a_k) $$ 至此,得到了非线性最小二乘拟合的Levenberg-Marquardt算法迭代公式。 阻尼因子:是用来平衡算法的收敛速度和稳定性的一个参数。 当阻尼因子较小时,迭代算法会更快地收敛,但也会更容易陷入局部最小值; 当阻尼因子较大时,算法会更稳定,但会收敛得更慢。 3.2.2 一阶导数 对于可直接求导得到一阶导数解析表达式的函数,直接代入相应的解析表达式即可。对于只能数值求解的函数,可使用差分近似求解,即 $$ J(a) \approx \frac{f(a+\delta a) - f(a)}{\delta a} $$ 其中$\delta a$表示一个小量。至此,即可使用Levenberg-Marquardt算法迭代公式进行迭代求解。 3.2.3 结束迭代的条件 残差的范数小于某个值 超出最大循环次数
2023年03月29日
134 阅读
0 评论
0 点赞
2023-03-28
Hexo-themes-butterfly主题的安装及配置
官方配置教程:Butterfly 安裝文檔(一) 快速開始 安装 进入Hexo博客根目录 下载主题 git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly 启用主题,将根目录_config.yml文件主题部分设置为butterfly theme: butterfly 安装插件 npm install hexo-renderer-pug hexo-renderer-stylus --save 将themes/butterfly/_config.yml文件复制到在Hexo博客根目录并改名为_config.butterfly.yml cp themes/butterfly/_config.yml _config.butterfly.yml 配置 详情参考官方教程,需要注意有些功能要安装额外的插件。 Math数学 启用KaTex时,需要卸载和安装以下插件 npm un hexo-renderer-marked --save # 如果有安裝這個的話,卸載 npm un hexo-renderer-kramed --save # 如果有安裝這個的話,卸載 npm i hexo-renderer-markdown-it --save # 需要安裝這個渲染插件 npm install katex @renbaoshuo/markdown-it-katex #需要安裝這個katex插件 在Hexo根目录的_config.yml中配置如下信息 markdown: plugins: - '@renbaoshuo/markdown-it-katex' 字数统计 进入Hexo根目录,安装以下插件 npm install hexo-wordcount --save 修改主题配置文件 wordcount: enable: true post_wordcount: true min2read: true total_wordcount: true
2023年03月28日
122 阅读
0 评论
0 点赞
1
...
6
7
8