导航:首页 > 源码编译 > 迭代反投影算法

迭代反投影算法

发布时间:2022-06-16 08:20:19

㈠ 年北京坐标系与西安坐标系的转换方法

在矿业权实地核查准备工作阶段,收集到的地质、测绘等相关资料、图件和矿业权登记数据中,所涉及的地理数据可能是不同大地坐标系下的坐标数据。从实际情况来看,矿业权拐点坐标大多采用的是1954年北京坐标系,矿区已有的测量控制点和测量资料多数采用的也是1954年北京坐标系。本次矿业权实地核查测量工作采用的是1980西安坐标系,在实地测量和数据整理中涉及1954年北京坐标系与1980西安坐标系的转换。下面简要介绍二者之间转换的理论与方法。

(一)高斯投影正算和反算

将大地坐标换算为平面直角坐标,叫做高斯投影正算,是在同一椭球中进行,不存在误差。其常用量定义和公式如下:

a为椭球长半轴

b为椭球短半轴

f为椭球扁率

e为第一偏心率

e'为第二偏心率

全国矿业权实地核查技术方法指南研究

B为纬度,单位为弧度

全国矿业权实地核查技术方法指南研究

M为子午圈曲率半径

N为卯酉圈曲率半径

子午线弧长X

设有子午线上两点p1和p2,p1在赤道上,p2的纬度为B,p1、p2间的子午线弧长X计算公式:

全国矿业权实地核查技术方法指南研究

例如,1980西安坐标系a=6378140,e2=0.006694385,A'=1.005052506,B'=0.002531556209,C'=2.656901555E-06,D'=3.470075599E-09,E'=4.916542167E-12,F '=7.263137253E-15,G'=1.074009912E-17以B=30°弧度值0.5235987756为例,在Y=0时算得X=3320114.946。

当Y≠0,l≠0时则需要采用下列积分和逐次趋近的方法。

(1)高斯正算公式(利用点的经纬度计算XY坐标)

全国矿业权实地核查技术方法指南研究

(2)高斯反算公式(利用点的XY坐标计算经纬度)

全国矿业权实地核查技术方法指南研究

(3)底点纬度Bf迭代公式

全国矿业权实地核查技术方法指南研究

直到Bi-1-Bi小于某一个指定数值,即可停止迭代。

式中

全国矿业权实地核查技术方法指南研究

国家测绘局经过改进,将7个系数改为5个算出各椭球的值,采用公式如下:

(1)高斯投影正算(B,L→x,y)

全国矿业权实地核查技术方法指南研究

式中:X0=C0B-cosB(C1sinB+C2sin2B+C2sin5B+C4sin7B)

m0=lcosB

l=L-中央子午线经度值(弧度)

L,B为该点的经纬度值。

全国矿业权实地核查技术方法指南研究

式中:t=tanB,η2=e'2cos2B,

C,C0,C1,C2,C3,C4,e2为椭球常数

(2)高斯投影反算(x,y→B,L)

全国矿业权实地核查技术方法指南研究

式中:t=tanBf,η2=e'2cos2Bf

,K1K2,K3,K4为椭球常数。

各坐标系椭球常数如表4-1。

表4-1 各大地坐标系椭球常数

国家测绘局采用的公式编程更加容易,高斯投影的正算、反算因为是在同一椭球下进行,公式是严密的,不存在误差,电算操作非常方便。现在网上很多软件有这种功能。度、分、秒输入使用小数形式,小数点前面是度,小数点后前两位为分,后两位为秒,再后面为秒的十进制小数。如25.23451124其值为25°23′45.1124″,正反算已经成了非常简单的事。高斯正算、反算必须考虑到椭球参数,椭球不同结果是不同的。必须考虑到中央子午线位置。因为各带中都有重复点,本次实地核查要求使用3度带,所有Y坐标必须带有3°带的带号,不允许使用独立坐标系或假定坐标系。

(二)参心坐标与空间直角坐标的关系

空间直角坐标X、Y、Z与大地坐标B、L、H间的关系表示如下:

全国矿业权实地核查技术方法指南研究

大地坐标B、L、H 与空间直角坐标X、Y、Z间的关系表示如下:

全国矿业权实地核查技术方法指南研究

式中

在转换中对于不知道椭球高的控制点可将控制点的大地高置为0,放在椭球面上计算,三维就变成二维,其效果更好。

(三)坐标系统转换

1954年北京坐标系与1980西安坐标系的转换通常有两种方法:四参数转换法和七参数转换法。

1.四参数转换法

所谓四参数转换是两个平移参数,一个旋转参数,一个尺度比。不考虑什么椭球,在小范围内按平面坐标直接平移、旋转、缩放。最少条件是两个公共点,多公共点时可以使用最小二乘法,删除残差大的点。这在区域面积小的情况下是可以的,一般不宜超过40平方千米。四参数转换模型如下:

x2=Δx+x1(1+m)cosa-y(1+m)sina

y2=Δx+x1(1+m)sina-y(1+m)cosa

2.七参数转换法

该方法适用于椭球间的坐标转换。其实质是原椭球空间直角坐标(X1,Y1,Z1)与新椭球空间直角坐标(X2,Y2,Z2)间的转换。椭球间的坐标转换至少需要3个公共点,解算七参数。转换公式采用的是布尔莎公式,法方程的解算采用高斯消元法。高斯消元法,是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。高斯消元法可以用在电脑中来解决数千条等式及未知数。迭代法较消元法的残差大。

椭球间的坐标转换适用基于椭球的参心(地心)坐标系间的转换,而不适用于基于平面的独立坐标系间以及独立坐标系和参心(地心)坐标系间的转换。基于椭球的坐标转换中(七参数),椭球→椭球的转换实际上是在空间直角坐标系中完成的。完整的变换过程如下(以“平面→平面”为例):(x1,y1,H1)→(B1,L1,H1)→(X1,Y1,Z1)→(X2,Y2,Z2)→(B2,L2,H2)→(x2,y2,H2)。首先把直角坐标系下的直角坐标,原公共点中的1954年北京坐标转换成2000国家大地经纬度坐标,再转换为1954年北京坐标系的参心坐标,公共点的1980西安坐标做同样转换。利用两个椭球的参心(地心)坐标求得转换参数,利用该参数直接将1954年北京坐标系下的坐标转换成1980西安坐标系下的坐标。在上述过程中,高程H1、H2是大地高(椭球高)。大地高=正常高+测区高程异常。如果不需要转换高程的话,可以将高程和高程异常全部置为0。不可将1954年北京坐标系坐标所带的正常高直接代入。

七参数的转换模型如下:

(1)七参数转换模型

全国矿业权实地核查技术方法指南研究

式中:ΔB,ΔL为同一点位在两个坐标系下的纬度差、经度差(弧度);

a,Δf为椭球长半轴差(米)、扁率差(无量纲);

X,ΔY,ΔZ为平移参数(米);

εx,εy,εz为旋转参数(弧度);

m为尺度参数(无量纲)。

最少3个公共点可以解求出七个参数。

(2)三维七参数转换模型

全国矿业权实地核查技术方法指南研究

全国矿业权实地核查技术方法指南研究

式中:ΔB,ΔL,ΔH为同一点位在两个坐标系下的纬度差(弧度)、经度差(弧度)、大地高差(米);

ρ为一个弧度的秒值,180×3600/π弧度/秒;

a为椭球长半轴差(米);

f为扁率差(无量纲);

X,ΔY,ΔZ为平移参数(米);

εx,εy,εz为旋转参数(弧度);

m为尺度参数(无量纲)。

最少3个公共点可以解求出七个参数。

七参数适用于整个测区的转换,面积小于2000平方千米的可以一次转换完成,面积大的可以分区转换,各分区之间应选公共点,以保证数据的接边精度。关于残差,国家规定以1∶2000图为例,残差为图上0.1毫米即实地20厘米,超过3倍中误差的点删除。为了保证矿业权矿界拐点转化的精度,本次矿业权实地核查规定残差超过实地0.1米一般不宜使用,实际上比国家规定的精度严,相当于国家规定的1/6。

(四)利用坐标转换软件进行坐标转换

以上介绍了1954年北京坐标系和1980西安坐标系转换的理论,在实际转换时可以采用相关的软件来完成。目前,市场上有多种坐标转换软件可供选择。在选择软件时,应注意部分软件转换的精度可能达不到本次矿业权实地核查的要求。下面以经天测绘技术公司开发的测量计算工具包软件V4.05为例,介绍坐标转换方法。

该软件界面如图4-3。该软件可以进行高斯正算、高斯反算、坐标换带、椭球间的转换,可以批量导入,可以保存数据、保存公共点,包括了坐标转换所需的相关计算功能。另外,该软件还能实现2000国家大地坐标系与1954年北京坐标系、1980西安坐标系、WGS-84坐标系以及独立坐标系的转换。

图4-3 经天测绘技术公司开发的测量计算工具包软件界面

坐标系统变换,可以采用平面坐标转换中的多公共点相似变换和椭球坐标转换。小面积可以采用多公共点相似变换。限制在400平方千米左右,不超过1 幅1∶50000图。它与中央子午线无关、高程需要置为0,计算参数的输入文件为文本文件,格式为:

点号,原X 坐标,原Y坐标,新X 坐标,新Y坐标

需要转换的输入文件格式为:

点号,原X 坐标,原Y坐标

参数计算点数不超过30个,文件可以导入,公共点可以保存,参数也可以保存。转换坐标可以导入,转换后的坐标可以保存。需要注意的是,转换坐标的位数与计算参数的坐标位数应一致。计算参数不使用带号,转换后坐标也没有带号。图4-4中的算例X舍去前4位,Y舍去前3位。

图4-4 多公共点平面相似变换窗口

面积较大的测区应使用7参数转换。在椭球间坐标转换开关下,有平面-平面、大地-平面、平面-大地、大地-大地4个子开关。对于采矿权,可使用平面-平面;对于探矿权,使用大地-大地,小数后位数较多,根据需要可将尾部删去。输入文件的格式与上述相同,需要输入中央子午线,Y坐标不加带号,在不知道1954年北京坐标、1980西安坐标的椭球高的情况下,可在高程栏输入0,测区高程异常输入0,探矿权是大地坐标格式,小数点前3位为°,后2位为′,3、4位为″,后面为十进制的秒的小数,如108°33′15″8563,输入108.33158563,由于控制点坐标是X、Y格式,可用高斯投影反算将控制点变为大地坐标格式。或是使用高斯坐标正算把探矿权登记坐标转换为直角坐标,计算完成后再使用高斯坐标反算将1980西安坐标转换为2000国家坐标。图4-5表示一个县的采矿权转换过程,Y坐标略去了前3位数。

图4-5 椭球间平面坐标转换窗口

需要注意的是,该软件没有采用软件狗加密,但需要注册才能用,采用机器码注册,一个软件只能装一台计算机专用。

㈡ lbp是什么意思

lbp是Local Binary Patterns的缩写,中文名字叫做“线性反投影算法”,指局部二值模式,最初功能为辅助图像局部对比度,并不是一个完整的特征描述子。

lbp线性反投影算法又称累加法,是最早使用的一种简单成像算法。它将通过某点的所有投影射线进行累加,再反向估算出该点的密度值,从成像观点分析,它是不完全的雷登逆变换。

lbp算法计算步骤:

1、基于均质灵敏度信息,利用线性反投影算法获得初始图像。

2、利用已获得的介电常数分布,求解正问题,得到一组仿真电容值,将该值与测量电容值进行比较,若误差已达到满意值,算法结束,否则进行下步。

3、修正灵敏度信息。

4、根据上步已经修正后的灵敏度信息,利用测量电压重新进行线性反投影;返回第二步,并进行循环迭代,直到获得满意的结果为止,迭代结束。

㈢ 迭代法的算法

迭代是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法(Iterative Method)。
一般可以做如下定义:对于给定的线性方程组(这里的x、B、f同为矩阵,任意线性方程组都可以变换成此形式),用公式 (代表迭代k次得到的x,初始时k=0)逐步带入求近似解的方法称为迭代法(或称一阶定常迭代法)。如果存在,记为x*,称此迭代法收敛。显然x*就是此方程组的解,否则称为迭代法发散。
跟迭代法相对应的是直接法(或者称为一次解法),即一次性的快速解决问题,例如通过开方解决方程x +3= 4。一般如果可能,直接解法总是优先考虑的。但当遇到复杂问题时,特别是在未知量很多,方程为非线性时,我们无法找到直接解法(例如五次以及更高次的代数方程没有解析解,参见阿贝耳定理),这时候或许可以通过迭代法寻求方程(组)的近似解。
最常见的迭代法是牛顿法。其他还包括最速下降法、共轭迭代法、变尺度迭代法、最小二乘法、线性规划、非线性规划、单纯型法、惩罚函数法、斜率投影法、遗传算法、模拟退火等等。
利用迭代算法解决问题,需要做好以下三个方面的工作: 例 1 :一个饲养场引进一只刚出生的新品种兔子,这种兔子从出生的下一个月开始,每月新生一只兔子,新生的兔子也如此繁殖。如果所有的兔子都不死去,问到第 12 个月时,该饲养场共有兔子多少只?
分析:这是一个典型的递推问题。我们不妨假设第 1 个月时兔子的只数为 u 1 ,第 2 个月时兔子的只数为 u 2 ,第 3 个月时兔子的只数为 u 3 ,……根据题意,“这种兔子从出生的下一个月开始,每月新生一只兔子”,则有
u 1 = 1 , u 2 = u 1 + u 1 × 1 = 2 , u 3 = u 2 + u 2 × 1 = 4 ,……
根据这个规律,可以归纳出下面的递推公式:
u n = u(n - 1)× 2 (n ≥ 2)
对应 u n 和 u(n - 1),定义两个迭代变量 y 和 x ,可将上面的递推公式转换成如下迭代关系:
y=x*2
x=y
让计算机对这个迭代关系重复执行 11 次,就可以算出第 12 个月时的兔子数。参考程序如下:
cls
x=1
for i=2 to 12
y=x*2
x=y
next i
print y
end
例 2 :阿米巴用简单分裂的方式繁殖,它每分裂一次要用 3 分钟。将若干个阿米巴放在一个盛满营养参液的容器内, 45 分钟后容器内充满了阿米巴。已知容器最多可以装阿米巴 220,220个。试问,开始的时候往容器内放了多少个阿米巴?请编程序算出。
分析:根据题意,阿米巴每 3 分钟分裂一次,那么从开始的时候将阿米巴放入容器里面,到 45 分钟后充满容器,需要分裂 45/3=15 次。而“容器最多可以装阿米巴2^ 20 个”,即阿米巴分裂 15 次以后得到的个数是 2^20。题目要求我们计算分裂之前的阿米巴数,不妨使用倒推的方法,从第 15 次分裂之后的 2^20 个,倒推出第 15 次分裂之前(即第 14 次分裂之后)的个数,再进一步倒推出第 13 次分裂之后、第 12 次分裂之后、……第 1 次分裂之前的个数。
设第 1 次分裂之前的个数为 x 0 、第 1 次分裂之后的个数为 x 1 、第 2 次分裂之后的个数为 x 2 、……第 15 次分裂之后的个数为 x 15 ,则有
x 14 =x 15 /2 、 x 13 =x 14 /2 、…… x n-1 =x n /2 (n ≥ 1)
因为第 15 次分裂之后的个数 x 15 是已知的,如果定义迭代变量为 x ,则可以将上面的倒推公式转换成如下的迭代公式:
x=x/2 (x 的初值为第 15 次分裂之后的个数 2^20)
让这个迭代公式重复执行 15 次,就可以倒推出第 1 次分裂之前的阿米巴个数。因为所需的迭代次数是个确定的值,我们可以使用一个固定次数的循环来实现对迭代过程的控制。参考程序如下:
cls
x=2^20
for i=1 to 15
x=x/2
next i
print x
end
ps:java中幂的算法是Math.pow(2,20);返回double,稍微注意一下
例 3 :验证谷角猜想。日本数学家谷角静夫在研究自然数时发现了一个奇怪现象:对于任意一个自然数 n ,若 n 为偶数,则将其除以 2 ;若 n 为奇数,则将其乘以 3 ,然后再加 1。如此经过有限次运算后,总可以得到自然数 1。人们把谷角静夫的这一发现叫做“谷角猜想”。
要求:编写一个程序,由键盘输入一个自然数 n ,把 n 经过有限次运算后,最终变成自然数 1 的全过程打印出来。
分析:定义迭代变量为 n ,按照谷角猜想的内容,可以得到两种情况下的迭代关系式:当 n 为偶数时, n=n/2 ;当 n 为奇数时, n=n*3+1。用 QBASIC 语言把它描述出来就是:
if n 为偶数 then
n=n/2
else
n=n*3+1
end if
这就是需要计算机重复执行的迭代过程。这个迭代过程需要重复执行多少次,才能使迭代变量 n 最终变成自然数 1 ,这是我们无法计算出来的。因此,还需进一步确定用来结束迭代过程的条件。仔细分析题目要求,不难看出,对任意给定的一个自然数 n ,只要经过有限次运算后,能够得到自然数 1 ,就已经完成了验证工作。因此,用来结束迭代过程的条件可以定义为:n=1。参考程序如下:
cls
input Please input n=;n
do until n=1
if n mod 2=0 then
rem 如果 n 为偶数,则调用迭代公式 n=n/2
n=n/2
print —;n;
else
n=n*3+1
print —;n;
end if
loop
end
迭代法开平方:
#include<stdio.h>
#include<math.h>
void main()
{
double a,x0,x1;
printf(Input a: );
scanf(%lf,&a);//因为a是double型数据,所以要用%lf,而不是%f
if(a<0)
printf(Error! );
else
{
x0=a/2;
x1=(x0+a/x0)/2;
do
{
x0=x1;
x1=(x0+a/x0)/2;
}while(fabs(x0-x1)>=1e-6);
}
printf(Result: );
printf(sqrt(%g)=%g ,a,x1);
}
求平方根的迭代公式:x1=1/2*(x0+a/x0)。
算法:1.先自定一个初值x0,作为a的平方根值,在我们的程序中取a/2作为a的初值;利用迭代公式求出一个x1。此值与真正的a的平方根值相比,误差很大。
⒉把新求得的x1代入x0中,准备用此新的x0再去求出一个新的x1.
⒊利用迭代公式再求出一个新的x1的值,也就是用新的x0又求出一个新的平方根值x1,此值将更趋近于真正的平方根值。
⒋比较前后两次求得的平方根值x0和x1,如果它们的差值小于我们指定的值,即达到我们要求的精度,则认为x1就是a的平方根值,去执行步骤5;否则执行步骤2,即循环进行迭代。
迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行:
⑴ 选一个方程的近似根,赋给变量x0;
⑵ 将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;
⑶ 当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤⑵的计算。
若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。上述算法用C程序的形式表示为:
【算法】迭代法求方程的根
{ x0=初始近似根;
do {
x1=x0;
x0=g(x1); /*按特定的方程计算新的近似根*/
} while (fabs(x0-x1)>Epsilon);
printf(“方程的近似根是%f ”,x0);
}
迭代算法也常用于求方程组的根,令
X=(x0,x1,…,xn-1)
设方程组为:
xi=gi(X) (I=0,1,…,n-1)
则求方程组根的迭代算法可描述如下:
【算法】迭代法求方程组的根
{ for (i=0;i
x=初始近似根;
do {
for (i=0;i
y=x;
for (i=0;i
x=gi(X);
for (delta=0.0,i=0;i
if (fabs(y-x)>delta) delta=fabs(y-x);
} while (delta>Epsilon);
for (i=0;i
printf(“变量x[%d]的近似根是 %f”,I,x);
printf(“ ”);
}
具体使用迭代法求根时应注意以下两种可能发生的情况:
⑴ 如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制;
⑵ 方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败。
递归
递归是设计和描述算法的一种有力的工具,由于它在复杂算法的描述中被经常采用,为此在进一步介绍其他算法设计方法之前先讨论它。
能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模N=1时,能直接得解。
【问题】 编写计算斐波那契(Fibonacci)数列的第n项函数fib(n)。
斐波那契数列为:0、1、1、2、3、……,即:
fib(0)=0;
fib⑴=1;
fib(n)=fib(n-1)+fib(n-2) (当n>1时)。
写成递归函数有:
int fib(int n)
{ if (n==0) return 0;
if (n==1) return 1;
if (n>1) return fib(n-1)+fib(n-2);
}
递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解。例如上例中,求解fib(n),把它推到求解fib(n-1)和fib(n-2)。也就是说,为计算fib(n),必须先计算fib(n-1)和fib(n- 2),而计算fib(n-1)和fib(n-2),又必须先计算fib(n-3)和fib(n-4)。依次类推,直至计算fib⑴和fib(0),分别能立即得到结果1和0。在递推阶段,必须要有终止递归的情况。例如在函数fib中,当n为1和0的情况。
在回归阶段,当获得最简单情况的解后,逐级返回,依次得到稍复杂问题的解,例如得到fib⑴和fib(0)后,返回得到fib⑵的结果,……,在得到了fib(n-1)和fib(n-2)的结果后,返回得到fib(n)的结果。
在编写递归函数时要注意,函数中的局部变量和参数知识局限于当前调用层,当递推进入“简单问题”层时,原来层次上的参数和局部变量便被隐蔽起来。在一系列“简单问题”层,它们各有自己的参数和局部变量。
由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低。当某个递归算法能较方便地转换成递推算法时,通常按递推算法编写程序。例如上例计算斐波那契数列的第n项的函数fib(n)应采用递推算法,即从斐波那契数列的前两项出发,逐次由前两项计算出下一项,直至计算出要求的第n项。
【问题】 组合问题
问题描述:找出从自然数1、2、……、n中任取r个数的所有组合。例如n=5,r=3的所有组合为:⑴5、4、3 ⑵5、4、2 ⑶5、4、1
⑷5、3、2 ⑸5、3、1 ⑹5、2、1
⑺4、3、2 ⑻4、3、1 ⑼4、2、1
⑽3、2、1
分析所列的10个组合,可以采用这样的递归思想来考虑求组合函数的算法。设函数为void comb(int m,int k)为找出从自然数1、2、……、m中任取k个数的所有组合。当组合的第一个数字选定时,其后的数字是从余下的m-1个数中取k-1数的组合。这就将求m 个数中取k个数的组合问题转化成求m-1个数中取k-1个数的组合问题。设函数引入工作数组a[ ]存放求出的组合的数字,约定函数将确定的k个数字组合的第一个数字放在a[k]中,当一个组合求出后,才将a[ ]中的一个组合输出。第一个数可以是m、m-1、……、k,函数将确定组合的第一个数字放入数组后,有两种可能的选择,因还未去顶组合的其余元素,继续递归去确定;或因已确定了组合的全部元素,输出这个组合。细节见以下程序中的函数comb。
【程序】
# include
# define MAXN 100
int a[MAXN];
void comb(int m,int k)
{ int i,j;
for (i=m;i>=k;i--)
{ a[k]=i;
if (k>1)
comb(i-1,k-1);
else
{ for (j=a[0];j>0;j--)
printf(“%4d”,a[j]);
printf(“ ”);
}
}
}
void main()
{ a[0]=3;
comb(5,3);
}
【问题】 背包问题
问题描述:有不同价值、不同重量的物品n件,求从这n件物品中选取一部分物品的选择方案,使选中物品的总重量不超过指定的限制重量,但选中物品的价值之和最大。
设n 件物品的重量分别为w0、w1、…、wn-1,物品的价值分别为v0、v1、…、vn-1。采用递归寻找物品的选择方案。设前面已有了多种选择的方案,并保留了其中总价值最大的方案于数组option[ ],该方案的总价值存于变量maxv。当前正在考察新方案,其物品选择情况保存于数组cop[ ]。假定当前方案已考虑了前i-1件物品,现在要考虑第i件物品;当前方案已包含的物品的重量之和为tw;至此,若其余物品都选择是可能的话,本方案能达到的总价值的期望值为tv。算法引入tv是当一旦当前方案的总价值的期望值也小于前面方案的总价值maxv时,继续考察当前方案变成无意义的工作,应终止当前方案,立即去考察下一个方案。因为当方案的总价值不比maxv大时,该方案不会被再考察,这同时保证函数后找到的方案一定会比前面的方案更好。
对于第i件物品的选择考虑有两种可能:
⑴ 考虑物品i被选择,这种可能性仅当包含它不会超过方案总重量限制时才是可行的。选中后,继续递归去考虑其余物品的选择。
⑵ 考虑物品i不被选择,这种可能性仅当不包含物品i也有可能会找到价值更大的方案的情况。
按以上思想写出递归算法如下:
try(物品i,当前选择已达到的重量和,本方案可能达到的总价值tv)
{ /*考虑物品i包含在当前方案中的可能性*/
if(包含物品i是可以接受的)
{ 将物品i包含在当前方案中;
if (i
try(i+1,tw+物品i的重量,tv);
else
/*又一个完整方案,因为它比前面的方案好,以它作为最佳方案*/
以当前方案作为临时最佳方案保存;
恢复物品i不包含状态;
}
/*考虑物品i不包含在当前方案中的可能性*/
if (不包含物品i仅是可男考虑的)
if (i
try(i+1,tw,tv-物品i的价值);
else
/*又一个完整方案,因它比前面的方案好,以它作为最佳方案*/
以当前方案作为临时最佳方案保存;
}
为了理解上述算法,特举以下实例。设有4件物品,它们的重量和价值见表:
物品 0 1 2 3
重量 5 3 2 1
价值 4 4 3 1
并设限制重量为7。则按以上算法,下图表示找解过程。由图知,一旦找到一个解,算法就进一步找更好的佳。如能判定某个查找分支不会找到更好的解,算法不会在该分支继续查找,而是立即终止该分支,并去考察下一个分支。
按上述算法编写函数和程序如下:
【程序】
# include
# define N 100
double limitW,totV,maxV;
int option[N],cop[N];
struct { double weight;
double value;
}a[N];
int n;
void find(int i,double tw,double tv)
{ int k;
/*考虑物品i包含在当前方案中的可能性*/
if (tw+a.weight<=limitW)
{ cop=1;
if (i
else
{ for (k=0;k
option[k]=cop[k];
maxv=tv;
}
cop=0;
}
/*考虑物品i不包含在当前方案中的可能性*/
if (tv-a.value>maxV)
if (i
else
{ for (k=0;k
option[k]=cop[k];
maxv=tv-a.value;
}
}
void main()
{ int k;
double w,v;
printf(“输入物品种数 ”);
scanf((“%d”,&n);
printf(“输入各物品的重量和价值 ”);
for (totv=0.0,k=0;k
{ scanf(“%1f%1f”,&w,&v);
a[k].weight=w;
a[k].value=v;
totV+=V;
}
printf(“输入限制重量 ”);
scanf(“%1f”,&limitV);
maxv=0.0;
for (k=0;k find(0,0.0,totV);
for (k=0;k
if (option[k]) printf(“%4d”,k+1);
printf(“ 总价值为%.2f ”,maxv);
}
作为对比,下面以同样的解题思想,考虑非递归的程序解。为了提高找解速度,程序不是简单地逐一生成所有候选解,而是从每个物品对候选解的影响来形成值得进一步考虑的候选解,一个候选解是通过依次考察每个物品形成的。对物品i的考察有这样几种情况:当该物品被包含在候选解中依旧满足解的总重量的限制,该物品被包含在候选解中是应该继续考虑的;反之,该物品不应该包括在当前正在形成的候选解中。同样地,仅当物品不被包括在候选解中,还是有可能找到比目前临时最佳解更好的候选解时,才去考虑该物品不被包括在候选解中;反之,该物品不包括在当前候选解中的方案也不应继续考虑。对于任一值得继续考虑的方案,程序就去进一步考虑下一个物品。
【程序】
# include
# define N 100
double limitW;
int cop[N];
struct ele { double weight;
double value;
} a[N];
int k,n;
struct { int ;
double tw;
double tv;
}twv[N];
void next(int i,double tw,double tv)
{ twv.=1;
twv tw=tw;
twv tv=tv;
}
double find(struct ele *a,int n)
{ int i,k,f;
double maxv,tw,tv,totv;
maxv=0;
for (totv=0.0,k=0;k
totv+=a[k].value;
next(0,0.0,totv);
i=0;
While (i>=0)
{ f=twv.;
tw=twv tw;
tv=twv tv;
switch(f)
{ case 1: twv.++;
if (tw+a.weight<=limitW)
if (i
{ next(i+1,tw+a.weight,tv);
i++;
}
else
{ maxv=tv;
for (k=0;k
cop[k]=twv[k].!=0;
}
break;
case 0: i--;
break;
default: twv.=0;
if (tv-a.value>maxv)
if (i
{ next(i+1,tw,tv-a.value);
i++;
}
else
{ maxv=tv-a.value;
for (k=0;k
cop[k]=twv[k].!=0;
}
break;
}
}
return maxv;
}
void main()
{ double maxv;
printf(“输入物品种数 ”);
scanf((“%d”,&n);
printf(“输入限制重量 ”);
scanf(“%1f”,&limitW);
printf(“输入各物品的重量和价值 ”);
for (k=0;k
scanf(“%1f%1f”,&a[k].weight,&a[k].value);
maxv=find(a,n);
printf(“ 选中的物品为 ”);
for (k=0;k
if (option[k]) printf(“%4d”,k+1);
printf(“ 总价值为%.2f ”,maxv);
}

㈣ lms算法是什么

LMS(Least mean square)算法,即最小均方误差算法。

lms算法由美国斯坦福大学的B Widrow和M E Hoff于1960年在研究自适应理论时提出,由于其容易实现而很快得到了广泛应用,成为自适应滤波的标准算法。在滤波器优化设计中,采用某种最小代价函数或者某个性能指标来衡量滤波器的好坏,而最常用的指标就是均方误差,也把这种衡量滤波器好坏的方法叫做均方误差准则。

lms算法的特点

根据小均方误差准则以及均方误差曲面,自然的我们会想到沿每一时刻均方误差 的陡下降在权向量面上的投影方向更新,也就是通过目标函数的反梯度向量来反 复迭代更新。由于均方误差性能曲面只有一个唯一的极小值,只要收敛步长选择恰当, 不管初始权向量在哪,后都可以收敛到误差曲面的小点,或者是在它的一个邻域内。

㈤ 谁能帮忙说下CT原理和反投影重建算法是神马书上内容太诡异了,希望用自己的经验总结简单一点说明。

把采集到的图象用仿射变换配准,
为了加快运行速度可以先进行展开。
配准这一步可以在空间域,
也可在频率域进行
然后按配准结果将这些图象插合成一幅图象,
再用最小二乘法求解线性方程组即可。

注意,
最好使用超松弛迭代法求解,
但是遇到0的时候结果可能有较大出入,
解决办法中的一种是图象矩阵所有元素全部加上1,
计算完成后再全部减去1,
然后再512级灰度量化

这是最简单的重构方法,
没有考虑图象的模糊效应。

此外,如果有矩阵维度问题,
有两种解决办法,
一是将插合图象变成正方形图象,
一是将各插合行,列按权值累加,
反向映射,
后一种速度快些,
也不必直接求解方程,
但是不具有通用性。

㈥ camshift算法可以和什么结合

camshift利用目标的颜色直方图模型将图像转换为颜色概率分布图,初始化一个搜索窗的大小和位置,并根据上一帧得到的结果自适应调整搜索窗口的位置和大小,从而定位出当前图像中目标的中心位置。

分为三个部分:
1--色彩投影图(反向投影):
(1).RGB颜色空间对光照亮度变化较为敏感,为了减少此变化对跟踪效果的影响,首先将图像从RGB空间转换到HSV空间。(2).然后对其中的H分量作直方图,在直方图中代表了不同H分量值出现的概率或者像素个数,就是说可以查找出H分量大小为h的概率或者像素个数,即得到了颜色概率查找表。(3).将图像中每个像素的值用其颜色出现的概率对替换,就得到了颜色概率分布图。这个过程就叫反向投影,颜色概率分布图是一个灰度图像。

2--meanshift
meanshift算法是一种密度函数梯度估计的非参数方法,通过迭代寻优找到概率分布的极值来定位目标。
算法过程为:
(1).在颜色概率分布图中选取搜索窗W
(2).计算零阶距:

计算一阶距:

计算搜索窗的质心:

(3).调整搜索窗大小
宽度为;长度为1.2s;
(4).移动搜索窗的中心到质心,如果移动距离大于预设的固定阈值,则重复2)3)4),直到搜索窗的中心与质心间的移动距离小于预设的固定阈值,或者循环运算的次数达到某一最大值,停止计算。关于meanshift的收敛性证明可以google相关文献。

3--camshift
将meanshift算法扩展到连续图像序列,就是camshift算法。它将的所有帧做meanshift运算,并将上一帧的结果,即搜索窗的大小和中心,作为下一帧meanshift算法搜索窗的初始值。如此迭代下去,就可以实现对目标的跟踪。
算法过程为:
(1).初始化搜索窗
(2).计算搜索窗的颜色概率分布(反向投影)
(3).运行meanshift算法,获得搜索窗新的大小和位置。
(4).在下一帧图像中用(3)中的值重新初始化搜索窗的大小和位置,再跳转到(2)继续进行。

㈦ 地震波层析技术

地学层析成像技术(Geotomography,简称GT)是地球物理学与层析成像技术相结合的产物,它是利用地震波或电磁波在地下介质中的传播特性,通过反算法来重建地下介质的分布图像。目前,GT技术已广泛用于地球物理学的多个研究领域,从地球科学研究中地球内部精细结构的探测,石油勘探开发中岩性圈闭的寻找,金属矿勘探中深部盲矿的勘查,到工程、灾害和环境地质中查明地下构造、裂隙等的分布规律,它已发展成为研究地下精细结构的一种有效手段。

6.3.2.1 基本原理

层析成像技术是根据对物体外部获取的某种物理量的测定值(或称投影)进行处理以重建物体内部图像的一种技术。所谓层析成像,是对物体进行逐层剖析成像,相当于把物体切成片。用波去穿透物体,让波带出关于物体内部的信息,通过对这些信息的处理来重建物体的内部图像。

从物体内部图像重建的角度看,一物体切片的图像是两个空间变量(x,y)的函数,称为图像函数,记为f(x,y)。用不同方向的入射波穿过物体,观测到的波场信息至少是入射波方向θ和观测点位置ρ两个变量的函数,称为投影函数,可记为u(θ,ρ)。1917年奥地利数学家Radon证明,已知所有入射角的投影函数u(θ,ρ)可以恢复惟一的图像函数f(x,y),人们称之为Radon变换,它成为层析成像的理论基础。

从物理角度来看,各种波动(地震波、电磁波等)在时间和空间上都是连续的。当它们在介质中传播时,由于介质物性上的差异(如密度、速度、介电常数、电导率等)使得它们的传播速度的大小及方向发生变化,能量吸收也因介质而异。因此,当波穿过某一物体时,必定会把物体内部的物性参数的信息携带到物体外部来,只要在物体外部测得波穿过物体后的有关参数(即投影函数),通过适当的反演方法便可重建物体内部图像。

因此,从本质而言,层析成像属于反演问题,因为它是通过参数的观测结果来求解参数的空间分布。一般来说,层析成像方法适用于能以数据形式获得某种参数(例如地震波传播时间等)的条件,但入射波必须穿透物体并且参数的变化应该能测得出来。

图6.3.4 跨孔地震层析成像观测系统

6.3.2.2 数据采集

在地球物理层析成像中,一般都是将待成像的区域划分为许多单元组成的网格,单元被称为“像元”。假定每个像元为常数,它代表了图像函数f(x,y)。像元的大小取决于诸多因素,如震源和接收器的间距等。由发射源发射出的具有一定方向性的射束被称为“射线”,射线穿过成像区域到达接收点,接收器记录到变化了的信号。为了获得多方向的射线覆盖,数据采集常在物体的一侧布设线性发射源排列,而在另一侧沿平行发射源排列布设接收器排列。这实际上是跨孔排列(图6.3.4所示),它是数据采集方法中最典型的一种。

6.3.2.3 成像方法

地震层析成像方法大致可分为两种类型:一种是基于射线理论的图像重建技术,在数学上也就是由一个函数的线积分反求这个函数的问题,它可以化为相似的代数方程组。走时反演成像和振幅反演成像均属这种方法。当射线为直线时,这类方法比较成熟。在实际应用中,由于客观条件的限制,经常会遇到数据不全的问题。另外,当必须考虑射线弯曲的情况时,理论上还有不少困难。另一种是基于波动方程反演的散射(或衍射)层析成像方法,在数学上它属于解偏微分方程反问题,波场成像属此类方法。

走时反演成像方法是目前使用较为成熟的方法,主要包括反投影法(BPT)、代数重建法(ART)、联合迭代重建法(SIRT)、共轭梯度最小二乘法(CGLS)和正交分解最小二乘法(LSQR)等。在工程、环境调查中,通常在现场需要对数据进行处理和解释,故一般选用较为简单的成像方法。

6.3.2.4 在工程和环境调查中的应用

跨孔地震层析成像在岩溶勘察中的应用,是基于完整灰岩与岩溶(包括充填物)、溶蚀裂隙及上覆土层之间存在明显的弹性纵波波速差异。一般来说,完整石灰岩的弹性纵波速度大于4500 m/s,而溶蚀裂隙发育灰岩的弹性纵波波速则在2800~4500 m/s之间,岩溶充填物及上覆土层的弹性纵波波速小于2800 m/s。因此,在岩溶发育地区开展地震层析成像勘察具有良好的地球物理前提。

例如,在位于广州市雅岗与佛山南海市和顺之间的广合大桥,设计有4个主桥墩,32根冲孔灌注桩。该桥基岩为石炭纪灰岩,基岩面埋深约为19~36 m,上部覆盖层为第四纪冲淤积、残积淤泥、砂及粘土,基岩面起伏变化大,岩溶裂隙非常发育。在主桥墩施工中采用跨孔地震层析成像方法对4个主桥墩进行勘察。勘察要求查明主桥墩桩位及桩周基岩面埋深,岩溶裂隙发育及分布情况。勘察深度范围在岩面以上,-5~-50 m高程。要求分辨线性尺度1.0 m以上的溶洞及溶蚀裂隙发育带。

勘察中共布置了26个钻孔,可组合成46对跨孔地震层析成像剖面。跨孔距最大为16.02 m,最小为5.95 m。每对剖面测试范围为基岩面以上1/2跨孔距(且不小于5.0 m)至孔底,激发接收点距为1.0 m。震源主频高于500 Hz,传感器频响范围为5~4000 Hz,接收仪器频响为10~4000 Hz,采样间隔为31.25 μs。

对46对跨孔地震层析成像剖面走时数据进行处理、反演,得到了46对跨孔地震层析成像纵波速度色谱图。其中L26剖面跨孔地震层析成像(纵波)速度色谱图(如图6.3.5所示)。从图中可以看出,速度色谱图从上至下大致可以分为3个速度带。根据纵波速度与土层、溶洞、溶蚀裂隙发育及完整(或基本完整)灰岩的相关关系并结合两侧钻孔资料,可将L26剖面跨孔地震CT速度色谱图从上至下解释为3个地质单元:覆盖层、岩溶及溶蚀裂隙发育带(局部含完整岩块)、完整(或基本完整)灰岩(局部偶有小溶洞或溶蚀裂隙)。同理对其他45对CT剖面分别作了地质解释,推荐了各根桩的桩端持力层高程,同时指出了各根桩施工中可能碰到的不良地质体情况。

图6.3.5 大桥L26测线地震CT速度色谱图及地质解释剖面

㈧ 求一份详尽的基于迭代反投影算法的超分辨率重建的源代码

这个太高深了

阅读全文

与迭代反投影算法相关的资料

热点内容
现在还有什么手机好用的app 浏览:324
java字符处理函数 浏览:274
指纹用于应用加密什么意思 浏览:998
怎么取消苹果手机的appid密码 浏览:997
门禁系统录制卡怎么加密 浏览:753
ssm看源码哪本书好 浏览:933
linux查看网卡的命令 浏览:497
basic语言算法 浏览:13
怎么快捷删除无用文件夹 浏览:475
你家离学校源码用英语回答 浏览:504
电脑如何用服务器地址 浏览:652
php转化为二进制 浏览:738
程序员到国企感受 浏览:863
js二分搜索算法 浏览:658
文件夹的定义与原意 浏览:202
phpredis任务队列 浏览:463
文件夹的颜色代表什么 浏览:895
单片机模拟通信 浏览:931
pandas在哪里编译 浏览:918
安卓机怎么调清晰度 浏览:346