计算方法与实习 第四版 (孙志忠 著) 东南大学出版社 课后答案
- 格式:pdf
- 大小:556.79 KB
- 文档页数:30
1.1 指出下列经四舍五入得的有效数字位数,及其绝对误差限和相对误差限。
2.000 4 -0.002 00 9 000 9 000.00解: 因为x 1=2.000 4=0.200 04×101, 它的绝对误差限0.000 05=0.5×101―5,即m =1,n =5,故x =2.000 4有5位有效数字. a 1=2,相对误差限025000.01021511=⨯⨯=-a r ε x 2=-0.002 00,绝对误差限0.000 005,因为m =-2,n =3,x 2=-0.002 00有3位有效数字. a 1=2,相对误差限εr =3110221-⨯⨯=0.002 5 x 3=9 000,绝对误差限为0.5×100,因为m =4, n =4, x 3=9 000有4位有效数字,a =9,相对误差限εr =4110921-⨯⨯=0.000 056 x 4=9 000.00,绝对误差限0.005,因为m =4,n =6,x 4=9 000.00有6位有效数字,相对误差限为εr =6110921-⨯⨯=0.000 000 56 由x 3与x 4可以看到小数点之后的0,不是可有可无的,它是有实际意义的。
(简易解法):凡由准确值经四舍五入而得的近似值,其每一个均为有效数字,且绝对误差限不超过末位数字的半个单位。
注:相对误差限也可用定义:绝对误差限除以近似值来求,如4310556.090005.0)(-⨯==x r ε 1.2 设 3149541.2=x ,取5位有效数字,则所得的近似值=*x _________.解: 2.3150(四舍五入结果)1.3 近似数234.1*=x ,有3位有效数字,求其相对误差限r δ。
讲解:r r a x δε=⨯=⨯≤--2311105.01021)(或3,1,101234.01*==⨯=n m x ,由有效数字定义知δ==⨯≤--005.0102131*x x ,从而004052.0234.1005.0*≈==xr δδ 1.4 对准确值 1000=x 和它的两个近似值为9.999*1=x 和1.1000*2=x 分别计算它们的有效数位及绝对误差限,根据结果判断以下结论是否正确:对准确值x 的两个近似值21,x x ,则有效数位n 大的则其绝对误差限就越小?答案:错误 解答:n m x x x -⨯≤-=ε1021)(*,n 越大,通常..绝对误差限越小.......,但绝对误差限也与m 有关 ,因此上述结论并不总是正确。
计算方法课后习题答案计算方法课后习题答案计算方法是一门重要的学科,它为我们提供了解决数学问题的方法和工具。
在学习这门课程时,我们经常会遇到一些习题,这些习题旨在帮助我们巩固所学的知识并提高我们的计算能力。
然而,习题的解答并非总是容易的,有时候我们可能会遇到困难。
因此,我将在本文中为大家提供一些计算方法课后习题的答案,希望能够帮助大家更好地理解和掌握这门学科。
1. 线性方程组的解法线性方程组是计算方法中的一个重要概念。
解决线性方程组的方法有很多种,其中最常用的方法是高斯消元法。
这种方法通过行变换将线性方程组转化为简化的行阶梯形矩阵,从而求得方程组的解。
下面是一个例子:2x + 3y = 84x - 5y = -7通过高斯消元法,我们可以得到方程组的解为x = 1,y = 2。
2. 数值积分的计算数值积分是计算方法中的另一个重要概念。
它可以用来计算曲线下的面积或者求解定积分。
常用的数值积分方法有梯形法则、辛普森法则等。
下面是一个例子:计算定积分∫[0, 1] (x^2 + 2x)dx。
通过梯形法则,我们可以得到定积分的近似值为1.5。
3. 插值和拟合插值和拟合是计算方法中的重要概念,它们可以用来估计未知数据点的值。
插值是通过已知数据点之间的连线或曲线来估计未知点的值,而拟合是通过已知数据点的函数来估计未知点的值。
下面是一个例子:已知数据点 (1, 3), (2, 5), (3, 8),通过插值和拟合方法来估计点 (4, ?) 的值。
通过线性插值,我们可以得到点 (4, 11) 的值。
通过多项式拟合,我们可以得到点 (4, 10.5) 的值。
4. 数值微分的计算数值微分是计算方法中的另一个重要概念,它可以用来估计函数在某一点的导数值。
常用的数值微分方法有前向差分法、后向差分法和中心差分法。
下面是一个例子:计算函数 f(x) = x^2 在点 x = 2 处的导数值。
通过中心差分法,我们可以得到导数的近似值为 4。
《计算方法》习题答案第一章 数值计算中的误差1.什么是计算方法?(狭义解释)答:计算方法就是将所求的的数学问题简化为一系列的算术运算和逻辑运算,以便在计算机上编程上机,求出问题的数值解,并对算法的收敛性、稳定性和误差进行分析、计算。
2.一个实际问题利用计算机解决所采取的五个步骤是什么?答:一个实际问题当利用计算机来解决时,应采取以下五个步骤: 实际问题→建立数学模型→构造数值算法→编程上机→获得近似结果4.利用秦九韶算法计算多项式4)(53-+-=x x x x P 在3-=x 处的值,并编程获得解。
解:400)(2345-+⋅+-⋅+=x x x x x x P ,从而所以,多项式4)(53-+-=x x x x P 在3-=x 处的值223)3(-=-P 。
5.叙述误差的种类及来源。
答:误差的种类及来源有如下四个方面:(1)模型误差:数学模型是对实际问题进行抽象,忽略一些次要因素简化得到的,它是原始问题的近似,即使数学模型能求出准确解,也与实际问题的真解不同,我们把数学模型与实际问题之间存在的误差称为模型误差。
(2)观测误差:在建模和具体运算过程中所用的一些原始数据往往都是通过观测、实验得来的,由于仪器的精密性,实验手段的局限性,周围环境的变化以及人们的工作态度和能力等因素,而使数据必然带有误差,这种误差称为观测误差。
(3)截断误差:理论上的精确值往往要求用无限次的运算才能得到,而实际运算时只能用有限次运算的结果来近似,这样引起的误差称为截断误差(或方法误差)。
(4)舍入误差:在数值计算过程中还会用到一些无穷小数,而计算机受机器字长的限制,它所能表示的数据只能是一定的有限数位,需要把数据按四舍五入成一定位数的近似的有理数来代替。
这样引起的误差称为舍入误差。
6.掌握绝对误差(限)和相对误差(限)的定义公式。
答:设*x 是某个量的精确值,x 是其近似值,则称差x x e -=*为近似值x 的绝对误差(简称误差)。
算法第四版习题答案算法第四版,通常指的是《算法导论》(Introduction to Algorithms),这本书由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein共同撰写。
这本书是计算机科学领域内算法课程的标准教材之一,广受学术界和工业界的推崇。
然而,由于版权保护,我不能提供该书习题的官方答案。
但我可以提供一些解题思路和方法,帮助理解习题的解题过程。
# 开头在解答《算法导论》的习题时,首先要确保理解题目的要求和背景知识。
每个习题都旨在加深对特定算法概念的理解,因此,复习相关的理论知识是解答习题的第一步。
# 理解算法概念- 排序算法:如快速排序、归并排序等,需要理解它们的工作原理、时间复杂度和空间复杂度。
- 图算法:如深度优先搜索(DFS)、广度优先搜索(BFS)等,需要掌握它们的应用场景和实现方式。
- 动态规划:理解如何将问题分解为子问题,并利用子问题的解来构建原问题的解。
- 贪心算法:学习如何选择合适的局部最优解以达成全局最优。
# 解题步骤1. 问题定义:明确题目要求解决的问题是什么,以及需要哪些输入和输出。
2. 算法选择:根据问题的性质选择合适的算法或数据结构。
3. 算法设计:设计算法的逻辑流程,可以使用伪代码或流程图来辅助说明。
4. 复杂度分析:分析算法的时间复杂度和空间复杂度,确保算法的效率。
5. 代码实现:将算法逻辑转化为可执行的代码。
6. 测试验证:通过测试不同的输入来验证算法的正确性和效率。
# 常见问题类型- 理论证明题:要求证明某个算法的性质或定理的正确性。
- 算法设计题:要求设计一个新的算法来解决特定的问题。
- 算法分析题:要求分析给定算法的时间复杂度或空间复杂度。
- 编程实现题:要求编写代码来实现特定的算法。
# 结尾解答《算法导论》的习题是一个深化理解算法原理和提升编程技能的过程。
在解题过程中,如果遇到困难,可以查阅相关资料、参与讨论或寻求指导。
数字设计-原理与实践(第四版)课后习题答案第1 章习题参考答案:1-6 一个电路含有一个2 输入与门(AND2),其每个输入/输出端上都连接了一个反相器;画出该电路的逻辑图,写出其真值表;能否将该电路简化解:电路图和真值表如下:由真值表可以看出,该电路与一个2 输入或门(OR2)相同。
第2 章习题参考答案:将下面的八进制数转换成二进制数和十六进制数。
(a) 12348=1 010 011 1002=29C16(b) 1746378=1 111 100 110 011 1112=F99F16(c) 3655178=11 110 101 101 001 1112=1EB4F16(d) =10 101 011 101 011 010 0012=ABAD116(e) =111 100 011 0012=(f) =100 101 011 001 100 111 12=将下面的十六进制数转换为二进制数和八进制数。
(a) 102316=1 0000 0010 00112=100438(b) 7E6A16=111 1110 0110 10102=771528(c) ABCD16=1010 1011 1100 11012=1257158(d) C35016=1100 0011 0101 00002=1415208(e)=1001 1110 10102=(f)=1101 1110 1010 1110 1110 11112=将下面的数转换成十进制数。
(a) =107 (b) 1740038=63491 (c) 2=183(d) = (e)= (f)F3A516=62373(g) 120103=138 (h) AB3D16=43837 (i) 71568=3694(j) =完成下面的数制转换。
(a) 125= 1 111 1012 (b) 3489= 66418 (c) 209= 11 010 0012(d) 9714= 227628 (e) 132= 10 000 1002 (f) 23851= 5D2B16(g) 727= 104025 (h) 57190=DF6616 (i) 1435=26338(j) 65113=FE5916将下面的二进制数相加,指出所有的进位:(a) S:1001101 C:100100(b) S: 1010001 C: 1011100(c) S: 0 C: 0(d) S: C:利用减法而不是加法重复训练题,指出所有的借位而不是进位:(a) D:011 001 B:110000 (b) D:111 101 B:1110000(c) D: B:00111000 (d) D:1101101 B:写出下面每个十进制数的8 位符号-数值,二进制补码,二进制反码表示。
1.1.1 给出以下表达式的值:a. ( 0 + 15 ) / 2b. 2.0e-6 * 100000000.1c. true && false || true && true答案:a.7,b.200.0000002 c.ture1.1.2 给出以下表达式的类型和值:a. (1 + 2.236)/2b. 1 + 2 + 3 + 4.0c. 4.1 >= 4d. 1 + 2 + "3"答案:a.1.618 b. 10.0 c.true d.331.1.3 编写一个程序,从命令行得到三个整数参数。
如果它们都相等则打印equal,否则打印not equal。
public class TestUqual{public static void main(String[] args){int a,b,c;a=b=c=0;StdOut.println("Please enter three numbers");a =StdIn.readInt();b=StdIn.readInt();c=StdIn.readInt();if(equals(a,b,c)==1){StdOut.print("equal");}else{StdOut.print("not equal");}}public static int equals(int a ,int b , int c){if(a==b&&b==c){return 1;}else{return 0;}}}1.1.4 下列语句各有什么问题(如果有的话)?a. if (a > b) then c = 0;b. if a > b { c = 0; }c. if (a > b) c = 0;d. if (a > b) c = 0 else b = 0;答案:a. if (a > b) c = 0; b. if (a > b) { c = 0; }1.1.5 编写一段程序,如果double 类型的变量x 和y 都严格位于0 和1 之间则打印true,否则打印false。
计算机算法设计与分析第四版课后答案【篇一:计算机算法分析与设计(第四版)习题算法分析部分详解(实验六)】//6-1、6-6项目vc++6.0测试通过//6-15项目vc2005测试通过//6-1 最小长度电路板排列问题//头文件stdafx.h// stdafx.h : include file for standard system include files,// or project specific include files that are used frequently, but // are changed infrequently//#pragma once#define win32_lean_and_mean // exclude rarely-used stuff from windows headers #include stdio.h#include tchar.h// todo: reference additional headers your program requires here// sy61.cpp : defines the entry point for the console application.////description://分支限界法 6_1 最小长度电路板排列问题//#include my.h#include stdafx.h#include iostream#include queueusing namespace std;int n,m;//#include outofbounds.h//定义节点类class boardnode{friend int fifoboards(int **,int ,int,int *);//非类成员,可以访问私有成员的函数,最优序列查找public:operator int() const{return cd;}//返回常数 cdint len();public:int *x,s,cd,*low,*high;//x表示当前节点的电路板排列,s表示当前节点排列好的电路板的数//表示当前节点的最大长度,low,high分别表当前节点表示每一个连接块的第一个,和最后一个电路板//的位置};//编写类的len()函数,求出当前节点的连接块长度的最大值int boardnode::len(){int tmp=0;for(int k=1;k=m;k++)if(low[k]=n high[k]0 tmphigh[k]-low[k])tmp=high[k]-low[k];return tmp;}int fifioboards(int **b,int n,int m,int *bestx)//n为电路板的数量,m为连接块的数量 {// int bestd;queueboardnode q;//声明boardnode类的节点队列qboardnode e;e.x=new int[n+1];//为数组指针x分配n+1个动态空间,存储当前的排列e.s=0;//最初时,排列好的电路板的数目为0e.cd=0;e.low=new int[m+1];//存储每个连接块的第一个电路板的位置e.high=new int[m+1];//存储每个连接块的最后一个电路板的位置 for(int i=1;i=m;i++){e.high[i]=0;//初始化开始时的每个连接块的最后一个电路板的位置为0,表示连接块i还没有电路板放入e.x的排列中e.low[i]=n+1;//初始化开始时的每个连接块的第一个电路板的位置为n+1,表示连接块i还没有电路板放入e.x的排列中}for(i=1;i=n;i++)e.x[i]=i;//初始化e.x的排列为1,2,3.....nint bestd=n+1;//最优距离bestx=0;//记录当前最优排列do{if(e.s==n-1)//当已排列了n-1个时{//判断是否改变每个连接块的最后一个电路板的位置for(int j=1;j=m;j++)if(b[e.x[n]][j] ne.high[j])e.high[j]=n;int ld=e.len();//存储当前节点的各连接块长度中的最大长度//如果当前的最大长度小于了n+1if(ldbestd){delete[] bestx;bestx=e.x;bestd=ld;//最优距离}else delete[] e.x;//删除分配给e.x的数组空间delete[] e.low;//删除分配给e.low的数组空间delete[] e.high;//删除分配给e.high的数组空间}else{int curr=e.s+1;//rr记录现在应该排列第几个电路板for(int i=e.s+1;i=n;i++)//处理扩展节点下一层所有子节点{boardnode n;n.low=new int[m+1];//与if中的意思相同n.high=new int[m+1];for(int j=1;j=m;j++){n.low[j]=e.low[j];//将e.low[]中的值赋给n.low[]n.high[j]=e.high[j];if(b[e.x[i]][j]){if(currn.low[j])n.low[j]=curr;//若当前节点连接块j的第一个电路板的位置比现在正在排列的电路板的位置还小if(currn.high[j])n.high[j]=curr;}}n.cd=n.len();//如果,当前节点的最大长度小于了最优长度则:if(n.cdbestd){n.x=new int[n+1];n.s=e.s+1;for(int j=1;j=n;j++)n.x[j]=e.x[j];n.x[n.s]=e.x[i];//交换位置n.x[i]=e.x[n.s];//交换位置q.push(n);//将节点n加入队列中}else{delete[] n.low;delete[] n.high;}//printf(%d,bestd);}delete[] e.x;//当前扩展节点所有子节点均考虑,变成死结点} //try{if(!q.empty()){e=q.front(); //取队列首节点作为扩展节点q.pop();}else return bestd;//}//catch(outofbounds)//{//return bestd;//}//printf(finish);}while(!q.empty());return bestd;return 1;}//测试void main(){//scanf(%d%d,n,m);cinnm;int **b=new int*[n+1];for (int t=0; t=n; t++)b[t] = new int[m+1];for(int i=1;i=n;i++)for(int j=1;j=m;j++)cinb[i][j];//scanf(%d,b[i][j]);int *bestx=new int[n+1];int bestd=0;bestd=fifioboards(b,n,m,bestx);printf(%d\n,bestd);for(i=1;i=n;i++){coutbestx[i] ;}coutendl;}//6-6 经典n皇后问题//description:经典n皇后问题广度优先建议n=14解空间为子集树 //参考答案说排列树是不正确的,本例打印n*n棋盘的所有解,即放置方法 #include iostream#include fstream#include algorithm#include functional#include queueusing namespace std;//本例子直接输入棋盘大小,不用文件//ifstream in(input.txt); //请在项目文件夹下新建一个input.txt//ofstream out(output.txt);class node{public:node(int n){t = 0;this-n = n;loc = new int[n + 1];for (int i = 0; i= n; ++i){loc[i] = 0;}}node(const node other){this-t = other.t;this-n = other.n;this-loc = new int [n + 1];for (int i = 0; i = n; ++i){this-loc[i] = other.loc[i];}}int t;//已放置t个皇后【篇二:计算机算法分析与设计(第四版)习题算法分析部分详解(实验二)】>实验内容:算法实现问题2-1、2-5、2-7//2-1 众数问题思路1:先排序,然后再统计,时间复杂度较高。