利用高斯公式计算积分,求详细解答过程!谢谢!

利用高斯公式计算积分,求详细解答过程!谢谢!,第1张

设函数P=0,Q=yz,R=2,则P'x+Q'y+R'z=0+z+0,

添加上半球面的底面,记其为∑,取下侧,

则原式=∫∫(s)…+∫∫(∑)…-∫∫(∑)…

利用高斯公式=∫∫∫(上半球体上) zdv -∫∫(∑)…

=∫(0到2π)da∫(0到2)rdr∫(0到√4-rr) zdz -∫∫(∑) 2dxdy是曲面积分

=2π∫(0到2) r(4-rr)/2dr +∫∫(∑在xoy面的投影圆域上) 2dxdy是二重积分

=4π + 8π=12π。

在球面外部,此球面的电场线分布与带电量为Q=4πR²σ的点电荷电场线分布相同,

所以可以用点电荷代替此球面,

所以球面外距球心的距离为r处的电场强度为E=kQ/r²=4kπR²σ/r²,电势为φ=4kπR²σ/r,

在球面内部,可以用微元法求出球面内部任一点的电场强度为0,

所以电势与球面的电势相同为φ′=4kπσ。

关于微元法,如图,其中θ角非常小,

所以(S1)/(S2)=(r1)²/(r2)²

E1=k(Q1)/(r1)=kσ(S1)/(r1)²

E2=k(Q2/(r2)=kσ(S2/(r2)²

E1=E2,方向相反

结论是成立的

用词上稍微修正一下: 不是把余数推广到复数域(域上不需要余数),

而是推广到Gauss整数环Z[i] = {a+bi : a,b ∈ Z}

当整数c,d不全为零, 考虑点集P = {(c+di)x+(-d+ci)y : 0 ≤ x,y < 1}

易见这是一个(半开半闭的)平行四边形(其实是正方形), 面积为c²+d²

由0 ≤ r(ac+bd,c²+d²),r(bc-ad,c²+d²) < c²+d², 可知r(a+bi,c+di) ∈ P

此外, 不难验证r(a+bi,c+di) ∈ Z[i], 因此r(a+bi,c+di) ∈ P∩Z[i]

反之对任意u+vi ∈ P∩Z[i], 可设u+vi = (c+di)x+(-d+ci)y, 0 ≤ x,y < 1

可算得u=cx-dy, v = dx+cy, 进而uc+vd = (c²+d²)x, vc-ud = (c²+d²)y,

故0 ≤ uc+vd,vc-ud < c²+d², 于是r(u+vi,c+di) = u+vi

因此P∩Z[i]中的点都是余数

综合两方面, 余数集合就是P∩Z[i]

只需证明P中恰有c²+d²个整点(实虚部均为整数的点, 也即Z[i]中的点)

证明(半开半闭)格点平行四边形内的整点数目等于其面积, 有一般方法(注2)

不过由于这里实际上是正方形, 可以较为简单直观的进行:

(注意: 虚线边和空心点是不在图形内的)

如图所示, P作为由c+di与-d+ci围成的正方形,

可以通过分割和整数平移变为边长分别为|c|和|d|的两个正方形的并

在这一变换过程中, 不但图形的面积不变, 图形内的整点数目也不变

但易知边长为|c|,|d|的格点正方形内恰有c²,d²个整点,

因此P中恰有c²+d²个整点

注1: 以抽象代数的语言来说, 余数集合就是商环Z[i]/(c+di)的一组代表元集合

问题转化为证明|Z[i]/(c+di)| = c²+d²

这其实是代数数论中一个定理的特例: |O/(α)| = N(α)

注2: 一般方法包括但不限于: 使用Pick定理(只适用2维情形);

将每个整点对应于P内的一个单位正方形(边界处需讨论平移拼接);

借助有限生成Abel群的结构定理等等

注3: 这里定义的余数并不满足欧式环的要求,

因为余数的模可能大于等于除数的模, 从而不能保证辗转相除能够终止

不过只需将r(a,b)改为在[-b/2,b/2)中取值, 就能满足要求

按此带余除法, Z[i]成为一个欧式环

//高斯投影正、反算

//////6度带宽 54年北京坐标系

//高斯投影由经纬度(Unit:DD)反算大地坐标(含带号,Unit:Metres)

void GaussProjCal(double longitude, double latitude, double X, double Y)

{

int ProjNo=0; int ZoneWide; ////带宽

double longitude1,latitude1, longitude0,latitude0, X0,Y0, xval,yval;

double a,f, e2,ee, NN, T,C,A, M, iPI;

iPI = 00174532925199433; ////31415926535898/1800;

ZoneWide = 6; ////6度带宽

a=63782450; f=10/2983; //54年北京坐标系参数

////a=63781400; f=1/298257; //80年西安坐标系参数

ProjNo = (int)(longitude / ZoneWide) ;

longitude0 = ProjNo ZoneWide + ZoneWide / 2;

longitude0 = longitude0 iPI ;

latitude0=0;

longitude1 = longitude iPI ; //经度转换为弧度

latitude1 = latitude iPI ; //纬度转换为弧度

e2=2f-ff;

ee=e2(10-e2);

NN=a/sqrt(10-e2sin(latitude1)sin(latitude1));

T=tan(latitude1)tan(latitude1);

C=eecos(latitude1)cos(latitude1);

A=(longitude1-longitude0)cos(latitude1);

M=a((1-e2/4-3e2e2/64-5e2e2e2/256)latitude1-(3e2/8+3e2e2/32+45e2e2

e2/1024)sin(2latitude1)

+(15e2e2/256+45e2e2e2/1024)sin(4latitude1)-(35e2e2e2/3072)sin(6l

atitude1));

xval = NN(A+(1-T+C)AAA/6+(5-18T+TT+72C-58ee)AAAAA/120);

yval = M+NNtan(latitude1)(AA/2+(5-T+9C+4CC)AAAA/24

+(61-58T+TT+600C-330ee)AAAAAA/720);

X0 = 1000000L(ProjNo+1)+500000L;

Y0 = 0;

xval = xval+X0; yval = yval+Y0;

X = xval;

Y = yval;

}

//高斯投影由大地坐标(Unit:Metres)反算经纬度(Unit:DD)

void GaussProjInvCal(double X, double Y, double longitude, double latitude) 字串9

{

int ProjNo; int ZoneWide; ////带宽

double longitude1,latitude1, longitude0,latitude0, X0,Y0, xval,yval;

double e1,e2,f,a, ee, NN, T,C, M, D,R,u,fai, iPI;

iPI = 00174532925199433; ////31415926535898/1800;

a = 63782450; f = 10/2983; //54年北京坐标系参数

////a=63781400; f=1/298257; //80年西安坐标系参数

ZoneWide = 6; ////6度带宽

ProjNo = (int)(X/1000000L) ; //查找带号

longitude0 = (ProjNo-1) ZoneWide + ZoneWide / 2;

longitude0 = longitude0 iPI ; //中央经线

X0 = ProjNo1000000L+500000L;

Y0 = 0;

xval = X-X0; yval = Y-Y0; //带内大地坐标

e2 = 2f-ff;

e1 = (10-sqrt(1-e2))/(10+sqrt(1-e2));

ee = e2/(1-e2);

M = yval;

u = M/(a(1-e2/4-3e2e2/64-5e2e2e2/256));

fai = u+(3e1/2-27e1e1e1/32)sin(2u)+(21e1e1/16-55e1e1e1e1/32)sin(

4u)

+(151e1e1e1/96)sin(6u)+(1097e1e1e1e1/512)sin(8u);

C = eecos(fai)cos(fai);

T = tan(fai)tan(fai);

NN = a/sqrt(10-e2sin(fai)sin(fai)); 字串1

R = a(1-e2)/sqrt((1-e2sin(fai)sin(fai))(1-e2sin(fai)sin(fai))(1-e2sin

(fai)sin(fai)));

D = xval/NN;

//计算经度(Longitude) 纬度(Latitude)

longitude1 = longitude0+(D-(1+2T+C)DDD/6+(5-2C+28T-3CC+8ee+24TT)D

DDDD/120)/cos(fai);

latitude1 = fai -(NNtan(fai)/R)(DD/2-(5+3T+10C-4CC-9ee)DDDD/24

+(61+90T+298C+45TT-256ee-3CC)DDDDDD/720);

//转换为度 DD

longitude = longitude1 / iPI;

latitude = latitude1 / iPI;

}

NN卯酉圈曲率半径,测量学里面用N表示

M为子午线弧长,测量学里用大X表示 字串2

fai为底点纬度,由子午弧长反算公式得到,测量学里用Bf表示 字串4

R为底点所对的曲率半径,测量学里用Nf表示

设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。 解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2f''(x0)/2! +… 取其线性部分,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x-x0)-f(x)=0 设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。 牛顿迭代法示意图

军人在进攻时常采用交替掩护进攻的方式,若在数轴上的点表示A,B两人的位置,规定在前面的数大于后面的数,则是A>B,B>A交替出现。但现在假设军中有一个胆小鬼,同时大家又都很照顾他,每次冲锋都是让他跟在后面,每当前面的人占据一个新的位置,就把位置交给他,然后其他人再往前占领新的位置。也就是A始终在B的前面,A向前迈进,B跟上,A把自己的位置交给B(即执行B = A *** 作),然后A 再前进占领新的位置,B再跟上……直到占领所有的阵地,前进结束。像这种两个数一前一后逐步向某个位置逼近的方法称之为迭代法。 迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性 *** 作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。 利用迭代算法解决问题,需要做好以下三个方面的工作: 一、确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。 二、建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。 三、对迭代过程进行控制。在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。 最经典的迭代算法是欧几里德算法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a, b) = gcd(b, a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 。假设d是a,b的一个公约数,则有 d%a==0, d%b==0,而r = a - kb,因此d%r==0 ,因此d是(b, a mod b)的公约数 同理,假设d 是(b, a mod b)的公约数,则 d%b==0 , d%r==0 ,但是a = kb +r ,因此d也是(a,b)的公约数 。 因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。 欧几里德算法就是根据这个原理来做的,欧几里德算法又叫辗转相除法,它是一个反复迭代执行,直到余数等于0停止的步骤,这实际上是一个循环结构。其算法用C语言描述为: int Gcd_2(int a, int b)// 欧几里德算法求a, b的最大公约数 { if (a<=0 || b/预防错误 return 0; int temp; while (b > 0) //b总是表示较小的那个数,若不是则交换a,b的值 { temp = a % b; //迭代关系式 a = b; //a是那个胆小鬼,始终跟在b的后面 b = temp; //b向前冲锋占领新的位置 } return a; } 从上面的程序我们可以看到a,b是迭代变量,迭代关系是temp = a % b; 根据迭代关系我们可以由旧值推出新值,然后循环执a = b; b = temp;直到迭代过程结束(余数为0)。在这里a好比那个胆小鬼,总是从b手中接过位置,而b则是那个努力向前冲的先锋。 还有一个很典型的例子是斐波那契(Fibonacci)数列。斐波那契数列为:0、1、1、2、3、5、8、13、21、…,即 fib(1)=0; fib(2)=1; fib(n)=fib(n-1)+fib(n-2) (当n>2时)。 在n>2时,fib(n)总可以由fib(n-1)和fib(n-2)得到,由旧值递推出新值,这是一个典型的迭代关系,所以我们可以考虑迭代算法。 int Fib(int n) //斐波那契(Fibonacci)数列 { if (n < 1)//预防错误 return 0; if (n == 1 || n == 2)//特殊值,无需迭代 return 1; int f1 = 1, f2 = 1, fn;//迭代变量 int i; for(i=3; i<=n; ++i)//用i的值来限制迭代的次数 { fn = f1 + f2; //迭代关系式 f1 = f2; //f1和f2迭代前进,其中f2在f1的前面 f2 = fn; } return fn; }

#include<mathh>

#include<stdioh>

#include<stdlibh>

#include<conioh>

#define NUMBER 20

#define Esc 0x1b

#define Enter 0x0d

float A[NUMBER][NUMBER+1] ,ark;

int flag,n;

void exchange(int r,int k);

float max(int k);

void message();

int main()

{

float x[NUMBER]; /此数组用于存放方程解/

int r,k,i,j;

char celect;

system("cls");

printf("\n\n用Gauss列主元消元法解线性方程组");

printf("\n\n1解方程组请按Enter");

printf("\n\n2退出程式请按Esc");

celect=getch();

if(celect==Esc)

exit(0);

printf("\n\n 输入方程组的维数:n=");

scanf("%d",&n);

printf(" \n\n现在输入系数矩阵A和向量b:");

for(i=1;i<=n;i++)

{

printf("\n\n请输入a%d1--a%d%d系数和向量b%d:",i,i,n,i);

/实现将每一行中的系数和向量一次性输入,数之间用空格格开,输完后回车确定/

for(j=1;j<=n+1;j++) /将刚才输入的数存入数组/

scanf("%f",&A[i][j]);

}

for(k=1;k<=n-1;k++)

{

ark=max(k);

if(ark==0) /判断方程是否为线性方程,即是否合法/

{

printf("\n\n此方程组不合法!");message();

}

else if(flag!=k)

exchange(flag,k);

for(i=k+1;i<=n;i++)

for(j=k+1;j<=n+1;j++)

A[i][j]=A[i][j]-A[k][j]A[i][k]/A[k][k];

}

x[n]=A[n][n+1]/A[n][n];

for( k=n-1;k>=1;k--)

{

float me=0;

for(j=k+1;j<=n;j++)

{

me=me+A[k][j]x[j];

}

x[k]=(A[k][n+1]-me)/A[k][k];

}

for(i=1;i<=n;i++)

{

printf(" \n\nx%d=%f",i,x[i]);

}

message();

return 1;

}

void exchange(int r,int k) /交换行的矩函数/

{

int i;

for(i=1;i<=n+1;i++)

A[0][i]=A[r][i];

for(i=1;i<=n+1;i++)

A[r][i]=A[k][i];

for(i=1;i<=n+1;i++)

A[k][i]=A[0][i];

}

float max(int k) /比校系数大小的函数/

{

int i;

float temp=0;

for(i=k;i<=n;i++)

if(fabs(A[i][k])>temp)

{

temp=fabs(A[i][k]);

flag=i;

}

return temp;

}

void message() /实现菜单选择的函数/

{

printf("\n\n 继续运算按 Enter ,退出程式按 Esc!");

switch(getch())

{

case Enter: main();

case Esc: exit(0);

default:{printf("\n\n不合法的输入!");message();}

}

}

以上就是关于利用高斯公式计算积分,求详细解答过程!谢谢!全部的内容,包括:利用高斯公式计算积分,求详细解答过程!谢谢!、高斯定理解题:假设半径为R的球面上电荷均匀分布,电荷面密度为σ,试求:1.球面内外的电场分布。、高斯整数余数的一个问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10217168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存