搜档网
当前位置:搜档网 › 数值分析上机题答案

数值分析上机题答案

数值分析上机题答案
数值分析上机题答案

20.(上机题)舍入误差与有效数 设∑=-=N j N j S 2211,其精确值为)11123(21+--N N 。

(1)编制按从小到大的顺序

11131121222-+???+-+-=N S N ,计算N S 的通用程序。 (2)编制按从大到小的顺序

1211)1(111222-+???+--+-=

N N S N ,计算N S 的通用程序。

(3)按两种顺序分别计算642101010,,S S S ,并指出有效位数。(编制程序时用单精度)

(4)通过本上机题,你明白了什么?

c++代码:

#include

#include

void main(){

float S1,S2,S=0.0,N,j;

fstream myfile; //定义文件

myfile.open("chap0.txt",ios::in|ios::out);

for (int i=0;i<3;i++)

{

do //读入三组数据

{

cout<<"请输入N 值:";

cin>>N;

cout<

myfile<<"当N = "<

}while (N<2);

S=(float) ((1.5-(1.0/N)-(1.0/(N+1)))/2);

myfile<<"精确值S=:"<

S1=0.0;S2=0.0;

for (j=2;j<=N;j++) S1=S1+(float) (1.0/(j*j-1.0));

for (j=N;j>=2;j--) S2=S2+(float) (1.0/(j*j-1.0));

myfile<<"按从大到小的顺序求和结果S1=:"<

myfile<<"按从小到大的顺序求和结果S2=:"<

}

myfile.close();

}

输出结果:

当N = 100 时

精确值S=:0.740049

按从大到小的顺序求和结果S1=:0.740049 有效位数6

按从小到大的顺序求和结果S2=:0.74005 有效位数5

当N = 10000 时

精确值S=:0.7499

按从大到小的顺序求和结果S1=:0.749852 有效位数 4

按从小到大的顺序求和结果S2=:0.7499 有效位数 4

当N = 1000000 时

精确值S=:0.749999

按从大到小的顺序求和结果S1=:0.749852 有效位数 4

按从小到大的顺序求和结果S2=:0.749999 有效位数 6

体会:通过本题,我认识到了舍入误差对计算结果的影响,所以必须选择合适的计算方法,

尽量减少这种误差的影响。

习题2

20.(上机题)NEWTON 迭代法

(1)给定初值0x 及容许误差ε,编制Newton 法解方程0)(=x f 根的通用程序。

(2)给定方程03/)(3=-=x x x f ,易知其有三个根3,0,3*

3*2*1==-=x x x 。

1.由Newton 方法的局部收敛性可知存在0>δ,当),(0δδ-∈x 时,Newton 迭代序列收敛于根*2x 。试确定尽可能大的δ。

2。试取若干初值,观察当),1(),1,(),,(),,1(),1,(0∞-----∞∈δδδδx 时Newton 序列是否收敛以及收敛于哪一个根。

(3)通过本上机题,你明白了什么?

c++代码:

#include

#include

#define h 0.000001

float xo=0.0,x1,x2,e,a,b;

float f(float x){ //原函数033

=-x x

float f1=(float) (a*x*x*x+b*x);

return f1;

}

float g(float x){ //导函数

float g1=(float) (3*a*x*x+b);

return g1;

}

int test(float xk){ //求收敛于0的最大的δ

int r,flag=0;

float xkplus1;

while (flag==0)

{

xkplus1 = xk - f(xk)/g(xk);

if (xkplus1 == xk) flag=1;

else xk = xkplus1;

};

if (xk==0) r=1; else r=0;

return r;

}

void main()

{

cout<<"请输入初值X0:";

cin>>x1;

cout<

cout<<"请输入容许误差E:";

cin>>e;

cout<

cout<<"请输入三次系数A,一次系数B:";

cin>>a>>b;

cout<

x2=(float) (x1-f(x1)/g(x1));// 牛顿迭代法求根

while (fabs(x2-x1)>=e)

{

x1=x2;

x2=(x1-f(x1)/g(x1));

}

cout<<"方程的根X 为:"<

while (test(xo)==1){xo+=h;} // 求根x=0最大的迭代区间

cout<<"X=0的最大迭代区间为(-"<

}

输出结果:

X=0的最大迭代区间为 (-0.774597,0.774597); =ε0.0000000005

∈0x (-∞,-1) ; 收敛于*

1x .

∈0x (-1,-δ); 收敛于*

3x .

∈0x (-δ,δ); 收敛于*

2x .

∈0x (δ,1); 收敛于*

1x .

∈0x (1, ∞); 收敛于*

3x .

习题3

35.(上机题)列主元三角分解法

对于某电路的分析,归结为求解线性方程组RI =V 。其中R =

??

?

?

?

?

?

?

?

?

??

??

??????????????------------------2920000000227005000000413000000003047700000507573000090003079100000000103190000011093513000100001331

V T = (-15,27,-23,0,-20,12,-7,7,10)T

(1)编制n 阶线性方程组Ax =b 的列主元三角分解的通用程序;

(2)用所编的程序解线性方程组RI =V ,并打印出向量,保留5位有效数;

(3)本题编程中,你提高了哪些编程能力?

c++代码:

#include

float a[99][100],s[99],temp[100],x[100],y[100];

int n,i,j,max;

int min(int x,int y){ //取x,y中的小者;

int z;

if (x

else z=y;

return z;

}

float sigma(int i,int j){ //对已经算出的行列作积和;

float v=0.0;

for (int q=0;q

return v;

}

void main(){

cout<<"请输入阶数n:";

cin>>n;

cout<

for (i=0;i

{

cout<<"请输入增广矩阵的第"<

for (j=0;j<=n;j++) cin>>a[i][j];

cout<

}

for (i=0;i

max=0; //找第一个主元

for (i=1;is[max]) max=i;

for (j=0;j<=n;j++) //交换行

{

temp[j]=a[0][j];

a[0][j]=a[max][j];

a[max][j]=temp[j];

}

for (i=1;i

for (i=1;i

{

for (j=i;j

max=i; //找出列主元

for (j=i+1;js[max]) max=j;

if (max != i)

{

for (j=0;j<=n;j++)

{

temp[j]=a[i][j];

a[i][j]=a[max][j];

a[max][j]=temp[j];

}

}

for (j=i;j<=n;j++) a[i][j]=a[i][j]-sigma(i,j);

for (j=i+1;j

}

//求解

x[n-1]=a[n-1][n]/a[n-1][n-1];

for (i=n-2;i>=0;i--)

{

for (j=n-1,y[i]=0.0;j>i;j--) y[i]=x[j]*a[i][j]+y[i];

x[i]=(a[i][n]-y[i])/a[i][i];

}

//输出

cout<<"X=[";

for (i=0;i

{

cout<

i++;

if(i

}

cout<<"]T"<

}

计算结果:

x=[-0.28923,0.34544.-0.71281,-0.22061,-0.4304,0.15431,-0.057823,0.20105]T

体会:本题对矩阵的处理大量的使用了C 语言中的For 循环和数组,对数组和For 循环的

联合使用有个深刻体会。

36.(上机题)逐次超松弛迭代法

(1) 编制解n 阶线性方程组Ax =b 的SOR 方法的通用程序(要求ε≤-∞-)

1()(k k x x );

(2) 对于上题中所给线性方程组,取松弛因子)99,,2,1(50/???==i i i ω ,容许误差

51021

-?=ε,打印松弛因子,迭代次数,最佳松弛因子及解向量。

c++代码:

#include

#include

typedef float array[100];

float a[99][100],x1[100],x2[100],x3[100],w,e;

int n,i,j,num[99],number, next;

void print(){ //打印解向量;

cout<<"X=[";

for (int i=0;i

{

cout<

if (i

}

cout<<"]T"<

}

float condition(array kkw,array qql){

float max=(float) fabs(qql[0]-kkw[0]);

for (int k=1;k

if (fabs(qql[k]-kkw[k])>max)

max=(float) fabs(qql[k]-kkw[k]);

return max;

}

float u(int i,array & kkw,array & qql){

float wang=0.0;

int j;

for (j=0;j

if (j

else if (j>i) wang=wang+a[i][j]*kkw[j];

else wang=wang;

return wang;

}

int wopt(int num[100]){ // 求最佳的松弛因子

int min=0;

for (int k=1;k<99;k++)

if (num[min]>num[k]) min=k;

cout<<"最佳松弛因子:"<<(min+1)/50.0<

return min;

}

int calculation(float w,array & kkw,array & qql,int & number){ //计算迭代 do

{

for (j=0;j

for (int k=0;k

qql[k]=(1-w)*kkw[k]+w*(a[k][n]-u(k,kkw,qql))/a[k][k];

number=number+1;

}

while (condition(kkw,qql)>e);

return number;

}

void main(){

cout<<"请输入阶数n:";

cin>>n;

cout<

for (i=0;i

{

cout<<"请输入增广矩阵的第"<

for (j=0;j<=n;j++) cin>>a[i][j];

cout<

}

cout<<"请输入允许误差E:";

cin>>e;

cout<

cout<<"请输入迭代初值:";

for (i=0;i>x2[i];

cout<

for(j=0;j

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

{

num[i-1]=0;

for (j=0;j

{

x3[j]=x1[j];

x2[j]=x1[j];

}

w=(float) (i/50.0);

calculation(w,x3,x2,num[i-1]);

cout<<"松弛因子W="<

cout<<"迭代次数为"<

print();

if (i%40==0)

{

cout<<"Press any key to pagedown:";

cin>>next;

}

}

wopt(num);

}

输出结果:

松弛因子W=0.02迭代次数为855次

X=[-0.288486,0.346213,-0.712309,-0.220258,-0.430004,0.154916,-0.0572211,0.20118 3,0.290406]T

松弛因子W=0.04迭代次数为477次

X=[-0.288845,0.345826,-0.712565,-0.220437,-0.430203,0.154642,-0.0574909,0.20111 7,0.290313]T

松弛因子W=0.06迭代次数为336次

X=[-0.288971,0.345696,-0.712649,-0.220496,-0.430269,0.15454,-0.0575923,0.201095 ,0.290284]T

松弛因子W=0.08迭代次数为261次

X=[-0.289036,0.345629,-0.712692,-0.220526,-0.430303,0.154485,-0.0576474,0.20108 4,0.290269]T

松弛因子W=0.1迭代次数为214次

X=[-0.289076,0.345588,-0.712718,-0.220544,-0.430324,0.15445,-0.0576824,0.201077 ,0.29026]T

松弛因子W=0.12迭代次数为182次

X=[-0.289106,0.345559,-0.712737,-0.220557,-0.430339,0.154424,-0.0577084,0.20107 3,0.290253]T

松弛因子W=0.14迭代次数为158次

X=[-0.289125,0.34554,-0.712749,-0.220565,-0.430349,0.154407,-0.0577255,0.20107, 0.290249]T

松弛因子W=0.16迭代次数为140次

X=[-0.289142,0.345523,-0.712759,-0.220572,-0.430357,0.154392,-0.0577405,0.20106 7,0.290246]T

松弛因子W=0.18迭代次数为125次

X=[-0.289151,0.345514,-0.712765,-0.220576,-0.430362,0.154383,-0.0577495,0.20106 5,0.290244]T

松弛因子W=0.2迭代次数为113次

X=[-0.28916,0.345505,-0.71277,-0.22058,-0.430366,0.154375,-0.0577577,0.201064,0

.290242]T

松弛因子W=0.22迭代次数为103次

X=[-0.289168,0.345498,-0.712775,-0.220583,-0.43037,0.154368,-0.0577644,0.201063 ,0.290241]T

松弛因子W=0.24迭代次数为95次

X=[-0.289176,0.34549,-0.712779,-0.220586,-0.430374,0.154361,-0.0577719,0.201062 ,0.290239]T

松弛因子W=0.26迭代次数为88次

X=[-0.289182,0.345484,-0.712783,-0.220589,-0.430377,0.154355,-0.0577778,0.20106 1,0.290238]T

松弛因子W=0.28迭代次数为82次

X=[-0.289188,0.345478,-0.712787,-0.220591,-0.43038,0.15435,-0.0577831,0.20106,0 .290237]T

松弛因子W=0.3迭代次数为76次

X=[-0.28919,0.345476,-0.712788,-0.220592,-0.430381,0.154348,-0.057785,0.20106,0 .290236]T

松弛因子W=0.32迭代次数为71次

X=[-0.289193,0.345473,-0.712789,-0.220593,-0.430382,0.154345,-0.0577879,0.20105 9,0.290236]T

松弛因子W=0.34迭代次数为67次

X=[-0.289197,0.345469,-0.712792,-0.220595,-0.430384,0.154341,-0.057792,0.201059 ,0.290235]T

松弛因子W=0.36迭代次数为63次

X=[-0.2892,0.345467,-0.712794,-0.220596,-0.430386,0.154339,-0.0577943,0.201058, 0.290234]T

松弛因子W=0.38迭代次数为59次

X=[-0.2892,0.345466,-0.712794,-0.220596,-0.430386,0.154338,-0.0577949,0.201058, 0.290234]T

松弛因子W=0.4迭代次数为56次

X=[-0.289203,0.345463,-0.712796,-0.220597,-0.430387,0.154335,-0.0577978,0.20105 8,0.290234]T

松弛因子W=0.42迭代次数为53次

X=[-0.289205,0.345462,-0.712797,-0.220598,-0.430388,0.154334,-0.0577995,0.20105 7,0.290233]T

松弛因子W=0.44迭代次数为51次

X=[-0.28921,0.345457,-0.712799,-0.2206,-0.43039,0.154329,-0.0578035,0.201057,0. 290232]T

松弛因子W=0.46迭代次数为48次

X=[-0.289209,0.345458,-0.712799,-0.2206,-0.43039,0.15433,-0.0578034,0.201057,0. 290233]T

松弛因子W=0.48迭代次数为46次

X=[-0.289212,0.345455,-0.712801,-0.220601,-0.430391,0.154327,-0.0578057,0.20105 6,0.290232]T

松弛因子W=0.5迭代次数为44次

X=[-0.289214,0.345453,-0.712802,-0.220601,-0.430392,0.154325,-0.0578074,0.20105 6,0.290232]T

松弛因子W=0.52迭代次数为42次

X=[-0.289215,0.345452,-0.712802,-0.220602,-0.430393,0.154324,-0.0578085,0.20105 6,0.290231]T

松弛因子W=0.54迭代次数为40次

X=[-0.289216,0.345452,-0.712803,-0.220602,-0.430393,0.154324,-0.0578092,0.20105 6,0.290231]T

松弛因子W=0.56迭代次数为38次

X=[-0.289216,0.345451,-0.712803,-0.220602,-0.430393,0.154323,-0.0578095,0.20105 6,0.290231]T

松弛因子W=0.58迭代次数为37次

X=[-0.289219,0.345448,-0.712804,-0.220603,-0.430395,0.154321,-0.0578121,0.20105 6,0.290231]T

松弛因子W=0.6迭代次数为35次

X=[-0.289219,0.345449,-0.712804,-0.220603,-0.430394,0.154321,-0.0578117,0.20105 6,0.290231]T

松弛因子W=0.62迭代次数为34次

X=[-0.289221,0.345447,-0.712805,-0.220604,-0.430395,0.154319,-0.0578137,0.20105 5,0.29023]T

松弛因子W=0.64迭代次数为32次

X=[-0.28922,0.345448,-0.712805,-0.220604,-0.430395,0.15432,-0.0578128,0.201055, 0.290231]T

松弛因子W=0.66迭代次数为31次

X=[-0.289221,0.345446,-0.712806,-0.220604,-0.430396,0.154318,-0.0578143,0.20105 5,0.29023]T

松弛因子W=0.68迭代次数为30次

X=[-0.289223,0.345445,-0.712806,-0.220605,-0.430396,0.154317,-0.0578155,0.20105 5,0.29023]T

松弛因子W=0.7迭代次数为29次

X=[-0.289224,0.345444,-0.712807,-0.220605,-0.430397,0.154316,-0.0578164,0.20105 5,0.29023]T

松弛因子W=0.72迭代次数为27次

X=[-0.289222,0.345446,-0.712806,-0.220604,-0.430396,0.154318,-0.0578149,0.20105 5,0.29023]T

松弛因子W=0.74迭代次数为26次

X=[-0.289223,0.345445,-0.712806,-0.220605,-0.430396,0.154317,-0.0578156,0.20105 5,0.29023]T

松弛因子W=0.76迭代次数为25次

X=[-0.289223,0.345445,-0.712807,-0.220605,-0.430396,0.154317,-0.0578162,0.20105 5,0.29023]T

松弛因子W=0.78迭代次数为24次

X=[-0.289224,0.345444,-0.712807,-0.220605,-0.430397,0.154316,-0.0578166,0.20105 5,0.29023]T

松弛因子W=0.8迭代次数为24次

X=[-0.289227,0.345441,-0.712809,-0.220606,-0.430398,0.154313,-0.0578189,0.20105 5,0.290229]T

松弛因子W=0.82迭代次数为23次

X=[-0.289227,0.345441,-0.712809,-0.220606,-0.430398,0.154313,-0.0578191,0.20105 4,0.290229]T

松弛因子W=0.84迭代次数为22次

X=[-0.289227,0.345441,-0.712809,-0.220606,-0.430398,0.154313,-0.0578192,0.20105 4,0.290229]T

松弛因子W=0.86迭代次数为21次

X=[-0.289227,0.345441,-0.712809,-0.220606,-0.430398,0.154313,-0.0578193,0.20105 4,0.290229]T

松弛因子W=0.88迭代次数为20次

X=[-0.289227,0.345441,-0.712809,-0.220606,-0.430398,0.154313,-0.0578193,0.20105 4,0.290229]T

松弛因子W=0.9迭代次数为19次

X=[-0.289227,0.345441,-0.712809,-0.220606,-0.430398,0.154313,-0.0578192,0.20105 4,0.290229]T

松弛因子W=0.92迭代次数为19次

X=[-0.289229,0.345439,-0.71281,-0.220607,-0.430399,0.154312,-0.0578207,0.201054 ,0.290229]T

松弛因子W=0.94迭代次数为18次

X=[-0.289229,0.345439,-0.71281,-0.220607,-0.430399,0.154312,-0.0578206,0.201054 ,0.290229]T

松弛因子W=0.96迭代次数为17次

X=[-0.289229,0.34544,-0.71281,-0.220607,-0.430399,0.154312,-0.0578205,0.201054, 0.290229]T

松弛因子W=0.98迭代次数为17次

X=[-0.289231,0.345438,-0.71281,-0.220608,-0.430399,0.154311,-0.0578215,0.201054 ,0.290229]T

松弛因子W=1迭代次数为16次

X=[-0.28923,0.345438,-0.71281,-0.220607,-0.430399,0.154311,-0.0578214,0.201054, 0.290229]T

松弛因子W=1.02迭代次数为15次

X=[-0.28923,0.345439,-0.71281,-0.220607,-0.430399,0.154311,-0.0578213,0.201054, 0.290229]T

松弛因子W=1.04迭代次数为15次

X=[-0.289232,0.345437,-0.712811,-0.220608,-0.4304,0.15431,-0.057822,0.201054,0. 290229]T

松弛因子W=1.06迭代次数为14次

X=[-0.289231,0.345438,-0.712811,-0.220608,-0.4304,0.15431,-0.057822,0.201054,0. 290229]T

松弛因子W=1.08迭代次数为13次

X=[-0.28923,0.345438,-0.71281,-0.220608,-0.4304,0.15431,-0.0578219,0.201054,0.2

90229]T

松弛因子W=1.1迭代次数为13次

X=[-0.289232,0.345437,-0.712811,-0.220608,-0.4304,0.154309,-0.0578224,0.201054, 0.290229]T

松弛因子W=1.12迭代次数为12次

X=[-0.289232,0.345437,-0.712811,-0.220608,-0.4304,0.154309,-0.0578224,0.201054, 0.290229]T

松弛因子W=1.14迭代次数为11次

X=[-0.289232,0.345437,-0.712811,-0.220608,-0.4304,0.154309,-0.0578225,0.201054, 0.290229]T

松弛因子W=1.16迭代次数为11次

X=[-0.289233,0.345436,-0.712811,-0.220608,-0.4304,0.154309,-0.0578228,0.201054, 0.290229]T

松弛因子W=1.18迭代次数为10次

X=[-0.289234,0.345436,-0.712812,-0.220608,-0.4304,0.154309,-0.0578229,0.201054, 0.290229]T

松弛因子W=1.2迭代次数为10次

X=[-0.289234,0.345436,-0.712812,-0.220609,-0.4304,0.154309,-0.0578229,0.201054, 0.290229]T

松弛因子W=1.22迭代次数为10次

X=[-0.289232,0.345437,-0.712812,-0.220609,-0.430401,0.154309,-0.0578228,0.20105 4,0.290229]T

松弛因子W=1.24迭代次数为11次

X=[-0.289234,0.345435,-0.712812,-0.220609,-0.4304,0.154309,-0.0578229,0.201054, 0.290229]T

松弛因子W=1.26迭代次数为11次

X=[-0.289235,0.345434,-0.712812,-0.220609,-0.4304,0.154309,-0.0578229,0.201054, 0.290228]T

松弛因子W=1.28迭代次数为12次

X=[-0.289235,0.345436,-0.712812,-0.220608,-0.4304,0.154309,-0.0578228,0.201054, 0.290229]T

松弛因子W=1.3迭代次数为13次

X=[-0.289233,0.345436,-0.712812,-0.220609,-0.4304,0.154309,-0.0578228,0.201054, 0.290229]T

松弛因子W=1.32迭代次数为13次

X=[-0.289232,0.345435,-0.712812,-0.220609,-0.4304,0.154309,-0.0578229,0.201054, 0.290228]T

松弛因子W=1.34迭代次数为14次

X=[-0.289236,0.345435,-0.712812,-0.220608,-0.4304,0.154309,-0.0578229,0.201054, 0.290229]T

松弛因子W=1.36迭代次数为15次

X=[-0.289233,0.345436,-0.712811,-0.220608,-0.4304,0.154309,-0.0578228,0.201054, 0.290229]T

松弛因子W=1.38迭代次数为16次

X=[-0.289234,0.345436,-0.712812,-0.220609,-0.4304,0.154309,-0.0578229,0.201054, 0.290229]T

松弛因子W=1.4迭代次数为16次

X=[-0.289234,0.345435,-0.712812,-0.220609,-0.430401,0.154309,-0.0578229,0.20105 4,0.290229]T

松弛因子W=1.42迭代次数为17次

X=[-0.289235,0.345435,-0.712812,-0.220608,-0.4304,0.154309,-0.0578229,0.201054, 0.290229]T

松弛因子W=1.44迭代次数为17次

X=[-0.289236,0.345435,-0.712811,-0.220608,-0.4304,0.154309,-0.0578229,0.201055, 0.290229]T

松弛因子W=1.46迭代次数为19次

X=[-0.289233,0.345435,-0.712812,-0.220609,-0.430401,0.154309,-0.0578229,0.20105 4,0.290229]T

松弛因子W=1.48迭代次数为20次

X=[-0.289235,0.345435,-0.712812,-0.220608,-0.4304,0.154309,-0.0578228,0.201054, 0.290229]T

松弛因子W=1.5迭代次数为20次

X=[-0.289237,0.345435,-0.712811,-0.220608,-0.4304,0.154309,-0.0578227,0.201053, 0.290229]T

松弛因子W=1.52迭代次数为22次

X=[-0.289233,0.345435,-0.712813,-0.220609,-0.430401,0.154309,-0.057823,0.201053 ,0.290228]T

松弛因子W=1.54迭代次数为24次

X=[-0.289233,0.345437,-0.712811,-0.220608,-0.4304,0.154309,-0.0578228,0.201054, 0.290228]T

松弛因子W=1.56迭代次数为25次

X=[-0.289233,0.345435,-0.712813,-0.220609,-0.430401,0.154309,-0.0578232,0.20105 4,0.290229]T

松弛因子W=1.58迭代次数为26次

X=[-0.289236,0.345433,-0.712812,-0.220608,-0.430399,0.154308,-0.0578227,0.20105 4,0.290229]T

松弛因子W=1.6迭代次数为28次

X=[-0.28923,0.345436,-0.712813,-0.22061,-0.430401,0.154309,-0.0578233,0.201054, 0.290228]T

松弛因子W=1.62迭代次数为31次

X=[-0.289232,0.345437,-0.712812,-0.220609,-0.430401,0.154309,-0.057823,0.201054 ,0.290228]T

松弛因子W=1.64迭代次数为34次

X=[-0.289231,0.345437,-0.712811,-0.220609,-0.430401,0.154309,-0.057823,0.201054 ,0.290228]T

松弛因子W=1.66迭代次数为36次

X=[-0.289236,0.345436,-0.71281,-0.220607,-0.4304,0.154309,-0.0578224,0.201054,0 .290229]T

松弛因子W=1.68迭代次数为39次

X=[-0.289238,0.345435,-0.712811,-0.220607,-0.430399,0.154309,-0.0578224,0.20105 4,0.290229]T

松弛因子W=1.7迭代次数为44次

X=[-0.289231,0.345435,-0.712813,-0.22061,-0.430401,0.154309,-0.0578234,0.201054 ,0.290228]T

松弛因子W=1.72迭代次数为50次

X=[-0.289231,0.345438,-0.712811,-0.220609,-0.430401,0.154309,-0.057823,0.201054 ,0.290228]T

松弛因子W=1.74迭代次数为55次

X=[-0.289237,0.345434,-0.712811,-0.220607,-0.430399,0.154309,-0.0578224,0.20105 4,0.29023]T

松弛因子W=1.76迭代次数为63次

X=[-0.28923,0.345438,-0.712812,-0.22061,-0.430402,0.154309,-0.0578233,0.201054, 0.290228]T

松弛因子W=1.78迭代次数为76次

X=[-0.289232,0.345437,-0.712812,-0.220609,-0.430401,0.154309,-0.0578233,0.20105 4,0.290228]T

松弛因子W=1.8迭代次数为89次

X=[-0.289231,0.345436,-0.712813,-0.22061,-0.430402,0.154309,-0.0578235,0.201054 ,0.290228]T

松弛因子W=1.82迭代次数为110次

X=[-0.289237,0.345435,-0.712811,-0.220607,-0.430399,0.154309,-0.0578222,0.20105 4,0.290229]T

松弛因子W=1.84迭代次数为144次

X=[-0.289231,0.345436,-0.712813,-0.22061,-0.430402,0.154309,-0.0578236,0.201054 ,0.290228]T

松弛因子W=1.86迭代次数为207次

X=[-0.289237,0.345434,-0.712811,-0.220607,-0.430399,0.154309,-0.0578222,0.20105 4,0.29023]T

松弛因子W=1.88迭代次数为361次

X=[-0.28923,0.345436,-0.712813,-0.22061,-0.430402,0.154309,-0.0578238,0.201054, 0.290228]T

松弛因子W=1.9迭代次数为1412次

X=[-0.289238,0.345434,-0.71281,-0.220607,-0.430398,0.154309,-0.0578218,0.201054 ,0.29023]T

松弛因子W=1.92迭代次数为5500次

X=[5.36544e+036,1.59217e+037,1.06103e+037,1.#INF,1.#INF,-1.#IND,-1.#IND,-1.#IND ,-1.#IND]T

松弛因子W=1.94迭代次数为2209次

X=[3.62967e+036,1.66464e+037,1.2324e+037,1.#INF,1.#INF,-1.#IND,-1.#IND,-1.#IND, -1.#IND]T

松弛因子W=1.96迭代次数为1393次

X=[6.29722e+036,1.80062e+037,1.19067e+037,1.#INF,1.#INF,-1.#IND,-1.#IND,-1.#IND

,-1.#IND]T

松弛因子W=1.98迭代次数为1023次

X=[-1.55973e+037,-1.#INF,-1.#INF,-1.#IND,-1.#IND,-1.#IND,-1.#IND,-1.#IND,-1.#IN D]T

最佳松弛因子:1.18,1.2,1.22

习题4

38.(上机题)3次样条插值函数

(1)编制求第一型3次样条插值函数的通用程序;

端点条件为y

0'=0.8,y

'=0.2。用所编的程序求出车门的3次样条插值函数S(x),

并打印出S(i+0.5)(i=0,1,…,9)。

c++代码:

#include

#include

float x1[100],f1[100],f2[99],f3[98],m[100],a[100][101],x,d[100];

float c[99],e[99],h[99],u[99],w[99],y_0,y_n,arr,s;

int i,j,k,n,q;

void selectprint(float y)

{

if ((y>0)&&(y!=1)) cout<<"+"<

else if (y==1) cout<<"+";

else if (y<0) cout<

}

void printY(float y){

if (y!=0) cout<

}

float calculation(float x){

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

if (x<=x1[j])

{

s=(float)(f1[j-1]+c[j-1]*(x-x1[j-1])+m[j-1]/2.0*(x-x1[j-1])*(x-x1[j-1])+e[j-1]* (x-x1[j-1])*(x-x1[j-1])*(x-x1[j-1]));

break;

}

return s;

}

void main()

{

do{

cout<<"请输入n值:";

cin>>n;

if ((n>100)||(n<1)) cout<<"请重新输入整数(1..100):"<

}

while ((n>100)||(n<1));

cout<<"请输入Xi(i=0,1,...,"<

for (i=0;i<=n;i++) cin>>x1[i];

cout<

cout<<"请输入Yi(i=0,1,...,"<

for (i=0;i<=n;i++) cin>>f1[i];

cout<

cout<<"请输入第一型边界条件Y'0,Y'n:";

cin>>y_0>>y_n;

cout<

for (i=0;i

for (i=1;i

for (i=1;i

for (i=0;i

d[0]=6*(f2[0]-y_0)/h[0];

d[n]=6*(y_n-f2[n-1])/h[n-1];

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

for (j=0;j<=n;j++)

if (i==j) a[i][j]=2;

else a[i][j]=0;

a[0][1]=1;

a[n][n-1]=1;

for (i=1;i

{

a[i][i-1]=u[i];

a[i][i+1]=w[i];

}

for (i=0;i<=n;i++) a[i][n+1]=d[i];

for (i=1;i<=n;i++) //用追赶法解方程,得M[i]

{

arr=a[i][i-1];

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

a[i][j]=a[i][j]-a[i-1][j]*arr/a[i-1][i-1];

}

m[n]=a[n][n+1]/a[n][n];

for (i=n-1;i>=0;i--) m[i]=(a[i][n+1]-a[i][i+1]*m[i+1])/a[i][i];

for (i=0;i

c[i]=(float) (f2[i]-(1.0/3.0*m[i]+1.0/6.0*m[i+1])*h[i]);

for (i=0;i

e[i]=(m[i+1]-m[i])/(6*h[i]);

for (i=0;i

{

cout<<"X属于区间["<

cout<<"S(x)=";

printY(f1[i]);

if (c[i]!=0)

{

selectprint(c[i]);

cout<<"(x";

printY(-x1[i]);

cout<<")";

}

if (m[i]!=0)

{

selectprint((float)(m[i]/2.0));

for (q=0;q<2;q++)

{

cout<<"(x";

printY(-x1[i]);

cout<<")";

}

}

if (e[i]!=0)

{

selectprint(e[i]);

for (q=0;q<3;q++)

{

cout<<"(x";

printY(-x1[i]);

cout<<")";

}

}

cout<

}

cout<<"针对本题,计算S(i+0.5)(i=0,1,...,9):"<

for (i=0;i<10;i++)

{

if ((i+0.5<=x1[n])&&(i+0.5>=x1[0]))

{

calculation((float)(i+0.5));

cout<<"S("<

}

else cout<

};

cout<

}

输出结果:

X属于区间[0,1]时S(x)=2.51+0.8(x)-0.0014861(x)(x)-0.00851395(x)(x)(x)

X属于区间[1,2]时

S(x)=3.3+0.771486(x-1)-0.027028(x-1)(x-1)-0.00445799(x-1)(x-1)(x-1)

X属于区间[2,3]时

S(x)=4.04+0.704056(x-2)-0.0404019(x-2)(x-2)-0.0036543(x-2)(x-2)(x-2)

X属于区间[3,4]时

S(x)=4.7+0.612289(x-3)-0.0513648(x-3)(x-3)-0.0409245(x-3)(x-3)(x-3)

X属于区间[4,5]时

S(x)=5.22+0.386786(x-4)-0.174138(x-4)(x-4)+0.107352(x-4)(x-4)(x-4)

X属于区间[5,6]时

S(x)=5.54+0.360567(x-5)+0.147919(x-5)(x-5)-0.268485(x-5)(x-5)(x-5)

X属于区间[6,7]时

S(x)=5.78-0.149051(x-6)-0.657537(x-6)(x-6)+0.426588(x-6)(x-6)(x-6)

X属于区间[7,8]时

S(x)=5.4-0.184361(x-7)+0.622227(x-7)(x-7)-0.267865(x-7)(x-7)(x-7)

X属于区间[8,9]时

S(x)=5.57+0.256496(x-8)-0.181369(x-8)(x-8)+0.0548728(x-8)(x-8)(x-8)

X属于区间[9,10]时

S(x)=5.7+0.058376(x-9)-0.0167508(x-9)(x-9)+0.0583752(x-9)(x-9)(x-9)

计算S(i+0.5)(i=0,1,...,9):

S(0.5)=2.90856 S(1.5)=3.67843 S(2.5)=4.38147 S(3.5)=4.98819 S(4.5)=5.38328 S(5.5)=5.7237 S(6.5)=5.59441 S(7.5)=5.42989 S(8.5)=5.65976 S(9.5)=5.7323

习题8

12(上机题) 抛物线方程Crank-Nicolson 格式

1)编制用Crank-Nicolson 格式求抛物线方程

??? a -t u/2u/?2x = f(x,t) (0

u(x,0) = )x (? (0)1x ≤≤

u(0,t) = ()x α ,u (1,t )=()t β (0

数值解的通用程序。

2)就a=1, f(x,t)=0,()x ?=exp(x),()t α=exp(t),()t β=exp(1+t),M=40,N=40,输入点(0.2,1.0),(0.4,1.0),(0.6,1.0),(.8,1.0)4点处u (x,t )的近似值。

3) 已知所给方程的精确解为u(x,t)=exp(x+t),将步长反复二分,从(0.2,1.0),(0.4,1.0),(0.6,1.0),(0.8,1.0)4点处精确解与数值解的误差观察当步 长缩小一半时,误差以什么规律缩小。

算法:

本题选择空间步长h=0.025,时间步长ζ=0.025

1.置初值;

2.通过点(i-1,k),(i-1,k+1),(i,k),(i+1,k),(i+1,k+1)求解点(I,k+1)的值;

3.输出结果

原程序:

#include

#include

float h=0.025,k=0.025;

int m=40;int n=40;

float y[40][40],r=a*k/(h*h);

void Input()

{

int i,j;

cout<<"Loading Input Data..."<

for(i=0;i

{

for(j=0;j

if (i==j) a[i][j]=1+r;

for(j=0;j

if ((j=i+1)||(i=j+1)) a[i][j]=-r/2;

} }

东南大学数值分析上机题答案

数值分析上机题 第一章 17.(上机题)舍入误差与有效数 设∑=-= N j N j S 2 2 11 ,其精确值为)111-23(21+-N N 。 (1)编制按从大到小的顺序1 -1 ···1-311-21222N S N +++=,计算N S 的通用 程序; (2)编制按从小到大的顺序1 21 ···1)1(111 222-++--+ -=N N S N ,计算N S 的通用程序; (3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数(编制程序时用单精度); (4)通过本上机题,你明白了什么? 解: 程序: (1)从大到小的顺序计算1 -1 ···1-311-21222N S N +++= : function sn1=fromlarge(n) %从大到小计算sn1 format long ; sn1=single(0); for m=2:1:n sn1=sn1+1/(m^2-1); end end (2)从小到大计算1 21 ···1)1(111 2 22 -++--+-= N N S N function sn2=fromsmall(n) %从小到大计算sn2 format long ; sn2=single(0); for m=n:-1:2 sn2=sn2+1/(m^2-1); end end (3) 总的编程程序为: function p203()

clear all format long; n=input('please enter a number as the n:') sn=1/2*(3/2-1/n-1/(n+1));%精确值为sn fprintf('精确值为%f\n',sn); sn1=fromlarge(n); fprintf('从大到小计算的值为%f\n',sn1); sn2=fromsmall(n); fprintf('从小到大计算的值为%f\n',sn2); function sn1=fromlarge(n) %从大到小计算sn1 format long; sn1=single(0); for m=2:1:n sn1=sn1+1/(m^2-1); end end function sn2=fromsmall(n) %从小到大计算sn2 format long; sn2=single(0); for m=n:-1:2 sn2=sn2+1/(m^2-1); end end end 运行结果:

数值分析上机作业

数值分析上机实验报告 选题:曲线拟合的最小二乘法 指导老师: 专业: 学号: 姓名:

课题八曲线拟合的最小二乘法 一、问题提出 从随机的数据中找出其规律性,给出其近似表达式的问题,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。 在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量y 与时间t 的拟合曲线。 二、要求 1、用最小二乘法进行曲线拟合; 2、近似解析表达式为()33221t a t a t a t ++=?; 3、打印出拟合函数()t ?,并打印出()j t ?与()j t y 的误差,12,,2,1 =j ; 4、另外选取一个近似表达式,尝试拟合效果的比较; 5、*绘制出曲线拟合图*。 三、目的和意义 1、掌握曲线拟合的最小二乘法; 2、最小二乘法亦可用于解超定线代数方程组; 3、探索拟合函数的选择与拟合精度间的关系。 四、计算公式 对于给定的测量数据(x i ,f i )(i=1,2,…,n ),设函数分布为 ∑==m j j j x a x y 0)()(? 特别的,取)(x j ?为多项式 j j x x =)(? (j=0, 1,…,m )

则根据最小二乘法原理,可以构造泛函 ∑∑==-=n i m j i j j i m x a f a a a H 1 10))((),,,(? 令 0=??k a H (k=0, 1,…,m ) 则可以得到法方程 ???? ??????? ?=????????????????????????),(),(),(),(),(),(),(),(),(),(),(),(1010101111000100m m m m m m m m f f f a a a ????????????????????? 求该解方程组,则可以得到解m a a a ,,,10 ,因此可得到数据的最小二乘解 ∑=≈m j j j x a x f 0)()(? 曲线拟合:实际工作中,变量间未必都有线性关系,如服药后血药浓度与时间的关系;疾病疗效与疗程长短的关系;毒物剂量与致死率的关系等常呈曲线关系。曲线拟合是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两变量间的关系。 五、结构程序设计 在程序结构方面主要是按照顺序结构进行设计,在进行曲线的拟合时,为了进行比较,在程序设计中,直接调用了最小二乘法的拟合函数polyfit ,并且依次调用了plot 、figure 、hold on 函数进行图象的绘制,最后调用了一个绝对值函数abs 用于计算拟合函数与原有数据的误差,进行拟合效果的比较。

数值分析实验报告1

实验一误差分析 实验1.1(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 其中ε(1.1)和(1.221,,,a a 的输出b ”和“poly ε。 (1(2 (3)写成展 关于α solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。 实验过程: 程序: a=poly(1:20); rr=roots(a); forn=2:21 n form=1:9 ess=10^(-6-m);

ve=zeros(1,21); ve(n)=ess; r=roots(a+ve); -6-m s=max(abs(r-rr)) end end 利用符号函数:(思考题一)a=poly(1:20); y=poly2sym(a); rr=solve(y) n

很容易的得出对一个多次的代数多项式的其中某一项进行很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问题可以借助于MATLAB来进行问题的分析。 学号:06450210 姓名:万轩 实验二插值法

数值分析上机题目详解

第一章 一、题目 设∑ =-= N N j S 2 j 2 1 1,其精确值为)11 123(21+--N N 。 1) 编制按从大到小的顺序1 1 13112122 2-+??+-+-=N S N ,计算S N 的通用程序。 2) 编制按从小到大的顺序1 21 1)1(111222-+ ??+--+-= N N S N ,计算S N 的通用程序。 3) 按两种顺序分别计算64210,10,10S S S ,并指出有效位数。(编制程序时用单精度) 4) 通过本次上机题,你明白了什么? 二、通用程序 N=input('Please Input an N (N>1):'); AccurateValue=single((0-1/(N+1)-1/N+3/2)/2); Sn1=single(0); for a=2:N; Sn1=Sn1+1/(a^2-1); end Sn2=single(0); for a=2:N; Sn2=Sn2+1/((N-a+2)^2-1); end fprintf('The value of Sn (N=%d)\n',N); fprintf('Accurate Calculation %f\n',AccurateValue); fprintf('Caculate from large to small %f\n',Sn1); fprintf('Caculate from small to large %f\n',Sn2); disp('____________________________________________________')

三、结果 从结果可以看出有效位数是6位。 感想:可以得出,算法对误差的传播有一定的影响,在计算时选一种好的算法可以使结果更为精确。从以上的结果可以看到从大到小的顺序导致大数吃小数的现象,容易产生较大的误差,求和运算从小数到大数所得到的结果才比较准确。

数值分析上机作业

昆明理工大学工科研究生《数值分析》上机实验 学院:材料科学与工程学院 专业:材料物理与化学 学号:2011230024 姓名: 郑录 任课教师:胡杰

P277-E1 1.已知矩阵A= 10787 7565 86109 75910 ?? ?? ?? ?? ?? ??,B= 23456 44567 03678 00289 00010 ?? ?? ?? ?? ?? ?? ?? ?? ,错误!未找到引用源。 = 11/21/31/41/51/6 1/21/31/41/51/61/7 1/31/41/51/61/71/8 1/41/51/61/71/81/9 1/51/61/71/81/91/10 1/61/71/81/91/101/11?????????????????? (1)用MA TLAB函数“eig”求矩阵全部特征值。 (2)用基本QR算法求全部特征值(可用MA TLAB函数“qr”实现矩阵的QR分解)。解:MA TLAB程序如下: 求矩阵A的特征值: clear; A=[10 7 8 7;7 5 6 5;8 6 10 9;7 5 9 10]; E=eig(A) 输出结果: 求矩阵B的特征值: clear; B=[2 3 4 5 6;4 4 5 6 7;0 3 6 7 8;0 0 2 8 9;0 0 0 1 0]; E=eig(B) 输出结果:

求矩阵错误!未找到引用源。的特征值: clear; 错误!未找到引用源。=[1 1/2 1/3 1/4 1/5 1/6; 1/2 1/3 1/4 1/5 1/6 1/7; 1/3 1/4 1/5 1/6 1/7 1/8; 1/4 1/5 1/6 1/7 1/8 1/9;1/5 1/6 1/7 1/8 1/9 1/10; 1/6 1/7 1/8 1/9 1/10 1/11]; E=eig(错误!未找到引用源。) 输出结果: (2)A= 10 7877565861097 5 9 10 第一步:A0=hess(A);[Q0,R0]=qr(A0);A1=R0*Q0 返回得到: 第二部:[Q1,R1]=qr(A1);A2=R1*Q1

数值分析上机题课后作业全部-东南大学

2015.1.9 上机作业题报告 USER

1.Chapter1 1.1题目 设S N = 1 j 2?1 N j =2 ,其精确值为 )1 1123(21+--N N 。 (1)编制按从大到小的顺序1 1 1311212 22-+??+-+-=N S N ,计算S N 的通用程序。 (2)编制按从小到大的顺序1 21 1)1(111222-+ ??+--+-= N N S N ,计算S N 的通用程序。 (3)按两种顺序分别计算64210,10,10S S S ,并指出有效位数。(编制程序时用单精度) (4)通过本次上机题,你明白了什么? 1.2程序 1.3运行结果

1.4结果分析 按从大到小的顺序,有效位数分别为:6,4,3。 按从小到大的顺序,有效位数分别为:5,6,6。 可以看出,不同的算法造成的误差限是不同的,好的算法可以让结果更加精确。当采用从大到小的顺序累加的算法时,误差限随着N 的增大而增大,可见在累加的过程中,误差在放大,造成结果的误差较大。因此,采取从小到大的顺序累加得到的结果更加精确。 2.Chapter2 2.1题目 (1)给定初值0x 及容许误差ε,编制牛顿法解方程f(x)=0的通用程序。 (2)给定方程03 )(3 =-=x x x f ,易知其有三个根3,0,3321= *=*-=*x x x ○1由牛顿方法的局部收敛性可知存在,0>δ当),(0δδ+-∈x 时,Newton 迭代序列收敛于根x2*。试确定尽可能大的δ。 ○2试取若干初始值,观察当),1(),1,(),,(),,1(),1,(0+∞+-----∞∈δδδδx 时Newton 序列的收敛性以及收敛于哪一个根。 (3)通过本上机题,你明白了什么? 2.2程序

西南交通大学数值分析题库

考试目标及考试大纲 本题库的编纂目的旨在给出多套试题,每套试题的考查范围及难度配置均基于“水平测试”原则,按照教学大纲和教学内容的要求,通过对每套试题的解答,可以客观公正的评定出学生对本课程理论体系和应用方法等主要内容的掌握水平。通过它可以有效鉴别和分离不同层次的学习水平,从而可以对学生的学习成绩给出客观的综合评定结果。 本题库力求作到能够较为全面的覆盖教学内容,同时突显对重点概念、重点内容和重要方法的考查。考试内容包括以下部分: 绪论与误差:绝对误差与相对误差、有效数字、误差传播分析的全微分法、相对误差估计的条件数方法、数值运算的若干原则、数值稳定的算法、常用数值稳定技术。 非线性方程求解:方程的近似解之二分法、迭代法全局收敛性和局部收敛定理、迭代法误差的事前估计法和事后估计法、迭代过程的收敛速度、r 阶收敛定理、Aitken加速法、Ne w to n法与弦截法、牛顿局部收敛性、Ne w to n收敛的充分条件、单双点割线法(弦截法)、重根加速收敛法。 解线性方程组的直接法:高斯消元法极其充分条件、全主元消去法、列主元消去法、高斯-若当消元法、求逆阵、各种消元运算的数量级估计与比较、矩阵三角分解法、Doolittle 和Crout三角分解的充分条件、分解法的手工操作、平方根法、Cholesky分解、改进的平方根法(免去开方)、可追赶的充分条件及适用范围、计算复杂性比较、严格对角占优阵。 解线性方程组迭代法:向量和矩阵的范数、常用向量范数的计算、范数的等价性、矩阵的相容范数、诱导范数、常用范数的计算;方程组的性态和条件数、基于条件数误差估计与迭代精度改善方法;雅可比(Jacobi)迭代法、Gauss-Seidel迭代法、迭代收敛与谱半径的关系、谱判别法、基于范数的迭代判敛法和误差估计、迭代法误差的事前估计法和事后估计法;严格对角占优阵迭代收敛的有关结论;松弛法及其迭代判敛法。 插值法:插值问题和插值法概念、插值多项式的存在性和唯一性、插值余项定理;Lagrange插值多项式;差商的概念和性质、差商与导数之间的关系、差商表的计算、牛顿(Newton)插值多项式;差分、差分表、等距节点插值公式;Hermite插值及其插值基函数、误差估计、插值龙格(Runge)现象;分段线性插值、分段抛物插值、分段插值的余项及收敛性和稳定性;样条曲线与样条函数、三次样条插值函数的三转角法和三弯矩法。 曲线拟合和函数逼近:最小二乘法原理和多项式拟合、函数线性无关概念、法方程有唯一解的条件、一般最小二乘法问题、最小二乘拟合函数定理、可化为线性拟合问题的常见函数类;正交多项式曲线拟合、离散正交多项式的三项递推法。最佳一致逼近问题、最佳一致逼近多项式、切比雪夫多项式、切比雪夫最小偏差定理、切比雪夫多项式的应用(插值余项近似极小化、多项式降幂)。本段加黑斜体内容理论推导可以淡化,但概念需要理解。 数值积分与微分:求积公式代数精度、代数精度的简单判法、插值型求积公式、插值型求积公式的代数精度;牛顿一柯特斯(Newton-Cotes)公式、辛卜生(Simpson)公式、几种低价牛顿一柯特斯求积公式的余项;牛顿一柯特斯公式的和收敛性、复化梯形公式及其截断误差、复化Simpson公式及其截断误差、龙贝格(Romberg)求积法、外推加速法、高斯型求积公式、插值型求积公式的最高代数精度、高斯点的充分必要条件。正交多项式的构造方法、高斯公式权系数的建立、Gauss-Legendre公式的节点和系数。本段加黑斜体内容理论推导可以淡化,但概念需要理解。 常微分方程数值解:常微分方程初值问题数值解法之欧拉及其改进法、龙格—库塔法、阿当姆斯方法。

东南大学数值分析上机作业汇总

东南大学数值分析上机作业 汇总 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

数值分析上机报告 院系: 学号: 姓名:

目录 作业1、舍入误差与有效数 (1) 1、函数文件cxdd.m (1) 2、函数文件cddx.m (1) 3、两种方法有效位数对比 (1) 4、心得 (2) 作业2、Newton迭代法 (2) 1、通用程序函数文件 (3) 2、局部收敛性 (4) (1)最大δ值文件 (4) (2)验证局部收敛性 (4) 3、心得 (6) 作业3、列主元素Gauss消去法 (7) 1、列主元Gauss消去法的通用程序 (7) 2、解题中线性方程组 (7) 3、心得 (9) 作业4、三次样条插值函数 (10) 1、第一型三次样条插值函数通用程序: (10) 2、数据输入及计算结果 (12)

作业1、舍入误差与有效数 设∑ =-=N j N j S 2 2 11 ,其精确值为?? ? ??---1112321N N . (1)编制按从小到大的顺序1 1 131121222-? ??+-+-=N S N ,计算N S 的通用程序; (2)编制按从大到小的顺序()1 21 11111222-???+--+-=N N S N ,计算N S 的通用程序; (3)按两种顺序分别计算642101010,,S S S ,并指出有效位数; (4)通过本上机你明白了什么? 程序: 1、函数文件cxdd.m function S=cxdd(N) S=0; i=2.0; while (i<=N) S=S+1.0/(i*i-1); i=i+1; end script 运行结果(省略>>): S=cxdd(80) S= 0.737577 2、函数文件cddx.m function S=cddx (N) S=0; for i=N:-1:2 S=S+1/(i*i-1); end script 运行结果(省略>>): S=cddx(80) S= 0.737577 3、两种方法有效位数对比

数值分析上机实验报告

数值分析上机实验报告

《数值分析》上机实验报告 1.用Newton 法求方程 X 7-X 4+14=0 在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。 1.1 理论依据: 设函数在有限区间[a ,b]上二阶导数存在,且满足条件 {}α?上的惟一解在区间平方收敛于方程所生的迭代序列 迭代过程由则对任意初始近似值达到的一个中使是其中上不变号 在区间],[0)(3,2,1,0,) (') ()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20 )()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f a b c f x f b a x f b f x f k k k k k k ==- ==∈≤-≠>+ 令 )9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3 2 2 5 333647>?''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f 故以1.9为起点 ?? ?? ? ='- =+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。当前后两个的差<=ε时,就认为求出了近似的根。本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。

1.2 C语言程序原代码: #include #include main() {double x2,f,f1; double x1=1.9; //取初值为1.9 do {x2=x1; f=pow(x2,7)-28*pow(x2,4)+14; f1=7*pow(x2,6)-4*28*pow(x2,3); x1=x2-f/f1;} while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数printf("计算结果:x=%f\n",x1);} 1.3 运行结果: 1.4 MATLAB上机程序 function y=Newton(f,df,x0,eps,M) d=0; for k=1:M if feval(df,x0)==0 d=2;break else x1=x0-feval(f,x0)/feval(df,x0); end e=abs(x1-x0); x0=x1; if e<=eps&&abs(feval(f,x1))<=eps d=1;break end end

数值分析作业思考题汇总

¥ 数值分析思考题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 1. 填空题 (1) 为便于算法在计算机上实现,必须将一个数学问题分解为 的 运算; (2) 在数值计算中为避免损失有效数字,尽量避免两个 数作减法运算;为避免 误差的扩大,也尽量避免分母的绝对值 分子的绝对值; (3) 误差有四大来源,数值分析主要处理其中的 和 ; (4) 有效数字越多,相对误差越 ; 2. 用例1.4的算法计算10,迭代3次,计算结果保留4位有效数字. 3. 推导开平方运算的误差限公式,并说明什么情况下结果误差不大于自变量误差. 4. 以下各数都是对准确值进行四舍五入得到的近似数,指出它们的有效数位、误差限和相对误差限. 95123450304051104000003346087510., ., , ., .x x x x x -==?===? 5. 证明1.2.3之定理1.1. 6. 若钢珠的的直径d 的相对误差为1.0%,则它的体积V 的相对误差将为多少。(假定钢珠为标准的球形) 7. 若跑道长的测量有0.1%的误差,对400m 成绩为60s 的运动员的成绩将会带来多大的误差和相对误差. 8. 为使20的近似数相对误差小于0.05%,试问该保留几位有效数字. 9. 一个园柱体的工件,直径d 为10.25±0.25mm,高h 为40.00±1.00mm,则它的体积V 的近似值、误差和相对误差为多少. 10 证明对一元函数运算有 r r xf x f x k x k f x εε'≈= () (())(),() 其中 并求出157f x x x ==()tan ,.时的k 值,从而说明f x x =()tan 在2 x π ≈时是病态问题. 11. 定义多元函数运算 1 1 1,,(),n n i i i i i i S c x c x εε====≤∑∑其中 求出S ε()的表达式,并说明i c 全为正数时,计算是稳定的,i c 有正有负时,误差难以控制. 12. 下列各式应如何改进,使计算更准确:

Matlab作业3(数值分析)答案

Matlab作业3(数值分析) 机电工程学院(院、系)专业班组 学号姓名实验日期教师评定 1.计算多项式乘法(x2+2x+2)(x2+5x+4)。 答: 2. (1)将(x-6)(x-3)(x-8)展开为系数多项式的形式。(2)求解在x=8时多项 式(x-1)(x-2) (x-3)(x-4)的值。 答:(1) (2)

3. y=sin(x),x从0到2π,?x=0.02π,求y的最大值、最小值、均值和标准差。 4.设x=[0.00.30.8 1.1 1.6 2.3]',y=[0.500.82 1.14 1.25 1.35 1.40]',试求二次多项式拟合系数,并据此计算x1=[0.9 1.2]时对应的y1。解:x=[0.0 0.3 0.8 1.1 1.6 2.3]'; %输入变量数据x y=[0.50 0.82 1.14 1.25 1.35 1.40]'; %输入变量数据y p=polyfit(x,y,2) %对x,y用二次多项式拟合,得到系数p x1=[0.9 1.2]; %输入点x1 y1=polyval(p,x1) %估计x1处对应的y1 p = -0.2387 0.9191 0.5318 y1 = a) 1.2909

5.实验数据处理:已知某压力传感器的测试数据如下表 p为压力值,u为电压值,试用多项式 d cp bp ap p u+ + + =2 3 ) ( 来拟 合其特性函数,求出a,b,c,d,并把拟合曲线和各个测试数据点画在同一幅图上。解: >> p=[0.0,1.1,2.1,2.8,4.2,5.0,6.1,6.9,8.1,9.0,9.9]; u=[10,11,13,14,17,18,22,24,29,34,39]; x=polyfit(p,u,3) %得多项式系数 t=linspace(0,10,100); y=polyval(x,t); %求多项式得值 plot(p,u,'*',t,y,'r') %画拟和曲线 x = 0.0195 -0.0412 1.4469 9.8267

数值分析拉格朗日插值法上机实验报告

课题一:拉格朗日插值法 1.实验目的 1.学习和掌握拉格朗日插值多项式。 2.运用拉格朗日插值多项式进行计算。 2.实验过程 作出插值点(1.00,0.00),(-1.00,-3.00),(2.00,4.00)二、算法步骤 已知:某些点的坐标以及点数。 输入:条件点数以及这些点的坐标。 输出:根据给定的点求出其对应的拉格朗日插值多项式的值。 3.程序流程: (1)输入已知点的个数; (2)分别输入已知点的X坐标; (3)分别输入已知点的Y坐标; 程序如下: #include #include #include float lagrange(float *x,float *y,float xx,int n) /*拉格朗日

插值算法*/ { int i,j; float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项*/ a=(float*)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } int main() { int i; int n; float x[20],y[20],xx,yy; printf("Input n:");

scanf("%d",&n); if(n<=0) { printf("Error! The value of n must in (0,20)."); getch();return 1; } for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); } printf("\n"); for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]); } printf("\n"); printf("Input xx:"); scanf("%f",&xx); yy=lagrange(x,y,xx,n); printf("x=%f,y=%f\n",xx,yy); getch(); } 举例如下:已知当x=1,-1,2时f(x)=0,-3,4,求f(1.5)的值。

(完整版)数值计算方法上机实习题答案

1. 设?+=1 05dx x x I n n , (1) 由递推公式n I I n n 1 51+-=-,从0I 的几个近似值出发,计算20I ; 解:易得:0I =ln6-ln5=0.1823, 程序为: I=0.182; for n=1:20 I=(-5)*I+1/n; end I 输出结果为:20I = -3.0666e+010 (2) 粗糙估计20I ,用n I I n n 51 5111+- =--,计算0I ; 因为 0095.05 6 0079.01020 201 020 ≈<<≈??dx x I dx x 所以取0087.0)0095.00079.0(2 1 20=+= I 程序为:I=0.0087; for n=1:20 I=(-1/5)*I+1/(5*n); end I 0I = 0.0083 (3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。 首先分析两种递推式的误差;设第一递推式中开始时的误差为000I I E '-=,递推过程的舍入误差不计。并记n n n I I E '-=,则有01)5(5E E E n n n -==-=-Λ。因为=20E 20020)5(I E >>-,所此递推式不可靠。而在第二种递推式中n n E E E )5 1(5110-==-=Λ,误差在缩小, 所以此递推式是可靠的。出现以上运行结果的主要原因是在构造递推式过程中,考虑误差是否得到控制, 即算法是否数值稳定。 2. 求方程0210=-+x e x 的近似根,要求4 1105-+?<-k k x x ,并比较计算量。 (1) 在[0,1]上用二分法; 程序:a=0;b=1.0; while abs(b-a)>5*1e-4 c=(b+a)/2;

东南大学《数值分析》-上机题

数值分析上机题1 设2 21 1N N j S j ==-∑ ,其精确值为1311221N N ??-- ?+?? 。 (1)编制按从大到小的顺序222 111 21311 N S N = +++---,计算N S 的通用程序。 (2)编制按从小到大的顺序22 21111(1)121 N S N N =+++----,计算N S 的通用程序。 (3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数。(编制程序时用单精度) (4)通过本上机题,你明白了什么? 程序代码(matlab 编程): clc clear a=single(1./([2:10^7].^2-1)); S1(1)=single(0); S1(2)=1/(2^2-1); for N=3:10^2 S1(N)=a(1); for i=2:N-1 S1(N)=S1(N)+a(i); end end S2(1)=single(0); S2(2)=1/(2^2-1); for N=3:10^2 S2(N)=a(N-1); for i=linspace(N-2,1,N-2) S2(N)=S2(N)+a(i); end end S1表示按从大到小的顺序的S N S2表示按从小到大的顺序的S N 计算结果

通过本上机题,看出按两种不同的顺序计算的结果是不相同的,按从大到小的顺序计算的值与精确值有较大的误差,而按从小到大的顺序计算的值与精确值吻合。从大到小的顺序计算得到的结果的有效位数少。计算机在进行数值计算时会出现“大数吃小数”的现象,导致计算结果的精度有所降低,我们在计算机中进行同号数的加法时,采用绝对值较小者先加的算法,其结果的相对误差较小。

数值分析实验报告1

实验一 误差分析 实验(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 )1.1() ()20()2)(1()(20 1∏=-=---=k k x x x x x p 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 )2.1(0 )(19=+x x p ε 其中ε是一个非常小的数。这相当于是对()中19x 的系数作一个小的扰动。我们希望比较()和()根的差别,从而分析方程()的解对扰动的敏感性。 实验内容:为了实现方便,我们先介绍两个Matlab 函数:“roots ”和“poly ”。 roots(a)u = 其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程 01121=+++++-n n n n a x a x a x a 的全部根;而函数 poly(v)b =

的输出b 是一个n+1维变量,它是以n 维变量v 的各分量为根的多项式的系数。可见“roots ”和“poly ”是两个互逆的运算函数。 ;000000001.0=ess );21,1(zeros ve = ;)2(ess ve = ))20:1((ve poly roots + 上述简单的Matlab 程序便得到()的全部根,程序中的“ess ”即是()中的ε。 实验要求: (1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。 如果扰动项的系数ε很小,我们自然感觉()和()的解应当相差很小。计算中你有什么出乎意料的发现表明有些解关于如此的扰动敏感性如何 (2)将方程()中的扰动项改成18x ε或其它形式,实验中又有怎样的现象 出现 (3)(选作部分)请从理论上分析产生这一问题的根源。注意我们可以将 方程()写成展开的形式, ) 3.1(0 ),(1920=+-= x x x p αα 同时将方程的解x 看成是系数α的函数,考察方程的某个解关于α的扰动是否敏感,与研究它关于α的导数的大小有何关系为什么你发现了什么现象,哪些根关于α的变化更敏感 思考题一:(上述实验的改进) 在上述实验中我们会发现用roots 函数求解多项式方程的精度不高,为此你可以考虑用符号函数solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。

数值分析实验题目及解答

内容包括: 实验题目1:算法的数值稳定性实验 实验题目2:LU分解实验 实验题目3:三次样条插值外推样条实验 实验题目4:第二类Fredholm 积分方程实验实验题目5:M级显式R_K法

实验题目:算法的数值稳定性实验 实验内容:计算积分()1 0()d 1515n x I n x a x ==+? (n=1,2,…,20) 易得到下面递推公式 ()()1 1I n aI n n =--+ 并有估计式 ()() ()() 1 1 111I n a n a n << +++ 计算方法: 算法一:采用下面递推公式计算: ()()1 1I n aI n n =--+ ()1,2,,20 n = 取初值()116 0ln ln 15a I a +== 算法二: 采用下面递推公式计算: ()()111I n I n a n ??-= -+???? ()20,19,,1 n =

结果分析:(分析哪个好哪个不好,原因是什么) 我觉得算法二比较好, 原因一:根据式 ()() ()() 1 1 111I n a n a n << +++得知,I(n)不可能小于 零,而算法一的计算结果有部分结果小于零。原因二:对算法一记初始误差 ε0=/I 0-I(0)/>0; 则εn =/I n -I(n)/=a/I n-1-I(n-1)/=a n *ε0 由此可知,当n=20时, ε20把ε0放大了a 20倍,其结果造成严重的。 而对于算法二^ ^ 11n n a εε-= ,…, ^ ^ 01 n n a εε=,尽管有初始误差^ 20ε,但随着计算的进程,这个误差的影响不断减小。 附:源程序:(把源程序附上) 算法一程序: >> format long >> a=15;I=log(16/15); for n=1:20 n I=-a*I+1/n end 算法二程序: >> format long >> a=15;I=31/10080; >> for n=20:-1:1 n I I=1/a*(-I+1/n); End

数值分析实验报告模板

数值分析实验报告模板 篇一:数值分析实验报告(一)(完整) 数值分析实验报告 1 2 3 4 5 篇二:数值分析实验报告 实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。利用二分法求解给定非线性方程的根,在给定的范围内,假设f(x,y)在[a,b]上连续,f(a)xf(b) 直接影响迭代的次数甚至迭代的收敛与发散。即若x0 偏离所求根较远,Newton法可能发散的结论。并且本实验中还利用利用改进的Newton法求解同样的方程,且将结果与Newton法的结果比较分析。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。掌握二分法的原理,验证二分法,在选对有根区间的前提下,必是收

敛,但精度不够。熟悉Matlab语言编程,学习编程要点。体会Newton使用时的优点,和局部收敛性,而在初值选取不当时,会发散。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b) Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式xk?1?xk?f(xk) f'(xk) 产生逼近解x*的迭代数列{xk},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 xk?1?xk?rf(xk) 'f(xk) 其中r为要求的方程的根的重数,这就是改进的Newton 法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x);

数值分析上机作业1-1

数值计算方法上机题目1 1、实验1. 病态问题 实验目的: 算法有“优”与“劣”之分,问题也有“好”和“坏”之别。所谓坏问题就是问题本身的解对数据变化的比较敏感,反之属于好问题。希望读者通过本实验对此有一个初步的体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出: 考虑一个高次的代数多项式 ∏=-= ---=20 1)()20)...(2)(1()(k k x x x x x p (E1-1) 显然该多项式的全部根为l ,2,…,20,共计20个,且每个根都是单重的(也称为简 单的)。现考虑该多项式方程的一个扰动 0)(19 =+x x p ε (E1-2) 其中ε是一个非常小的数。这相当于是对(E1-1)中19 x 的系数作一个小的扰动。我们希望比较(E1-1)和(E1-2)根的差别,从而分析方程(E1-1)的解对扰动的敏感性。 实验内容: 为了实现方便,我们先介绍两个 Matlab 函数:“roots ”和“poly ”,输入函数 u =roots (a ) 其中若变量a 存储1+n 维的向量,则该函数的输出u 为一个n 维的向量。设a 的元素依次为121,...,,+n a a a ,则输出u 的各分量是多项式方程 0...1121=++++-n n n n a x a x a x a 的全部根,而函数 b=poly(v) 的输出b 是一个n +1维变量,它是以n 维变量v 的各分量为根的多项式的系数。可见“roots ”和“Poly ”是两个互逆的运算函数. ve=zeros(1,21); ve(2)=ess; roots(poly(1:20))+ve) 上述简单的Matlab 程序便得到(E1-2)的全部根,程序中的“ess ”即是(E1-2)中的ε。 实验要求: (1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。如果扰动项的系数ε很小,我们自然感觉(E1-1)和(E1-2)的解应当相差很小。计算中你有什么出乎意料的发现?表明有些解关于如此的扰动敏感性如何? (2)将方程(E1-2)中的扰动项改成18 x ε或其他形式,实验中又有怎样的现象出现?

数值分析上机实习题

第2章插值法 1. 已知函数在下列各点的值为 试用四次牛顿插值多项式)(x p 4及三次样条韩式)(S x (自然边界条件)对数据进行插值。用图给出(){}10,11,1,0,08.02.0,,x i =+=i x y i i ,) (x p 4及)(x S Python 代码 import numpy as np import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=12) #求牛顿n 次均差 def qiujuncha(x,f,n): for i in range(1,n): for j in range(4,i-1,-1): f[j]= (f[j] - f[j-1])/(x[j]-x[j-i]) #根据牛顿多项式求值 def niudun(x,f,x1): sum = f[0]; tmp = 1; for i in range(1,5): tmp *= (x1-x[i-1]) sum = sum + f[i]*tmp return sum #牛顿插值画图 def drawPic(x,f): x1 = np.linspace(0.2, 1, 100) plt.plot(x1, niudun(x,f,x1)) plt.title(u"牛顿四次插值",fontproperties=font_set) plt.xlabel(u"x 轴",fontproperties=font_set) plt.ylabel(u"y 轴", fontproperties=font_set) plt.show() def qiu_h(x,h): n = len(x) -1 for i in range(n): print(i) h[i] = x[i+1]-x[i] #自然边界条件下的三次样条插值求M

相关主题