数值分析上机题.docx
- 文档编号:7444701
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:23
- 大小:102.99KB
数值分析上机题.docx
《数值分析上机题.docx》由会员分享,可在线阅读,更多相关《数值分析上机题.docx(23页珍藏版)》请在冰豆网上搜索。
数值分析上机题
数值分析上机题
习题1
17.(上机题)舍入误差与有效数
通过本上机题你明白了什么?
按从大到小的顺序计算Sn的通用程序为:
按从小到大的顺序计算Sn的通用程序为:
#include
floatsum(floatN)
{
floatj,s,sum=0;for(j=2;j<=N;j++){
s=1/(j*j-1);sum+=s;
#include
{
floatj,s,sum=0;
for(j=N;j>=2;j--)
{
s=1/(j*j-1);sum+=s;
从大到小的顺序的值
从小到大的顺序的值
精确值
有效位数
从大到小
从小到大
S102
0.740049
0.74005
0.740049
6
5
S104
0.749852
0.7499
0.7499
4
4
S106
0.749852
0.749999
0.749999
3
6
}
}
returnsum;
}
returnsum;
}
通过本上机题,看出按两种不同的顺序计算的结果是不相同的,按从大到小的顺序计算
的值与精确值有较大的误差,而按从小到大的顺序计算的值与精确值吻合。
从大到小的顺序
计算得到的结果的有效位数少。
计算机在进行数值计算时会出现“大数吃小数”的现象,导
致计算结果的精度有所降低,我们在计算机中进行同号数的加法时,采用绝对值较小者先加
的算法,其结果的相对误差较小。
20.(上机题)
Newton迭代法
(1)给定初值
(2)给定方程
习题2
x。
及容许误差,编制Newton法解方程f(x)
0根的通用程序。
3
f(x)x/3x0,易知其有三个根x1
73,
X2
0,x373。
1.由Newton方法的局部收敛性可知存在
0,当
Xo
)时,Newton迭代序
列收敛于根x2。
试确定尽可能大的。
2.试取若干初始值,观察当X0(
1),
(1,
,),(,1),(1,)时
Newton序列是否收敛以及收敛于哪一个根。
(3)通过本上机题,你明白了什么?
解:
(1)编制的通用程序:
#include
#include
#defineeps0.000001floatf(floatx)
{
/给定容许误差
〃定义函数f(x)
floatf;f=x*x*x/3-x;return(f);
〃f(x)的表达式;
floatx0,x1,a;
intk=0;
cout<<"请输入初值x0:
";
cin>>x0;
do
{
}
floatdf(floatx)计算f(x)的导函数
{
floatdf;df=x*x-1;return(df);
}
voidmain(void)
〃定义函数df(x),
(2)计算迭代序列收敛于根x2的尽可能大的
#include
#include
{
floatf;f=x*x*x/3-x;
//定义延时函数
〃定义函数f(x)
//f(x)的表达式;
a=-f(x0)/df(x0);x1=x0+a;k++;
x0=x1;
}
while(fabs(a)>eps);cout< 〃输出迭代的次数和根值 的函数为: return(f); } floatdf(floatx)//定义函数df(x),计算f(x) 的导函数 floatdf; df=x*x-1;//f(x)导函数的表达式; return(df); 〃调试值用 intjudgement(floatz) { intcount=5; floatx0,x1,type,type1; x0=z; while(count-->0) { x1=x0-f(x0)/df(x0); type=fabs(x1); type1=fabs(x1-x0);//调试值用 cout<<"count="< if(fabs(x1-x0) return1; x0=x1; delay(30000); } return0; } voidmain(void) { floatdelta=0;intflag=1; while(flag==1) { cout<<"方程的根为: "<<'\n: delta+=eps; flag=judgement(delta); } cout<<"输出方程根收敛的区间值: \n"; cout< } 当步长为0.001时,程序计算出的5的为3收敛于0。 =0.774,即在区间(-0.774,0.774)内迭代序列 对于不同得初始值收敛于不同的根,X0在(-S,-1)内收敛于X1,在(-0.774,0.774)内 收敛于x2,在(1,+8)内收敛于x3,但在内(0.774,1)和(—1,0.774)均可能收敛于 X*! 和X3。 X,,X2,X3分别为方程的精确解。 分析: 对于不同的初值,迭代序列会收敛于不同的根,所以在某个区间内求根对于初值的选 取有很大的关系。 产生上述结果的原因是区间不满足大范围收敛的条件。 习题3 39.(上机题)列主元Gauss消去法 RI=V。 对于某电路的分析,归结为求解线性方程组其中, V=(-15,27,-23,0,-20,12,-7,7,10) (1)编制解n阶线性方程组Ax=b的列主元三角分解法的通用程序; (2)用所编制的程序解线性方程组RI=V,并打印出解向量,保留五位有效数; (3)本编程之中,你提高了哪些编程能力? 程序为: cout<<'\n'; }//输出数组a cout<<"''''"''''''''''''''"'''"<<'\n'; //进行第一行和第一列元素的求取 '''''''''''''''''''''''''// #include #include voidmain(void) { inti,j,n,k,q; floata[10][11],s[10],s1[10]; cout<<"请输入n的值: ";cin>>n; cout<<"输入数组a: "< for(i=1;i<=n;i++) for(j=1;j<=(n+1);j++) cin>>a[i][j];//给矩阵a赋值 for(i=1;i<=n;i++) { for(j=1;j<=(n+1);j++)cout< intt=1; for(i=1;i<=n;i++){s[i]=a[i][1];}floatmax=fabs(s[1]); for(i=2;i<=n;i++)if(fabs(s[i])>max){ max=fabs(s[i]);t=i; } for(j=1;j<=(n+1);j++) { floatb=a[1][j]; a[1][j]=a[t][j]; a[t][j]=b; }〃进行第一列主元互换 for(i=2;i<=n;i++) a[i][1]=a[i][1]/max;//第一列除以a[1][1] for(i=1;i<=n;i++) { for(j=1;j<=(n+1);j++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 上机