西安交大计算方法Word格式.docx

上传人:b****3 文档编号:17850633 上传时间:2022-12-11 格式:DOCX 页数:21 大小:776.49KB
下载 相关 举报
西安交大计算方法Word格式.docx_第1页
第1页 / 共21页
西安交大计算方法Word格式.docx_第2页
第2页 / 共21页
西安交大计算方法Word格式.docx_第3页
第3页 / 共21页
西安交大计算方法Word格式.docx_第4页
第4页 / 共21页
西安交大计算方法Word格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

西安交大计算方法Word格式.docx

《西安交大计算方法Word格式.docx》由会员分享,可在线阅读,更多相关《西安交大计算方法Word格式.docx(21页珍藏版)》请在冰豆网上搜索。

西安交大计算方法Word格式.docx

for(doublea=2000.0;

a>

=1001.0;

a--)

s+=1.0/a;

s=s+1000;

System.out.println("

正序和"

+s);

逆序和"

+y);

}

运行结果:

结论:

显然假设是double类型的数据时,先算大数的过程吃掉了末尾的小数被进位所埋没,导致了大数吃小数的误差,按从小到大(从右向左)的计算顺序所得的结果与真值相近,而按从大到小(从左到右)的计算顺序所得的结果与真值的误差较大。

1-18.设(x)=1+x+++…+,计算(-5)和1/(5),哪个接近?

解法一:

用JAVA语言编写:

publicclasssecond

{publicstaticvoidmain(String[]args)

{doubles1=1,s2=1;

doublee=1,sum=1;

//e的初值为1,sum用来存放n!

inta=1;

while(sum<

Math.pow(10,1000000)){

sum=a*sum;

e=1.0/sum+e;

a++;

doubleb=1.0/(e*e*e*e*e);

较为精确的值1/e^5="

+b);

for(inti=1;

i<

=24;

i++)

s1+=cimi1(i);

s2+=cimi2(i);

s1=1.0/s1;

1/S24(5)="

+s1);

S24(-5)="

+s2);

publicstaticdoublecimi1(intai)

{doublexi=1;

for(inti=ai;

i>

=1;

i--)

xi=xi*(5.0/i);

returnxi;

publicstaticdoublecimi2(intai)

xi=xi*(-5.0/i);

运行结果:

解法二:

用matlab编程并运行,如下:

(1)计算(-5)

运行结果如下:

(2)计算1/(5)

而的真是结果为0.006737946

比较得1/(5)的计算结果与真实值更接近

解法三:

也可以用C++编写:

#include"

stdafx.h"

#include"

stdio.h"

iostream"

usingnamespacestd;

intmain(intargc,char*argv[])

{intfunc1(int);

doublefunc2(int);

doubley=0;

inti;

for(i=1;

25;

{intz=func1(i);

doublee=func2(i);

y+=z/e;

cout<

<

"

----------------------------------------"

endl;

1/S(5)的运算结果是:

"

1.0/(y+1)<

cout<

return0;

intfunc1(intx){

inty=1;

intk;

for(k=0;

k<

x;

k++)

y*=5;

returny;

doublefunc2(intn){

doubley=1;

intj;

for(j=1;

j<

=n;

j++)

y*=j;

运行结果如下图:

通过比较上述的几种编程结果,可以看出1/S(5),更接近真实值,而且用matlab更为简便,可以直接利用函数库,并可以轻松的嵌入秦九韶算法,大大减少运算量和时间。

1.已知方程组

++=

的真解===1,且令a=,b=,c=,d=时利用克莱姆法则可将真解表示为

G=0.45a--0.1125

=[(0.2a–0.0625)b+(0.25a–0.1)c+(0.125-)d]/G

=-[(0.1–0.25a)b+(-0.2)c+(0.25–0.5a)d]/G

=[(0.125-)b+(0.5a–0.25)c+(a–0.25)d]/G

试将a,b,c,d依次取2~6位近似有效数,分别计算,,。

解:

用matlab编程如下:

将a,b,c,d依次取2~6位近似有效数

取2位有效近似有效数

取3位有效近似有效数

取4位有效近似有效数

取5位有效近似有效数

取6位有效近似有效数

随着所选取的近似有效位越多,计算的结果越接近真解

2.将选主元和不选主元高斯消去法编程程序。

解方程组:

+=7

++=15

+6+=15

…………

6+=14

并且比较将结果与真实值比较。

publicclassdaI{

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

double[][]a;

double[]x;

double[]L;

doublec=0.0,sum=0.0;

a=newdouble[85][86];

x=newdouble[85];

L=newdouble[86];

for(inti=1;

i<

85;

i++){

for(intj=1;

j<

86;

j++){

a[i][j]=0;

}

}

a[1][1]=6;

a[1][2]=1;

a[84][83]=8;

a[84][84]=6;

a[1][85]=7;

a[84][85]=14;

for(inti=2;

84;

a[i][i]=6;

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

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

a[i][85]=15;

for(intk=1;

k<

k++){

for(inti=k+1;

c=a[i][k]/a[k][k];

for(intj=k+1;

a[i][j]=a[i][j]-c*a[k][j];

}

x[84]=a[84][85]/a[84][84];

for(intk=83;

k>

0;

k--){

for(intj=k+1;

sum=sum+a[k][j]*x[j];

x[k]=(a[k][85]-sum)/a[k][k];

sum=0.0;

System.out.println("

x["

+i+"

]="

+x[i]);

运行如下:

将不选主元法用matlab编程如下:

将选主元法用matlab编程如下:

输入系数阵A和常数项b,计算得方程组的结果为x=[1,1,1,1,1,1,1,1,1......]。

用methematican语言实现选主元过程及其结果如下:

通过选主元与不选主元计算出的结果与真实结果比较,得出:

用选主元得到的结果与真实值相近,原因是用选主元的方法可以避免在计算时出现小除数的现象,从而避免了病态问题的出现。

所以用选主元法比不选主元法计算出的结果准确。

3.已知函数f(x)=1/(1+),x1,节点=-1+0.2i(i=010)。

(1)计算f(x)和拉格朗日插值多项式(x)的值,=-1+0.05k(k=040).

(2)求三次自然插值样条函数S(x)的M表示中(i=0),计算S(x),x=-1+0.05k,k=040.

(3)画出y=f(x),y=(x),y=S(x)的图形。

(1)用mathematica语言进行编程,方便作图:

计算f(x)和(x):

(2)三次自然插值样条函数S(x),用mathematica语言编程:

(3)采用mathematica软件画图如下:

比较y=f(x),y=(x),y=S(x)的图形可得,高次项会逐渐使得结果偏离真实值,而y=S(x)与y=f(x)比较接近。

说明三次自然插值样条函数S(x)在插值多项式次数比较高的时候,能更好的减少与真实值的误差,而朗格朗日插值多项式则恰恰相反。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1