大地主题解算

大地主题解算
大地主题解算

大地主题解算

一、实验目的:

1.提高运用计算机语言编程开发的能力;

2.加深对大地主题解算计算公式及辅助参数的理解并掌握计算步骤;

3.通过编程语言实现大地主题解算。

二、工具:

Windows XP Mode 环境下的Microsoft Visual C++ 6.0

三、注意事项:

1.计算所需变量多,容易混淆;

2.正反算函数的编写;

3.函数调用;

4.弧度与角度之间的转化。

四、实验要求:

1.提交报告,实验总结,编写代码;

2.独立编程,调试运行;

3.上交成果:编写思想,编写过程,问题分析,源代码,计算结果;

五、编程过程实现:

1.对白塞尔法大地主题解算有一定的了解,并参考教材P148-P150;

2.由于参数较多,而在C语言环境下很多符号无法定义,需要符合要求的定义

符号替代书本上那些无法直接在C语言环境下定义的符号来达到实现实验的目的;

3.程序中采用弧度与度分秒之间转换的函数定义与调用,减轻一定的实验麻烦;

4.在C语言环境下,数学函数fabs代替abs起绝对值作用,atan代替arctan

起反函数作用;

5.程序中尤其注意弧度与角度之间转换,在C语言环境下电脑默认为弧度。

六、源程序代码:

#include

#include

double hudu(double,double,double); /*度分秒转换为弧度*/

double du(double); /*弧度转换为度*/

double fen(double); /*弧度转换为分*/

double miao(double); /*弧度转换为秒*/

#define PI 3.1415926

void main (void)

{

int k;

printf("请选择执行正算或者反算,若执行正算,请输入1;若执行反算,请输入2。\n");

scanf("%d",&k);

/*正算*/

if(k==1)

{

double bz,lz,az,S,bz2,lz2,az2,B1,L1,A1,B2,L2,A2,bx,by,lx,ly,ax,ay;

int bx2,by2,lx2,ly2,ax2,ay2;

double

e2,W1,sinu1,cosu1,sinA0,coto1,sin2o1,cos2o1,sin2o,cos2o,A,B,C,r,t,o0,o,g,si nu2,q;

/*以度分秒顺序输入数据*/

printf("请输入大地线起点纬度度分秒\n");

scanf("%lf%lf%lf",&bx,&by,&bz);

printf("请输入大地线起点经度度分秒\n");

scanf("%lf%lf%lf",&lx,&ly,&lz);

printf("请输入大地方位角度分秒\n");

scanf("%lf%lf%lf",&ax,&ay,&az);

printf("请输入大地线长度\n");

scanf("%lf",&S);

/*调用函数*/

B1=hudu(bx,by,bz);

L1=hudu(lx,ly,lz);

A1=hudu(ax,ay,az);

/*白塞尔大地主题解算*/

e2=0.006693421622966;

W1=sqrt(1-e2*sin(B1)*sin(B1));

sinu1=sin(B1)*(sqrt(1-e2))/W1;

cosu1=cos(B1)/W1;

sinA0=cosu1*sin(A1);

coto1=cosu1*cos(A1)/sinu1;

sin2o1=2*coto1/(coto1*coto1+1);

cos2o1=(coto1*coto1-1)/(coto1*coto1+1);

A=6356863.020+(10718.949-13.474*(1-sinA0*sinA0))*(1-sinA0*sinA0);

B=(5354.469-8.978*(1-sinA0*sinA0))*(1-sinA0*sinA0);

C=(2.238*(1-sinA0*sinA0))*(1-sinA0*sinA0)+0.006;

r=691.46768-(0.58143-0.00144*(1-sinA0*sinA0))*(1-sinA0*sinA0);

t=(0.2907-0.0010*(1-sinA0*sinA0))*(1-sinA0*sinA0);

o0=(S-(B+C*cos2o1)*sin2o1)/A;

sin2o=sin2o1*cos(2*o0)+cos2o1*sin(2*o0);

cos2o=cos2o1*cos(2*o0)-sin2o1*sin(2*o0);

o=o0+(B+5*C*cos2o)*sin2o/A;

g=(r*o+t*(sin2o-sin2o1))*sinA0;

/*求B2*/

sinu2=sinu1*cos(o)+cosu1*cos(A1)*sin(o);

B2=atan(sinu2/(sqrt(1-e2)*sqrt(1-sinu2*sinu2)));

/*求L2*/

q=atan(sin(A1)*sin(o)/(cosu1*cos(o)-sinu1*sin(o)*cos(A1)));

/*判断q*/

if(sin(A1)>0 && tan(q)>0)

q=fabs(q);

else if(sin(A1)>0 && tan(q)<0)

q=PI-fabs(q);

else if(sin(A1)<0 && tan(q)<0)

q=-fabs(q);

else

q=fabs(q)-PI;

L2=L1+q-g/3600/180*PI;

/*求A2*/

A2=atan(cosu1*sin(A1)/(cosu1*cos(o)*cos(A1)-sinu1*sin(o))); /*判断A2*/

if(sin(A1)<0 && tan(A2)>0)

A2=fabs(A2);

else if(sin(A1)<0 && tan(A2)<0)

A2=PI-fabs(A2);

else if(sin(A1)>0 && tan(A2)>0)

A2=PI+fabs(A2);

else

A2=2*PI-fabs(A2);

/*调用函数*/

bx2=(int)(du(B2));

by2=(int)(fen(B2));

bz2=miao(B2);

lx2=(int)(du(L2));

ly2=(int)(fen(L2));

lz2=miao(L2);

ax2=(int)(du(A2));

ay2=(int)(fen(A2));

az2=miao(A2);

printf("大地线终点纬度度分秒分别为:\n%d\n%d\n%lf\n",bx2,by2,bz2);

printf("大地线终点经度度分秒分别为:\n%d\n%d\n%lf\n",lx2,ly2,lz2);

printf("终点大地方位角度分秒分别为:\n%d\n%d\n%lf\n",ax2,ay2,az2);

}

/*反算*/

else if(k==2)

{

double

bz,lz,bz2,lz2,az,az2,B1,L1,B2,L2,S,A1,A2,bx,by,lx,ly,bx2,by2,lx2,ly2;

int ax,ay,ax2,ay2;

double

e2,W1,W2,sinu1,sinu2,cosu1,cosu2,L,a1,a2,b1,b2,g,g2,g0,r,p,q,sino,coso,o,si nA0,x,t1,t2,A,B,C,y;

/*以度分秒顺序输入数据*/

printf("请输入大地线起点纬度度分秒\n");

scanf("%lf%lf%lf",&bx,&by,&bz);

printf("请输入大地线起点经度度分秒\n"); scanf("%lf%lf%lf",&lx,&ly,&lz);

printf("请输入大地线终点纬度度分秒\n"); scanf("%lf%lf%lf",&bx2,&by2,&bz2); printf("请输入大地线终点经度度分秒\n"); scanf("%lf%lf%lf",&lx2,&ly2,&lz2);

/*调用函数*/

B1=hudu(bx,by,bz);

L1=hudu(lx,ly,lz);

B2=hudu(bx2,by2,bz2);

L2=hudu(lx2,ly2,lz2);

/*白塞尔大地主题解算*/

e2=0.006693421622966;

W1=sqrt(1-e2*sin(B1)*sin(B1));

W2=sqrt(1-e2*sin(B2)*sin(B2));

sinu1=sin(B1)*sqrt(1-e2)/W1;

sinu2=sin(B2)*sqrt(1-e2)/W2;

cosu1=cos(B1)/W1;

cosu2=cos(B2)/W2;

L=L2-L1;

a1=sinu1*sinu2;

a2=cosu1*cosu2;

b1=cosu1*sinu2;

b2=sinu1*cosu2;

/*逐次趋近法求解A1*/

g0=-662.904266/3600*PI/180; g=0;

r=L;

while(1)

{

p=cosu2*sin(r);

q=b1-b2*cos(r);

A1=atan(p/q);

/*判断A1*/

if(p>0 && q>0)

A1=fabs(A1);

else if(p>0 && q<0)

A1=PI-fabs(A1);

else if(p<0 && q<0)

A1=PI+fabs(A1);

else

A1=2*PI-fabs(A1);

sino=p*sin(A1)+q*cos(A1);

coso=a1+a2*cos(r);

o=atan(sino/coso);

/*判断o*/

if(coso>0)

o=fabs(o);

else

o=PI-fabs(o);

sinA0=cosu1*sin(A1);

x=2*a1-(1-sinA0*sinA0)*coso;

t1=(33523299-(28189-70*(1-sinA0*sinA0))*(1-sinA0*sinA0))*0.0000000001;

t2=(28189-94*(1-sinA0*sinA0))*0.0000000001;

g2=(t1*o-t2*x*sino)*sinA0;

/*检验循环次数*/

printf("\ng2=%lf\ng0=%lf\n",g2,g0);

if(g2<=g0)

break;

else

r=L+g2;

}

/*求解S*/

A=6356863.020+(10708.949-13.474*(1-sinA0*sinA0))*(1-sinA0*sinA0);

B=10708.938-17.956*(1-sinA0*sinA0);

C=4.487;

y=((1-sinA0*sinA0)*(1-sinA0*sinA0)-2*x*x)*coso; S=A*o+(B*x+C*y)*sino;

/*求解A2*/

A2=atan(cosu1*sin(r)/(b1*cos(r)-b2));

/*判断A2*/

if(p<0 && q<0)

A2=fabs(A2);

else if(p<0 && q>0)

A2=PI-fabs(A2);

else if(p>0 && q>0)

A2=PI+fabs(A2);

else

A2=2*PI-fabs(A2);

/*调用函数*/

ax=(int)(du(A1));

ay=(int)(fen(A1));

az=miao(A1);

ax2=(int)(du(A2));

ay2=(int)(fen(A2));

az2=miao(A2);

printf("起点大地方位角度分秒分别为:\n%d\n%d\n%lf\n",ax,ay,az);

printf("终点大地方位角度分秒分别为:\n%d\n%d\n%lf\n",ax2,ay2,az2);

printf("大地线长度为:%lf\n",S);

}

/*数据错误*/

else

printf("数据错误,请重新输入\n");

}

/*度分秒转换为弧度*/

double hudu(double a0,double b0,double c0)

{

double A0;

A0=(a0+b0/60+c0/3600)*PI/180;

return A0;

}

/*弧度转换为度*/

double du(double B0)

{

double x0;

x0=(int)(B0*180/PI);

return x0;

}

/*弧度转换为分*/

double fen(double C0)

{

double _y,y0;

_y=(int)(C0*180/PI);

y0=(fabs)((int)((C0*180/PI-_y)*60));

return y0;

}

/*弧度转换为秒*/

double miao(double D0)

{

double _z1,_z2,z0;

_z1=(int)(D0*180/PI);

_z2=(int)((D0*180/PI-_z1)*60);

z0=(fabs)((double)(((D0*180/PI-_z1)*60-_z2)*60));

return z0;

}

大地主题解算正算:

大地主题解算反算:

以上检验数据来自书本P151,P152。

数值分析综述-《数值分析与算法》徐士良

第2章矩阵与线性代数方程组 一般的线性代数方程组,A非奇异可根据Cramer法则求解方程唯一解但是它的计算量很大。 高斯消元法的算法时间复杂度是O(n3),可以解一系列的线性方程;所占数据空间符合原地工作的原则。但是算法对数值计算不稳定(当分母为0或很小时)。可以用在计算机中来解决数千条等式及未知数。不过,如果有过百万条等式时,这个算法会十分费时。 解决高斯法中的不稳定性,在每次归一化前增加选主元(列选主元、全选主元)过程。但是列选主元法仍不稳定,不适求解大规模线性代数方程组。全选主元的高斯消去法,则在复杂度降低的同时能够避免舍入误差,保证数值稳定性。 高斯-约当消去法算法产生出来的矩阵是一个简化行梯阵式,而不是高斯消元法中的行梯阵式。相比起高斯消元法,此算法的效率比较低,却可把方程组的解用矩阵一次过表示出来。线性代数方程组的迭代解法 简单迭代法:迭代格式发散但迭代值序列不一定发散,但收敛格式收敛,迭代值序列收敛于方程组的准确解与选取迭代初值无关。 雅可比迭代法: 计算公式简单,且计算过程中原始矩阵A始终不变,比较容易并行计算。但是收敛速度较慢,而且占据的存储空间较大,所以工程中一般不直接用雅克比迭代法,而用其改进方法。 高斯-赛德尔迭代法:较上面的迭代复杂,但是矩阵的条件相对宽松。 松弛法:需要根据经验去调整,收敛速度依赖松弛参数的选择,收敛条件的要求更宽松。共轭梯度法:是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。 第3章矩阵特征值 乘幂法计算绝对值最大的特征值:其收敛速度受限于最大与次大特征值比值绝对值的大小,实际应用中采用加速技术。 求对称特征值的雅克比方法96:每进行一次选装变换钱都需要在飞对角线的元素中选取绝对值最大的元素,很费时间,雅克比过关法对此做了改进。 QR方法求一般实矩阵的全部特征值98下100下:重复多次进行QR分解费时,计算工作量很大。一般先进行相似变换然后进行QR分解。但是这样仍然收敛速度慢,一般是线性收敛。实际应用中使用双重步QR变换将带原点的QR算法中相邻两步合并一步,加速收敛避免复数运算。 第4章非线性方程与方程组 二分法:每次运算后,区间长度减少一半,是线形收敛。优点是简单,但是不能计算复根和重根。 简单迭代法:直接的方法从原方程中隐含的求出x,从而确定迭代函数 (x),这种迭代法收敛速度较慢,迭代次数多。 埃特金迭代法113中:对简单迭代进行改进,使在其不满足收敛条件下迭代过程也收敛,在其收敛时加快收敛速度,减少迭代次数降低时间复杂度。 牛顿迭代法:其最大优点是在方程f(x) = 0的单根附近具有平方收敛,收敛速度快。而且该法还可以用来求方程的重根、复根。缺点:初值的选择会影响收敛结果。 牛顿下山法:保证函数值稳定下降,且有牛顿法的收敛速度。

数值分析作业思考题汇总

¥ 数值分析思考题1 1、讨论绝对误差(限)、相对误差(限)与有效数字之间的关系。 2、相对误差在什么情况下可以用下式代替 3、查阅何谓问题的“病态性”,并区分与“数值稳定性”的不同点。 4、取 ,计算 ,下列方法中哪种最好为什么(1)(3 3-,(2)(2 7-,(3) ()3 1 3+ ,(4) ()6 1 1 ,(5)99- , 数值实验 数值实验综述:线性代数方程组的解法是一切科学计算的基础与核心问题。求解方法大致可分为直接法和迭代法两大类。直接法——指在没有舍入误差的情况下经过有限次运算可求得方程组的精确解的方法,因此也称为精确法。当系数矩阵是方的、稠密的、无任何特殊结构的中小规模线性方程组时,Gauss消去法是目前最基本和常用的方法。如若系数矩阵具有某种特殊形式,则为了尽可能地减少计算量与存储量,需采用其他专门的方法来求解。 Gauss消去等同于矩阵的三角分解,但它存在潜在的不稳定性,故需要选主元素。对正定对称矩阵,采用平方根方法无需选主元。方程组的性态与方程组的条件数有关,对于病态的方程组必须采用特殊的方法进行求解。 数值计算方法上机题目1 1、实验1. 病态问题 实验目的: 算法有“优”与“劣”之分,问题也有“好”和“坏”之别。所谓坏问题就是问题本身的解对数据变化的比较敏感,反之属于好问题。希望读者通过本实验对此有一个初步的体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 $ r e x x e x x ** * ** - == 141 . ≈)61

白塞尔大地主题解算

白塞尔大地主题解算 方向: 学号: 姓名:

一.基本思路: 基本思想:将椭球面上的大地元素按照白塞尔投影条件投影到辅助球面上,继而在球面上进行大地主题解算,最后在将球面上的计算结果换算到椭球面上。其关键问题是找出椭球面上的大地元素与球面上相应元素之间的关系式,同时解决在球面上进行大地主题解算的方法。 正算流程: 1.计算起点的归化纬度 2.计算辅助函数值,解球面三角形 3.按公式计算相关系数A,B,C 以及α,β 4.计算球面长度 5.计算纬度差改正数 6.计算终点大地坐标及大地方位角 011122S B C A {sin (cos )} σσσ=-+10101022222sin ()sin sin cos cos σσσσσσ+=+101010 22222cos ()cos cos sin sin σσσσσσ+=-001101 522B C A [cos ()]sin ()σσσσσσ=+ +++010122L A sin [(sin ()sin )] λδασβσσσ-==++-2111u u u A sin sin cos cos cos sin σσ = +222 222 22 22 2222221111u B u B W W u B u B B arctan e u sin sin cos cos tan sin tan cos ?==????=????==--1 111 A arctan u u A sin sin [] cos cos sin sin cos σλσσ=-21L L λδ =+ -

反算流程: 1.辅助计算 2.用逐次趋近法同时计算起点大地方位角、球面长度及经差,第一次趋近时,取δ=0。 计算下式,重复上述计算过程2. 3.计算大地线长度S 4.计算反方位角 二.已知数据 L λδ =+211212u p A u u u u q sin cos tan cos sin sin cos cos λλ= = -2121p p u q b b A arctan q sin cos cos λλ==-=11 p A q A sin cos tan cos σσ += 11 p A q A sin sin cos σ=+12a a cos cos σλ =+arctan sin cos σσσ?? = ??? 011 A u A sin cos sin =111u A tan tan sec σ=21+σσσ =02122L A sin [(sin sin )] λδασβσσ-==+-L λδ =+11222222S A B C B C sin (cos )sin (cos ) σσσσσ=++-+

数值分析综述报告

淮阴工学院 《数值分析》考试 ──基于Matlab的方法综合应用报告 班级:金融1121 姓名:姚婷婷 学号:1124104129 成绩: 数理学院 2014年6月7日

《数值分析》课程综述报告 前言: 数值分析也称计算方法,它与计算工具的发展密切相关。数值分析是一门为科学计算提供必需的理论基础和有效、实用方法的数学课程,它的任务是研究求解各类数学问题的数值方法和有关的理论。 正文: 第一章 近似计算与误差分析 1、产生误差的原因:①模型误差;②观测误差;③截断误差;④舍入误差。 2、四则运算的误差: ①加减法运算 ()()()****x y x y δδδ±=+ ②乘法运算 ()()() ****** *** ******xy x y xy xy xy x y x y y y x x x y x y y x δδδ-=-+-≤-+-?=+ ③ 除法运算: ()()() () () ***** ******* * * ** * * ** * *2 ** x x xy x y y y yy xy x y x y x y yy x x y y y x yy x y y x x y y δδ δ--=-+-=-+-= +?? ?≈ ??? 3、科学表示法、有效数字、近似值的精度 任何一个实数都可以表示成如下的形式: 其中:是正整数,是整数, 如果是数的近似值 并且 则称该近似值具有位有效数字(significant digit )。

此时,该近似值的相对误差为 另一方面,若已知 ()() *111 1021n r x a δ-≤ + 那么, ()()***1112110.10 211 102 r m n n m n x x x x a a a a δ----≤?=+≤ 即:*x 至少有n 位有效数字。 例: 3.141592653589793...π= 取其近似值如下: x*=3.14 x * =3.14159 x*=3.1415 x*=3.141 **213 100.314 110.0016...0.005101022 x x π--=?-=<=?=? **516 100.314159 110.0000026...0.00000510102 2 x x π--=?-=<=?=? **314 100.31415 110.000092...0.0001101022 x x π--=?-=<

大地主题解算程序设计报告

大地主题结算实验报告 姓名:高成 学号:20104214 测绘2班 一、实验目的: 1.提高运用计算机语言编程开发的能力; 2.加深对大地主题解算计算公式及辅助参数的理解并掌握计算步骤; 3.通过编程语言实现大地主题解算。 二、工具: Windows XP Mode 环境下的Microsoft Visual C++ 6.0 三、注意事项: 1.计算所需变量多,容易混淆; 2.正反算函数的编写; 3.函数调用; 4.弧度与角度之间的转化。 四、实验要求: 1.提交报告,实验总结,编写代码; 2.独立编程,调试运行; 3.上交成果:编写思想,编写过程,问题分析,源代码,计算结果;

实验源代码: #include #include double hudu(double,double,double); /*度分秒转换为弧度*/ double du(double); /*弧度转换为度*/ double fen(double); /*弧度转换为分*/ double miao(double); /*弧度转换为秒*/ #define PI 3.1415926 void main (void) { int k; printf("请选择大地主题算法,若执行正算,请输入1;若执行反算,请输入2。\n"); scanf("%d",&k); /*大地主题正算*/ if(k==1) { double ax,ay,az,bx,by,bz,cx,cy,cz,S,dz,ez,fz,B1,B2,L1,L2,A1,A2; int dx,dy,ex,ey,fx,fy; double e2,W1,sinu1,cosu1,sinA0,coto1,sin2o1,cos2o1,sin2o,cos2o,A,B,C,r,t,o0,o,g,sinu2,q; /*输入度分秒数据*/ printf("请输入大地线起点纬度度分秒\n"); scanf("%lf%lf%lf",&ax,&ay,&az); printf("请输入大地线起点经度度分秒\n"); scanf("%lf%lf%lf",&bx,&by,&bz); printf("请输入大地方位角度分秒\n"); scanf("%lf%lf%lf",&cx,&cy,&cz); printf("请输入大地线长度\n"); scanf("%lf",&S); /*调用函数*/ B1=hudu(ax,ay,az); L1=hudu(bx,by,bz); A1=hudu(cx,cy,cz); /*白塞尔大地主题解算*/ e2=0.006693421622966; W1=sqrt(1-e2*sin(B1)*sin(B1)); sinu1=sin(B1)*(sqrt(1-e2))/W1; cosu1=cos(B1)/W1; sinA0=cosu1*sin(A1); coto1=cosu1*cos(A1)/sinu1; sin2o1=2*coto1/(coto1*coto1+1); cos2o1=(coto1*coto1-1)/(coto1*coto1+1);

导数的数值计算方法[文献综述]

毕业论文文献综述 信息与计算科学 导数的数值计算方法 一、 前言部分 导数概念的产生有着直觉的起源,与曲线的切线和运动质点的速度有密切的关系.导数用于描述函数变化率,刻画函数的因变量随自变量变化的快慢程度.比如说,物理上考虑功随时间的变化率(称为功率),化学上考虑反应物的量对时间的变化率(称为反应速度),经济学上考虑生产某种产品的成本随产量的变化率(称为边际成本)等等,这些变化率在数学上都可用导数表示. 导数由于其应用的广泛性,为我们解决所学过的有关函数问题提供了一般性的方法,导数是研究函数的切线、单调性、极值与最值等问题的有力工具;运用它可以简捷地解决一些实际问题,导数的概念是用来研究函数在一点及其附近的局部性质的精确工具,而对于函数在某点附近的性质还可以应用另一种方法来研究,就是通过最为简单的线性函数来逼近,这就是微分的方法.微分学是数学分析的重要组成部分,微分中值定理作为微分学的核心,是沟通导数和函数值之间的桥梁, Rolle 中值定理, Lagrange 中值定理, Cauchy 中值定理, Taylor 公式是微分学的基本定理, 统称为微分学的中值定理,这四个定理作为微分学的基本定理,是研究函数形态的有力工具 ] 1[.在微分学中,函数的导数是通过极限定义的,但 当函数用表格给出时,就不可用定义来求其导数,只能用近似方法求数值导数] 2[.最简单 的数值微分公式是用差商近似地代替微商,常见的有 [3] . ()()() 'f x h f x f x h +-≈ , ()()() 'f x f x h f x h --≈, ()()() '2f x h f x h f x h +--≈ . 需要注意的是微分是非常敏感的问题,数据的微小扰动会使结果产生很大的变化] 4[.

高斯平均引数大地主题正反算

地球科学与环境工程学院实验报告书 课程名: 学号: 姓名: 指导老师: 日期:

目录 一、目的与要求 (1) 二、实验内容 (1) 三、计算公式整理 (1) 四、程序代码 (4) 五、计算结果 (15) 六、实验体会 (16)

一、目的与要求 参考椭球面是大地测量计算的基准面。大地坐标是椭球面上的基本坐标系,根据大地测量的观测成果(如距离与方向),从大地原点出发,逐点计算在椭球面上的大地坐标;或根据两点的大地坐标,计算它们之间的大地线长度和大地方位角,这类计算称为大地问题解算(或称为大地主题解算)。大地问题解算的用途是多方面的,随着现代空间技术和航空航天、航海等领域的发展,大地问题解算(尤其是大地反算)有着更为重要的作用,因此需要熟练掌握其计算。 二、实验内容 在《大地测量学基础》教材中,介绍了高斯平均引数法与白塞尔方法的计算过程、步骤。鉴于此,需要熟练掌握高斯平均引数法与白塞尔方法解大地主题问题的基本方法与原理。采用所熟悉的计算机语言编程计算。计算时采用克拉索夫椭球参数,至少完成其中一种方法正反算,按照数据序号选取不同的已知数据,在计算结果中注明所选取的数据序号,选取其它数据作为无效数据处理。 三、计算公式整理 、高斯平均引数正算计算公式(S< 200 km) 、高斯平均引数正算计算公式(S< 200 km)

四、程序代码 、角度转换类的头文件: #pragma once const double Pi=; class AngleTrans { public: AngleTrans(void); ~AngleTrans(void); double D,F,M,DFM,Rad,Ten; double trans1(double DFM), f"),B2); (_T("%.7f"),L2), (_T("%.7f"),A21); UpdateData(false); } 、反算的计算按钮代码: void C大地主题高斯引数正反算Dlg::OnBnClickedButton1() { UpdateData(true); ZhengFanSuan _ZhengFanSuan; double B1=_wtof(fB1), L1=_wtof(fL1), B2=_wtof(fB2), L2=_wtof(fL2), S=(B1,L1,B2,L2), A12=(B1,L1,B2,L2), A21=(B1,L1,B2,L2); (_T("%.7f"),S); (_T("%.7f"),A12); (_T("%.7f"),A21); UpdateData(false); } 、清零按钮代码: void C大地主题高斯引数正反算Dlg::OnBnClickedButton3() { UpdateData(true);

数值计算方法设计论文

课程设计(论文) 题目: 三次样条插值问题 学院: ___ 理学院 _ 专业: __ _ 数学与应用数学 班级:数学08-2班 学生姓名: 魏建波 学生学号: 080524010219 指导教师:李文宇 2010年12月17日

课程设计任务书

目录 摘要……………………………………………………………………… 一、前言………………………………………………………………… (一)Lagrange插值的起源和发展过程……………………………………… (二)本文所要达到的目的……………………………………………………… 二、插值函数…………………………………………………………… (一)函数插值的基本思想…………………………………………………… (二)Lagrange插值的构造方法……………………………………………… 三、MATLAB程序………………………………………………………… (一)Lagrange程序…………………………………………………………… (二)龙格程序………………………………………………………………… 四、理论证明…………………………………………………………… 五、综述……………………………………………………………………谢辞………………………………………………………………………参考文献…………………………………………………………………

摘要

前言 要求:500字以上,宋体小四,行距20磅,主要内容写该算法的产生及发展、应用领域等。 题目 整体要求:报告页数,正文在8页以上 字体:宋体小四(行距20磅) 内容:1、理论依据 2、问题描述 3、问题分析 4、求解计算(程序) 5、结论 注:(1)页码编号从正文页开始 (2)标题可根据情况自己适当改动 示例见下: 2判别…………………… 2.1 判……………… 2.1.1 判别……………… 所谓的判别分析,………………………………………………方法[3]。 2.1.2 判………………………… 常用的有四种判别方法:…………………………………………………步判别法[6]。 1. 马氏………………

白塞尔大地主题解算

白塞尔大地主题解算。 方向: 学号: 姓名: \

一.基本思路: ; 基本思想:将椭球面上的大地元素按照白塞尔投影条件投影到辅助球面上,继而在球面上进行大地主题解算,最后在将球面上的计算结果换算到椭球面上。其关键问题是找出椭球面上的大地元素与球面上相应元素之间的关系式,同时解决在球面上进行大地主题解算的方法。 正算流程: 1.计算起点的归化纬度 2.计算辅助函数值,解球面三角形 3.按公式计算相关系数A,B,C 以及α,β 4.计算球面长度 # 5.计算纬度差改正数 6.计算终点大地坐标及大地方位角 、 011122S B C A {sin (cos )} σσσ=-+101010 22222sin ()sin sin cos cos σσσσσσ+=+101010 22222cos ()cos cos sin sin σσσσσσ+=-001101 522B C A [cos ()]sin () σσσσσσ=++++010122L A sin [(sin ()sin )] λδασβσσσ-==++-2111u u u A sin sin cos cos cos sin σσ = +222 222 2222 2222221111u B u B W u B u B B arctan e u sin cos cos tan sin tan cos ?==????=????==--1 111 A arctan u u A sin sin [] cos cos sin sin cos σλσσ=-21L L λδ =+ -

反算流程: 1.辅助计算 2.用逐次趋近法同时计算起点大地方位角、球面长度及经差,第一次趋近时,取δ=0。 ! 计算下式,重复上述计算过程2. 3.计算大地线长度S ; 4. 计算反方位角 二.已知数据 L λδ=+211212u p A u u u u q sin cos tan cos sin sin cos cos λλ= = -2121p p u q b b A arctan q sin cos cos λλ==-=11 p A q A sin cos tan cos σσ += 11 p A q A sin sin cos σ=+12a a cos cos σλ =+arctan sin cos σσσ?? = ??? 011 A u A sin cos sin =111u A tan tan sec σ=21+σσσ =02122L A sin [(sin sin )] λδασβσσ-==+-L λδ =+11222222S A B C B C sin (cos )sin (cos ) σσσσσ=++-+

数值计算方法第4次作业

第四章 问题一 一、问题综述 在离地球表面高度为y处的重力加速度如下: 计算高度y=55000m处的重力加速度值。 二、问题分析 以高度y作为自变量,重力加速度的值为因变量。得到以下信息: f(0)=9.8100; f(30000)=9.7487; f(60000)=9.6879; f(90000)=9.6278; f(120000)=9.5682; 本题要求的就是f(55000)的值。 以下将采用课堂中学到的Lagrange插值多项式法、Newton插值多项式法、分段低次插值法和样条插值法求解该问题。 三、问题解决 1. lagrange插值多项式法 对某个多项式函数,已知有给定的k+ 1个取值点: 其中对应着自变量的位置,而对应着函数在这个位置的取值。 假设任意两个不同的x j都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:

其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为: 拉格朗日基本多项式的特点是在上取值为1,在其它的点上取值为0。 源程序lagrange.m function [c,f]=lagrange(x,y,a) % 输入:x是自变量的矩阵;y是因变量的矩阵;a是要计算的值的自变量; % 输出:c是插值多项式系数矩阵;f是所求自变量对应的因变量; m=length(x); l=zeros(m,m); % l是权矩阵 f=0; for i=1:m v=1; for j=1:m if i~=j v=conv(v,poly(x(j)))/(x(i)-x(j)); % v是l_i(x)的系数矩阵 end end l(i,:)=v; % l矩阵的每一行都是x从高次到低次的系数矩阵 end c=vpa(y*l,10); % 对应阶次的系数相加,乘以y,显示10位有效数字 for k=1:m f=f+c(k)*a^(m-k); end 输入矩阵 x=[0 30000 60000 90000 120000] y=[9.81 9.7487 9.6879 9.6278 9.5682] a=55000 再运行源函数,可得: c = [ -2.057613169e-23, 4.938271605e-18, -3.703703702e-14, -0.000002046111111, 9.81] f = 9.6979851723251649906109417384537

分段累加法大地主题解算及高斯投影

大地测量编程实习报告 班号:XXXX 学号:XXXXXXXXXX 姓名:XXX 大地主题解算(分段累加法正算) 结果截图: 主要代码: privatevoid button1_Click(object sender, EventArgs e) { double bx, by, bz, B1, lx, ly, lz, L1, ax, ay, az, A1, S; double dB, dL; double e2 = 0.006693421622966, a = 6378245.0000000000; double M, N, W, C; double B2 = 0, L2 = 0, A2 = 0; int Bx, By, Lx, Ly, Ax, Ay; double Bz, Lz, Az; bx = Convert.ToDouble(du1.Text); by = Convert.ToDouble(fen1.Text); bz = Convert.ToDouble(miao1.Text); lx = Convert.ToDouble(du2.Text); ly = Convert.ToDouble(fen2.Text); lz = Convert.ToDouble(miao2.Text); ax = Convert.ToDouble(du3.Text); ay = Convert.ToDouble(fen3.Text); az = Convert.ToDouble(miao3.Text); S = Convert.ToDouble(m.Text); double PI = Math.PI; B1 = (bx + by / 60 + bz / 3600) * PI / 180; L1 = (lx + ly / 60 + lz / 3600) * PI / 180; A1 = (ax + ay / 60 + az / 3600) * PI / 180; W = Math.Sqrt(1 - e2 * (Math.Sin(B1) * Math.Sin(B1)));

数值计算方法大作业

题目利用数值计算方法求取基尼系数 姓名与学号 指导教师 年级与专业 所在学院

一、问题综述: 基尼系数(Gini coefficient),是20世纪初意大利学者科拉多·吉尼根据劳伦茨曲线所定义的判断收入分配公平程度的指标。是比例数值,在0和1之间。基尼指数(Gini index)是指基尼系数乘100倍作百分比表示。在民众收入中,如基尼系数最大为“1”,最小等于“0”。前者表示居民之间的收入分配绝对不平均(即所有收入都集中在一个人手里,其余的国民没有收入),而后者则表示居民之间的收入分配绝对平均,即人与人之间收入绝对平等,但这两种情况只出现在理论上;因此,基尼系数的实际数值只能介于0~1之间,基尼系数越小收入分配越平均,基尼系数越大收入分配越不平均。 设右图中的 实际收入分配曲线 (红线)和收入分 配绝对平等线(绿 线)之间的面积为 A,和收入分配绝 对不平等线(蓝 线)之间的面积为 B,则表示收入与 人口之间的比例的基尼系数为 A A+B 。 如果A为零,即基尼系数为0,表示收入分配完全平等(红线和绿线重叠);如果B为零,则系数为1,收入分配绝对不平等(红线和蓝线重叠)。该系数可在0和1之间取任何值。实际上,一般国家的收入分配,既不是完全平等,也不是完全不平等,而是在两者之间,劳伦茨曲线为一条凸向横轴的曲线。收入分配越趋向平等,劳伦茨曲线的弧度越小(斜度越倾向45度),基尼系数也越小;反之,收入分配越趋向不平等,劳伦茨曲线的弧度越大,那么基尼系数也越大。

基尼系数的调节需要国家通过财政政策进行国民收入的二次分配,例如对民众的财政公共服务支出和税收等,从而让收入均等化,令基尼系数缩小。 基尼系数由于给出了反映居民之间贫富差异程度的数量界线,可以较客观、直观地反映和监测居民之间的贫富差距,预报、预警和防止居民之间出现贫富两极分化。因此得到世界各国的广泛认同和普遍采用。 联合国有关组织规定: ●若低于0.2表示收入平均; ●0.2-0.3表示相对平均; ●0.3-0.4表示相对合理; ●0.4-0.5表示收入差距大; ●0.6以上表示收入差距悬殊。 2013年1月18日,中国国家统计局一次性公布了自2003年以来十年的全国基尼系数。大陆统计局局长马建堂称,按照国际新的统计口径,大陆居民收入的基尼系数,2003年是0.479,2004年是0.473,2005年为0.485,2006年为0.487,2007年为0.484,2008年为0.491,2009年为0.490,2010年为 0.481,2011年为0.477,到2012年的数据是0.474,为2005年以来最低水平,而自2008年起,基尼系数也在逐年下降。而此前西南财大调查数据显示,中国的2012年的基尼系数为0.61,但无论是民间统计的数据还是官方统计的数据,结果都遭到学术界质疑,仍具有争议性。 本文将根据网络上国家统计局的数据,利用上面给出的公式来计算我国从2002年以来的城镇居民基尼系数,并将计算出的数据与现有数据进行比较。 全球基尼系数

大地测量学复习资料

1.垂线偏差:地面一点上的重力向量g和相应椭球面上的法线向量n之间的夹 角定义为该点的垂线偏差。 2.参考椭球:具有确定参数(长半径a和扁率α),经过局部定位和定向,同某 一地区大地水准面最佳拟合的地球椭球,叫参考椭球。 3.大地线:椭球面上两点间的最短程曲线叫做大地线。 4.力高:水准面在纬度45度处的正常高。 5.大地主题解算:已知某些大地元素推求另一些大地元素的计算工作叫大地主 题解算。 6.大地主题正算:已知P1点的大地坐标(L1,B1),P1至P2的大地线长 S及其大地方位角,计算P2点的大地坐标(L2,B2)和大地线S在P2点的反方位角A21,这类问题叫做大地主题正算。 7.大地基准:是指能够最佳拟合地球形状的地球椭球的参数及椭球定位和定向 8.高斯投影:横轴椭圆柱等角投影(假象有一个椭圆柱横套在地球椭球体外, 并与某一条子午线相切,椭球柱的中心轴通过椭球体中心,然后用一定投影方法,将中央子午线两侧各一定范围内的地区投影到椭圆柱上,再将此柱面展开成投影面)。 9.大地测量学:是指在一定的时间与空间参考系中,测量和描绘地球形状及其 重力场并监测其变化,为人类活动提供关于地球的空间信息的一门科学。 10.理论闭合差:由水准面不平行而引起的水准环线闭合差,称为理论闭合 差。 11.地心坐标系:地心坐标系是在大地体内建立的O-XYZ坐标系。原点O 设在大地体的质量中心,用相互垂直的X,Y,Z三个轴来表示,X轴与首子

午面与赤道面的交线重合,向东为正。Z轴与地球旋转轴重合,向北为正。Y 轴与XOZ平面垂直构成右手系。 12.高斯投影正、反算公式进行换带计算的步骤。 这种方法的实质是把椭球面上的大地坐标作为过度坐标。首先把某投影带内 利用高斯投影反算公式换算成椭球面上的大地坐有关点的平面坐标(x,y) 1 +l,然后再由大地坐标(B,l),利用投影正算公式标(B,l),进而得到L=L 在计算时,要根据第2带的中央子午线换算成相邻带的平面坐标(x,y) 2 来计算经差l,亦即此时l=L-L 0。 13.高斯投影应满足哪三个条件? (1)正形投影:投影长度比在一个点上与方向无关; (2)中央子午线投影后为一直线,且是投影点的对称轴; (3)中央子午线投影后长度不变。 14.建立国家平面大地控制网的方法? 答:基本方法: 1)、常规大地测量法:(1)三角测量法(2)导线测量法(3)三边测量及边角同测法; 2)、天文测量法; 3)、利用现代定位新技术:(1)GPS测量 (2)甚长基线干涉测量系统(VLBI) (3)惯性测量系统(INS)。 15.试写出我国常用的参心和地心坐标系。 16.水准面的不平行性对水准测量的影响? ⑴为水准面不平行性,如果沿水准面观测高差不等于零(应该等于零),要加改

大地主题解算-C#

大地主题解算-正算-C#

大地主题解算-正算-程序 using System; using System.Collections.Generic; using https://www.360docs.net/doc/f15874482.html,ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int n,du,fen,miao; double B1, L1, A1, S, dS, dB1, dL1, M1, N1, W1; double E = 0.006694384999588, a = 6378140, C;

B1 =( Convert.ToDouble(textBox1.Text) + Convert.ToDouble(textBox9.Text)/60 + Convert.ToDouble(textBox10.Text)/3600 )* Math.PI / 180; L1 = (Convert.ToDouble(textBox2.Text) + Convert.ToDouble(textBox11.Text)/60 + Convert.ToDouble(textBox12.Text)/3600) * Math.PI / 180; ; A1 = (Convert.ToDouble(textBox3.Text) + Convert.ToDouble(textBox13.Text)/60 + Convert.ToDouble(textBox14.Text)/3600) * Math.PI / 180; ; S = Convert.ToDouble(textBox5.Text); n = Convert.ToInt16(textBox4.Text); double[] L = new double[100000]; double[] B = new double[100000]; double[] dL = new double[100000]; double[] dB = new double[100000]; double[] A = new double[100000]; double[] W = new double[100000]; double[] N = new double[100000]; double[] M = new double[100000]; W1 = Math.Pow(1 - E * Math.Pow(Math.Sin(B1), 2), 0.5); N1 = a / W1; M1 = a * (1 - E) / (W1 * W1 * W1); C = N1 * Math.Sin(A1) * Math.Cos(B1); dS = S / n; dB1 = dS * Math.Cos(A1) / M1; dL1 = dS * Math.Sin(A1) / N1 / Math.Cos(B1); B[0] = B1; L[0] = L1; dB[0] = dB1; dL[0] = dL1; A[0] = A1; M[0] = M1; N[0] = N1; W[0] = W1; int i; for (i = 1; i < n; i++) { dB[i - 1] = dS * Math.Cos(A[i - 1]) / M[i - 1]; B[i] = B[i - 1] + dB[i - 1]; W[i] = Math.Pow(1 - E * Math.Pow(Math.Sin(B[i]), 2), 0.5); N[i] = a / W[i];

定积分的数值计算方法[含论文、综述、开题-可编辑]

设计 (20 届) 定积分的数值计算方法 所在学院 专业班级信息与计算科学学生姓名学号 指导教师职称 完成日期年月

摘要:数值计算是许多科学与工程计算的核心.定积分的数值计算方法有很多,其中一些常用的计算方法有牛顿-科茨求积公式,梯形求积公式,辛普森求积公式,复合求积公式,龙贝格积分法,高斯求积公式,切比雪夫求积法等.本篇论文主要介绍定积分数值计算的多种方法,并对其中几种做了比较评述,最后给出了梯形求积公式,龙贝格积分法在Matlab环境中的编程实现. 关键词:牛顿-科茨求积公式;复合求积公式;高斯求积公式

Some numerical methods of definite integral Abstract: Numerical calculation is the core of many science and engineering calculation. There are many numerical calculation methods, including some commonly used numerical methods are Newton – Cotes Quadrature formula, Trapezoidal Quadrature formula, Simpson formula,Composite Quadrature formula, Romberg Quadrature method, Gaussian Quadrature formula, chebyshev Quadrature formula, and so on. This theies mainly introduces Some numerical methods of definite integral and compare several of these methods, finally gives the Trapezoidal Quadrature formula, Romberg Quadrature method in the Matlab environment for programming realize. Key words:Newton – Cotes Quadrature formula; Composite Quadrature formula; Gaussian Quadrature formula

电磁场数值计算方法及商用软件综述

电磁场数值计算方法及商用软件综述 摘要:介绍了电磁场数值计算中几种富有代表性的数值计算方法,对每种方法的解题思路,特点进行了仔细的阐述,并就不同方法的区别进行了深入的分析,然后比较了目前市场上常用的几种电磁场仿真软件,最后对电磁场数值计算方法及仿真软件的发展做了初步的探讨。为充分发挥各种方法的优点和在实践中实现各种方法的综合应用起到了一定的指导作用。 关键词:有限元法,矩量法,时域有限差分方法。 引言:自从1864年Maxwell建立了统一的电磁场理论,并得出了著名的Maxwell方程组以来,经典的数学分析方法是一百多年来电磁学学科发展中的一个极为重要的手段,围绕电磁分布边值问题的求解国内外专家学者做了大量工作,在数值计算方法之前,电磁分布边值问题的研究内容主要是解析法,但其推导过程相当繁琐困难,缺乏通用性,求解范围是十分有限的.从上个世纪六十年代以来,伴随着电子计算机技术的飞速发展,大量的电磁场数值计算方法不断涌现,并得到广泛应用,相对于经典电磁理论而言,数值方法受边界形状的约束大为减少,可以解决各种类型的复杂的问题,但各种数值计算方法都有各自的优缺点和局限性,一个复杂的问题往往难以依靠一种单一的方法解决,如何充分发挥各种方法的优缺点,取长补短,将多种方法结合起来解决实际问题,及混合法的应用已日益受到人们的关注。同时,怎样利用这些方法实现电磁学逆问题的求解也成为一个十分具有现实意义的工作。本文综述了国内外计算电磁学的发展状况,对常用的电磁计算方法及商用软件进行了分类和比较。 1.1电磁场数值方法的分类 电磁学问题的数值求解方法可分为时域和频域两大类(见表格1),频域技术主要有矩量法,有限差分法等,时域法的引入主要是基于对计算效率的考虑,某些问题在时域中讨论起来计算量要小,例如求解目标对冲击脉冲的早期响应时,频域必须在很大的带宽内多次采样计算,然后做傅里叶反变换求得解答,计

大地测量学基础编程作业

《大地测量学基础》编程作业报告 姓名:周于涛学号:2014301610157 一、作业内容 1.大地主题解算(正反算) 2.高斯投影计算(正反算) 二、作业要求 1.大地主题解算 (1)完成大地主题解算正反算; (2)采用克拉索夫斯基椭球参数; (3)高斯平均引数(或白塞尔)方法解算; (4)最好有程序框图,界面和表格输出结果; 2.高斯投影计算 (1)完成高斯投影正反算; (2)采用克拉索夫斯基椭球参数; (3)按3°带和6°带投影; 三、编程思路 1.由于最后的结果要求有界面,我选择了C#语言完成本次编程作业; 2.我将这两个作业写在同一个工程文件中,使用同一个界面展现; 3.程序主要由3个部分组成,分别是:控件设计文件(Form1.Designer.cs)、控件响应文件(Form1.cs)、完成计算过程的类文件(Calcu.cs); 4.基本思路为:从控件中获取预定格式的已知值,根据计算类型创建相应的类,传入初始值,使用类中的方法进行计算,最后返回计算结果,再根据结果类型以给定的格式输出显示。 5.计算使用的类:考虑到四种计算中都会涉及到:度分秒格式与十进制浮点格式角度值互相转换、弧度制与角度制相互转换、使用常数ρ’’、克拉索夫斯基椭球基本参数等操作,我先定义了Calcu这个基类,添加以上功能和常数,以便其他子类使用。 6.对于大地主题正反算,我分别定义两个类A_Calcu、B_Calcu,继承基类Calcu。我采用白塞尔法进行大地主题正反算,参考教材上的计算步骤和计算公式。 7.对于高斯投影正反算,我再次分别定义两个类GA_Calcu、GB_Calcu,,继承基类Calcu。采用教材上适用于电算的高斯投影计算步骤和公式。考虑到程序的完善性,在确定中央子午线经度的时候,我采用了自动识别和手动添加两种方式,这样不仅可以完成按3°带和6°带投影,还可以实现按任意带投影,只需手动输入投影中央子午线经度即可。 四、程序框图

相关文档
最新文档