[原创]最速下降法/steepest descent,牛顿法/newton,共轭方向法/conjugate direction,共轭梯度法/conjugate gradient 及其他

 

在最优化的领域中,这“法”那“法”无穷多,而且还“长得像”——名字相似的多,有时让人觉得很迷惑。

在自变量为一维的情况下,也就是自变量可以视为一个标量,此时,一个实数就可以代表它了,这个时候,如果要改变自变量的值,则其要么减小,要么增加,也就是“非左即右“,所以,说到“自变量在某个方向上移动”这个概念的时候,它并不是十分明显;而在自变量为n(n≥2)维的情况下,这个概念就有用了起来:假设自变量X为3维的,即每一个X是(x1, x2, x3)这样的一个点,其中x1,x2和x3分别是一个实数,即标量。那么,如果要改变X,即将一个点移动到另一个点,你怎么移动?可以选择的方法太多了,例如,我们可以令x1,x2不变,仅使x3改变,也可以令x1,x3不变,仅使x2改变,等等。这些做法也就使得我们有了”方向“的概念,因为在3维空间中,一个点移动到另一个点,并不是像一维情况下那样“非左即右”的,而是有“方向”的。在这样的情况下,找到一个合适的”方向“,使得从一个点移动到另一个点的时候,函数值的改变最符合我们预定的要求(例如,函数值要减小到什么程度),就变得十分有必要了。

阅读更多

[原创]Ridders求导算法

N年前,当我还是一个在校学生的时候,有一次到工厂里实习,看到某系统上运行的一个软件中显示的一条条曲线,以及其下的一些参数值,我问旁边开发那款软件的老师:某某值是怎么求出来的?老师说,是对曲线求导算出来的。当时我就心想,一个人开发出这款软件得综合多少个领域的知识才能做得到啊。从那时起,我的心中就埋下了一颗种子。时光匆匆,一眨眼就到了今天,因为学习其他算法的原因,涉及到了一些求导算法的编程,于是,本文必须得写。

求导算法应用广泛,例如,在LM算法中,需要对函数求导(但是,使用数值求导的方法来求导数值,会不会对LM算法的整个过程的效率造成较大影响,我不清楚,还没有试验),可以考虑使用数值求导算法来实现。

如何用程序实现求一个数学函数在某一点的导数值?由于计算机的舍入误差的存在,如果按导数的定义来求,精度将比较差。 我们先来看一下导数的定义:

阅读更多

[原创]选主元的高斯-约当(Gauss-Jordan)消元法解线性方程组/求逆矩阵

 

选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵、解线性方程组(插一句:LM算法求解的一个步骤),等等。它的速度不是最快的,但是它非常稳定来自网上的定义:一个计算方法,如果在使用此方法的计算过程中,舍入误差得到控制,对计算结果影响较小,称此方法为数值稳定的,同时它的求解过程也比较清晰明了,因而人们使用较多。下面我就用一个例子来告诉你Gauss-Jordan法的求解过程吧。顺便再提及一些注意事项以及扩展话题。

对本文中所提到的“主元”等概念的解释,可以参考此链接

阅读更多

[原创]安装RHEL 5.3时加载自定义的Raid卡驱动

一台装有Raid卡的服务器要安装RHEL 5.3,而RHEL 5.3并不自带该服务器的Raid卡驱动,于是,在图形化界面的安装过程中,当要选择磁盘空间分配的时候,找不到磁盘。于是可知,应该是RHEL 5.3没有自带这块Raid卡的驱动,所以要在安装过程中加载它。

阅读更多

[原创]xfs文件系统在RHEL 5.3下的安装及配置 & NFS挂载出错的解决办法

要在RHEL里的一个分区上使用xfs文件系统,不像Ubuntu那么简单。此处以RHEL 5.3为例,说明如何将一个分区格式化为xfs文件系统,并开机自动挂载。

首先,从安装RHEL 5.3说起。它默认是不支持xfs的,你无法在安装过程中指定一个分区使用xfs格式。因此,我选择了将此分区做成ext3的方法,待完全安装好系统之后再在命令行下格式化为xfs。

阅读更多

[原创]Hadoop开发基础知识记录

 

 当你把一个文件加入distribution cache的时候,要注意:如果你是以addCacheFile()的方式添加的,而你在mapper中取出来的时候,却是以archive的方式取出来——getLocalCacheArchives(),那么,你将得不到cache文件的路径,因为放进去和取出来的方式要一致。

阅读更多

[原创]VMware EXSi磁盘容量上限


在一台做了Raid、只有一个>7TB的磁盘(之所以会这么大,是因为用Raid把N块物理硬盘做成了一块虚拟硬盘)的服务器上,安装了VMware EXSi后,发现数据存储可用空间只有1.27TB,神奇,另外的6T多空间哪去了呢?如下图:

阅读更多

[原创]Java基础知识记录(1)

前言:本文『很傻很天真』,任何稍有Java编程经验的都不用看了。

 

(1)Java文件编译得到class文件,jar包是若干class文件(以及其他一些文件)的集合,如果要在命令行运行jar包中的一个class文件(相当于一个Java程序),可以这样做:

java -cp /root/software/tmp/XXX.jar:/root/software/tmp/lib/* com.abc.calculate.MyClass --date 20101101

其中,-cp 表示指定classpath,后面需要以分号(:)分隔的方式将所有需要用到的依赖jar包添加进来,此处添加了 /root/software/tmp/XXX.jar 包以及 /root/software/tmp/lib/ 目录下的所有jar包。

com.abc.calculate.MyClass 是要运行的jar包 XXX.jar 中的一个class文件,这么长的名字是它在jar包中的路径全名。

--date是传给 MyClass 程序命令行参数。还可以带更多的参数,要看你在Java程序中是如何写的代码。

阅读更多

[原创]后台运行的shell脚本对文件锁的影响

假设shell脚本A中的一段代码设置有文件锁,在此文件锁的后面(外部)以后台运行的方式调用了脚本B(此脚本中也有文件锁,但是与脚本A的锁文件不是同一个文件),并且脚本B执行时间相当之长,那么,在后台运行的脚本B在结束之后,是否会导致脚本A无法启动第二个进程呢?

下面就来做一个简单的试验,以确定上面的问题。

脚本A(parent.sh)内容如下:

#!/bin/sh
SHELL_DIR="/root/"
LOCKFILE_1=$SHELL_DIR".lock1"
{
    echo "Go into lock1."
    if ! flock -n 4; then
        echo "*** Shell is running, quit."
        exit 1
    fi
} 4<>$LOCKFILE_1

$SHELL_DIR"child.sh" &      # run shell B on background 

阅读更多

[原创] Nagios安装、配置、问题记录(2)

 

本文描述了我在使用Nagios的过程中遇到的一些问题、解决办法以及总结的注意事项。文章很长,请使用Ctrl+F定位到你需要的部分。

Nagios是一套强大的监控报警系统,但是你不花一些时间,是绝对不可能很好地配置它的。除非你只需要监控主机的alive等简单的情况(例如ping),否则请放弃幻想,以极大的耐心去研究它吧。

阅读更多

[原创] Nagios被动监测的实现-NSCA

 

本文环境:RHEL 5.3 x64

 

 

被动监测,就是指由被监测的服务器主动上传数据到Nagios监控系统中。这种监测方式提高了实时性(出现问题的时候,被监测的服务器可以及时上传数据通知Nagios,从而使管理员可以尽快作出处理,而不用像主动监测中一样,非要等到下一个监测周期才能获知被监测服务器的状态)。NSCA就是可以实现Nagios被动监测的一个程序。

阅读更多

VMware下新添加一块磁盘后:Disk /dev/sdb doesn't contain a valid partition table

在VMware管理界面中为一台Linux虚拟机新添加一块虚拟磁盘后,在系统中查看:

fdisk -l

然后将其格式化为ext3:

mkfs.ext3 /dev/sdb

然后挂载到某个目录下,例如 /mnt/disk2/ :

阅读更多

[原创]Nagios安装、配置、问题记录(1)

 

 

 

本文描述了我在使用Nagios的过程中遇到的一些问题、解决办法以及总结的注意事项。文章很长,请使用Ctrl+F定位到你需要的部分。

Nagios是一套强大的监控报警系统,但是你不花一些时间,是绝对不可能很好地配置它的。除非你只需要监控主机的alive等简单的情况(例如ping),否则请放弃幻想,以极大的耐心去研究它吧。

 

(1)默认安装情况下,Nagios的主配置文件为:/usr/local/nagios/etc/nagios.cfg

打开这个文件,可以清楚地看到它指定了其他的配置文件:

阅读更多

[原创] 一些VC之GUI开发问题总结

下面是一些Visual C++ UI开发中遇到的问题的总结,专门记在此文中,以便将来查询。

由于文章较长,请用Ctrl+F查询关键字来定位到你需要的内容。

 

(1)程序运行时提示 VERIFY(strDocName.LoadString(AFX_IDS_UNTITLED)) 错误

在一个基于Xtreme Toolkit的Visual C++ SDI工程中,为了创建Ribbon风格的界面,添加了一堆代码,然后编译,无问题。再运行,程序根本运行不起来,错误提示类似于:

Error Locating Toolkit Resources.

Make sure you have included the resources to your project's .rc2 file.

Add #include <XTToolkitPro.rc> to your project .rc2 file

阅读更多