2014-1算法(2.5h)
第一章 误差与范数

1.1 误差的来源例1.1.1 用差商ha f h a f a f )()()(-+≈'求x x f ln )(=在3=x 处导数的近似值.取1.0=h ,1000.0=h ,h =0.000 000 000 000 001和h =0.000 000 000 000 000 1分别用MATLAB 软件计算,取十五位数字计算.解 在MATLAB 工作窗口输入下面程序>>a=3;h=0.1;y=log(a+h)-log(a);yx=y/h运行后得yx = 0.32789822822991 将此程序中h 改为0.000 1,运行后得yx = 0.33332777790385后者比前者好.再取h = 0.000 000 000 000 001,运行后得yx = 0.44408920985006不如前者好.取h = 0.000 000 000 000 000 1,运行后得yx = 0算出的结果反而毫无价值.例1.1.2 分别求方程组b AX =在下列情况时的解,其中A ⎪⎪⎭⎫⎝⎛=011111.. (1)⎪⎪⎭⎫ ⎝⎛=22b ;(2)⎪⎪⎭⎫⎝⎛=0122.b . 解 (1) 首先将方程组b AX =化为同解方程b A X 1-=,然后在MATLAB 工作窗口输入程序>> b=[2,2]';A=[1,1;1,1.01]; X=A\b运行后输出当⎪⎪⎭⎫ ⎝⎛=22b 时,b AX =的解为⎪⎪⎭⎫⎝⎛=02X ;(2)同理可得,当⎪⎪⎭⎫ ⎝⎛=0122.b 时,b AX =的解为⎪⎪⎭⎫⎝⎛=11X .例1.1.3 计算e 的近似值. 解 泰勒级数e +++++++=!!4!3!21432 n x x x x x n x)(∞<<-∞x , 取1=x ,得e +++++++=!1!41!31!2111 n . (1.2)这是一个无限过程,计算机无法求到精确值.只能在(1.2)取有限项时计算,再估计误差.如果取有限项!!!!)( n s n 1413121111++++++=作为e 的值必然会有误差,根据泰勒余项定理可知其截断误差为e !)1()1( +=-n e s n θ)10(<<θ.如果取(1.2)的前九项,输入程序>> n =8;s=1;S =1; for k=1:ns=s*k;S=S+1/s, ends,S,R=3/(s*(n+1)) 或>>S1=1+1+1/2+1/(1*2*3)+1/(1*2*3*4)+1/(1*2*3*4*5)+1/(1*2*3*4*5*6)+1/(1*2*3*4*5*6*7)+1/(1*2*3*4*5*6*7*8),R1=3/(1*2*3*4*5*6*7*8*9)运行后结果S = R =2.71827876984127 8.267195767195768e-006 因为截断误差为e ),10(101968.267!93!)18()1(6-8<<⨯≈<+=-θθ e s 所以e 的近似值e ≈≈++++++++=!81!71!61!51!41!31!2111)1(8 s 2.718 28.1.2 误差和有效数字例1.2.1 取282.718作为e 的四舍五入近似值时,求其绝对误差和相对误差. 解 在MATLAB 工作窗口输入程序>>juewu=exp(1)-2.71828运行后输出结果为juewu = 1.828 459 045 505 326e-006例1.2.2 计算⎰π20sin x xd x 的近似值,并确定其绝对误差和相对误差.解 因为被积函数xxsin 的原函数不是初等函数,故用泰勒级数求之.++-+-=!!!!sin 9 75 386x x x x x x 421 )(∞<<-∞x , (1.5) 这是一个无限过程,计算机无法求到精确值.可用(1.5)的前四项!!!75 36x x x -+-421代替被积函数xxsin ,得 ⎰π=20sin x x y d ⎰π≈20(x !!!14275 36x x x -+-)d x =!7)2(!5)2(!3)2(275375 3⋅π-⋅π+⋅π-π=y ˆ. 根据泰勒余项定理和交错级数收敛性的判别定理,得到绝对误差!99)2(ˆ9⋅<-=πyy R = WU , 在MA TLAB 命令窗口输入计算程序如下:>>syms xf=1-x^2/(1*2*3)+x^4/(1*2*3*4*5)-x^6/(1*2*3*4*5*6*7)y=int(f,x,0,pi/2),y1=double(y)y11=pi/2-(pi/2)^3/(3*3*2)+(pi/2)^5/(5*5*4*3*2)-(pi/2)^7/(7*7*6*5*4*3*2)inf=int(sin(x)/x,x,0,pi/2) ,infd=double(inf) WU =(pi/2)^9/(9*9*8*7*6*5*4*3*2), R =infd-y11因为运行后输出结果为: =y 1.370 762 168 154 49,yˆ=1.370 744 664 189 38,=R 1.750 396 510 491 47e-005, WU = 1.782 679 830 970 664e-005410-<.所以,yˆ的绝对误差为=ε410-,故⎰π=20sin x xy d 7 1.370≈x .yˆ的相对误差为 =r ε71.37010ˆ4-=y ε<0.007 3%.1.3 误差估计的基本方法例1.3.4 设计三种算法求方程01522=-+x x 在)3,2(的一个正根*x 的近似值,并研究每种算法的误差传播情况.解 为解已知方程,我们可以设计如下三种算法,然后将计算结果与此方程的精确解5.2*=x 比较,观察误差的传播.算法1 将已知方程化为同解方程=x 2215x -.取初值20=x ,按迭代公式21215k k x x -=+依次计算 ,,,,21n x x x ,结果列入表1–3中.算法2 将已知方程化为同解方程1215+=x x .取初值20=x ,按迭代公式 12151+=+k k x x依次计算 ,,,,21n x x x ,结果列入表1–3中.算法3 将已知方程化为同解方程141522+-+-=x x x x x .取初值20=x ,按迭代公式为1415221+-+-=+k k kk k x x x x x 依次计算 ,,,,21n x x x ,结果列入表1–3中.我们为这三种算法的计算编写两套MATLAB 程序如下: (1)MATLAB 主程序function [k,juecha,xiangcha,xk]= liti112(x0,x1,limax) % 输入的量--x0是初值, limax 是迭代次数和精确值x; % 输出的量--每次迭代次数k 和迭代值xk,% --每次迭代的绝对误差juecha 和相对误差xiangcha , x(1)=x0;for i=1:limaxx(i+1)=fl(x(i));%程序中调用的fl.m juecha = abs(x(i)-x1);xiangcha = juecha /( abs(x(i))+eps);xk=x(i);k=i-1;[(i-1),juecha,xiangcha,xk] end(2)MATLAB 调用函数程序及其计算结果①算法2的MATLAB 调用函数程序function y1=fl(x)y1=15/(2*x+1);② 将MATLAB 主程序和调用函数程序分别命名liti112.m 和fl.m ,分别保存为M 文件,然后在MATLAB 工作窗口输入命令>> [k,juecha,xiangcha,xk]= liti112(2,2.5,100) ③运行后输出计算结果列入表1–3和表 1-4中.④将算法2的MATLAB 调用函数程序的函数分别用y1=15-2*x^2和y1=x-(2*x^2+x-15)/(4*x+1)代替,得到算法1和算法3的调用函数程序,将其保存,运行后将三种算法的前8个迭代值821,,,x x x 列在一起(见表 1-3),进行比较.将三种算法的821,,,x x x 对应的绝对误差和相对误差的值列在一起(见表 1-4),进行比较.1.4 数值计算中应注意的问题例1.4.1 求数)181(71915-+⨯=-x 的近似值. 解 (1)直接用MATLAB 命令>> x=(7^15)*(sqrt(1+8^(-19))-1)运行后输出结果x = 0问题出现在两个相近的数1981-+与1相减时,计算机运行程序>>sqrt(1+8^(-19))-1运行后输出结果ans = 0由于计算机硬件只支持有限位机器数的运算,因此在计算中可能引入和传播舍入误差.因为有效数字的严重损失,导致输出18119-+-的结果为0,计算机不能再与数157继续进行真实的计算,所以,最后输出的结果与x 的精确值不符.(2)如果化为18187)181(71919151915++⨯=-+⨯=---x ,再用MATLAB 命令>> x=(7^15)*( (8^(-19))/(sqrt(1+8^(-19))+1))运行后输出结果x = 1.6471e-005 这是因为18119-+-化为18181919++--后,计算机运行程序>> x= (8^(-19))/(sqrt(1+8^(-19))+1)运行后的结果为x =3.4694e-018 由于有效数字的损失甚少,所以运算的结果-18103.4694⨯再与157继续计算,最后输出的结果与x 的精确值相差无几.例1.4.2 求数)13030ln(2--=y 的近似值. 解 (1)直接用MATLAB 程序>> x=30;x1= sqrt(x^2-1)运行后输出结果x1 = 29.9833 输入MATLAB 程序>> x=30; x1=29.9833;y=log(x-x1)运行后输出结果y = -4.0923(2)因为)13030ln(2--中的30=x 很大,如果采用倒数变换法111221-+=--=x x x x z ,即130301ln)13030ln(22-+=--)190030ln(-+-=.输入MATLAB 程序>> x=30;y=-log(x+sqrt(x^2-1))运行后输出结果y = -4.0941(3)输入MA TLAB 程序>> x=30; y=log(x-sqrt(x^2-1))运行后输出结果y = -4.0941 可见,(2)计算的近似值比(1)的误差小.参加计算的数,有时数量级相差很大.如果不注意采取相应的措施,在它们的加减法运算中,绝对值很小的那个数经常会被绝对值较大的那个数“吃掉”,不能发挥其作用,造成计算结果失真.例1.4.4 请在16位十进制数值精度计算机上利用软件MATLAB 计算下面的两个数0.30.1111111111111111*++=x 和0.30.11111111111111111*++=y将计算结果与准确值比较,解释计算结果.解 在MATLAB 工作窗口输入下面程序>> x=111111*********+0.1+0.3, y=1111111111111111+0.1+0.3运行后输出结果x = 1.111111*********e+014,y =1.111111*********e+015 从输出的结果可以看出,x *x =,而y *y ≠.为什么*y 仅仅比*x 多一位1,而y *y ≠呢?这是因为计算机进行运算时,首先要把参加运算的数写成绝对值小于1而“阶码”相同的数,这一过程称为数的“对阶”.在16位十进制数值精度计算机上利用软件MATLAB 计算这两个数,把运算的数*x 写成浮点规格化形式为,151515*103000**********.0001010000000000000.000100111111111111111.0⨯+⨯+⨯=x在16位十进制数值精度计算机上,三项的数都表示为小数点后面16位数字的数与1510之积,所以,计算机没有对数进行截断,而是按原来的三个数进行计算.因此,计算的结果x *x =.而161616*10030000000000000.00010010000000000000.000101111111111111111.0⨯+⨯+⨯=y三项的数都表示写成绝对值小于1而“阶码”都为1610的数以后,第一项的纯小数的小数点后面有16位数字.但是,后两项数的纯小数的小数点后面有17位数字,超过了16位十进制数值精度计算机的存储量,计算机对后两项的数都进行截断最后一位,即后两项的数都是16位机上的零,再进行计算,所以计算结果与实际不符.五、向量和矩阵的范数例1.5.1: 用matlab 求下列向量的2,1,5,,-∞∞范数。
C语言考前导14-15(2)

C语言考前辅导1、求输入的整数中正数的个数及其平均值#include <stdio.h>main(){ int num=0;float sum=0,a;while ( scanf( "%f", &a) != EOF ){if(a<=0.0) continue;num++;sum+=a;}printf("%d plus integer's sum :%6.0f\n",num,sum);printf("Meanvalue:%6.2f\n",sum/num);}2、求1/a+1/aa+1/aaa+…的前5项之和。
(若a=3, 则是1/3+1/33+1/333+1/3333+1/33333之和)# define N 5main(){int a , k ; float t ,s ;scanf(“%d”, &a) ; s=1.0/a ; t=a ; for (k=2 ; k<=N ; k++){t=t*10 ; t=t+a ; s=s+1.0/t ; }printf(“1/a+1/aa+1/aaa+…=%f”,s); }如果改成求a+aa+aaa+aaaa+aaaaa如何编程三s=a;t=a;{t=10*t+aS=s+t} 3、打印100~200之间的所有素数#include "math.h"main(){int m,k,i,n=0;for(m=101;m<=200;m=m+2){if(n%10==0) printf("\n");k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1){printf("%d ",m);n++;}}}if(i>k)比较好理解4、求n的阶乘,1)递归#include <stdio.h>int fac(int n){ int f;if(n<0) printf("n<0,dataerror!");else if (n==0||n==1) f=1;else f=fac(n-1)*n;return(f);}main(){ int n, y;printf("Input a integer number:");scanf("%d",&n);y=fac(n);printf("%d! =%15d",n,y);}2)非递归main(){ float y;Int n;printf("Input a integer number:");scanf("%d",&n);y=fac(n);printf("%d! =%15f",n,y);}float fact(int n){ int i;double res = 1;for(i=1; i<=n; i++)res = res*i;return res;}5、读10个整数存入数组,找出其中最大值和最小值#include <stdio.h>#define SIZE 10main(){ int x[SIZE],i,max,min;printf("Enter 10 integers:\n");for(i=0;i<SIZE;i++){ printf("%d:",i+1);scanf("%d",&x[i]);}max=min=x[0];for(i=1;i<SIZE;i++){ if(max<x[i]) max=x[i];if(min>x[i]) min=x[i];}printf("Maximum valueis %d\n",max);printf("Minimum valueis %d\n",min);}6、冒泡排序算法分析#include <stdio.h>main(){ int a[11],i,j,t;printf("Input 10 numbers:\n");for(i=1;i<11;i++)scanf("%d",&a[i]);printf("\n");for(j=1;j<=9;j++)for(i=1;i<=10-j;i++)if(a[i]>a[i+1]){t=a[i]; a[i]=a[i+1]; a[i+1]=t;}printf("The sorted numbers:\n"); for(i=1;i<11;i++)printf("%d ",a[i]);}8.11写一函数用起泡法对输入的个字符按由小到大的顺序排列。
第3章处理机调度与死锁-选择题

第3章处理机调度与死锁(处理机调度)-选择题1.时间片轮转调度算法是为了()A.多个用户能及时干预系统B.使系统变得高效C.优先级较高的进程得到及时响应D.需要CPU时间最少的进程最先做2.在单处理器多进程系统中,进程什么时候占用处理器及决定占用时间的长短是由()决定的A.进程相应的代码长度B.进程总共需要运行的时间C.进程特点和进程调度策略D.进程完成什么功能3.()有利于CPU繁忙型的作业,而不利于I/O繁忙型的作业。
A.时间片轮转调度算法B.先来先服务调度算法C.短作业(进程)优先算法D.优先权调度算法4.下面有关选择进程调度算法的准则中,不正确的是()A.尽快响应交互式用户的请求B.尽量提高处理器利用率C.尽可能提高系统吞吐量D.适当增长进程就绪队列的等待时间5.设有4个作业同时到达,每个作业的执行时间均为2h,它们在一台处理器上按单道式运行,则平均周转时间为()A.1hB.5hC.2.5hD.8h6.若每个作业只能建立一个进程,为了照顾短作业用户,应采用();为了照顾紧急作业用户,应采用();为了能实现人机交互,应采用();而能使短作业、长作业和交互作业用户都满意,应采用()A.FCFS调度算法B.短作业优先调度算法C.时间片轮转调度算法D.多级反馈队列调度算法E.剥夺式优先级调度算法7.()优先级是在创建进程时确定的,确定之后在整个运行期间不再改变A.先来先服务B.动态C.短作业D.静态8.现在有三个同时到达的作业J1、J2和J3,它们的执行时间分别是T1、T2、T3且T1<T2<T3。
系统按单道方式运行且采用短作业优先调度算法,则平均周转时间是()A.T1+T2+T3B.(3T1+2T2+T3)/3C.(T1+T2+T3)/3D.(T1+2T2+3T3)/39.设有三个作业,其运行时间分别是2h、5h、3h,假定它们同时到达,并在同一台处理器上以单道方式运行,则平均周转时间最小的执行顺序是()A.J1,J2,J3B.J3,J2,J1C.J2,J1,J3D.J1,J3,J210. 【2013统考真题】某系统正在执行三个进程P1、P2和P3,各进程的计算(CPU时间和I/O 时间比例如下表所示进程计算时间I/O时间P1 90% 10%P2 50% 50%P3 15% 85%提高系统资源利用率,合理的进程优先级设置应为()A.P1>P2>P3B. P3>P2>P1C. P2>P1=P3D. P1>P2=P311.采用时间片轮转调度算法分配CPU时,当处于运行态的进程完一个时间片后,它的状态是()状态A.阻塞B.运行C.就绪D.消亡12.一个作业8:00到达系统,估计运行时间为1h。
Matlab习题

习题 11. 执行下列指令,观察其运算结果, 理解其意义: (1) [1 2;3 4]+10-2i(2) [1 2; 3 4].*[0.1 0.2; 0.3 0.4] (3) [1 2; 3 4].\[20 10;9 2] (4) [1 2; 3 4].^2 (5) exp([1 2; 3 4]) (6)log([1 10 100]) (7)prod([1 2;3 4])(8)[a,b]=min([10 20;30 40]) (9)abs([1 2;3 4]-pi)(10) [1 2;3 4]>=[4,3;2 1](11)find([10 20;30 40]>=[40,30;20 10])(12) [a,b]=find([10 20;30 40]>=[40,30;20 10]) (提示:a 为行号,b 为列号) (13) all([1 2;3 4]>1) (14) any([1 2;3 4]>1) (15) linspace(3,4,5) (16) A=[1 2;3 4];A(:,2)2. 执行下列指令,观察其运算结果、变量类型和字节数,理解其意义: (1) clear; a=1,b=num2str(a),c=a>0, a= =b, a= =c, b= =c (2) clear; fun='abs(x)',x=-2,eval(fun),double(fun)3. 本金K 以每年n 次,每次p %的增值率(n 与p 的乘积为每年增值额的百分比)增加,当增加到rK 时所花费的时间为)01.01ln(ln p n rT +=(单位:年)用MA TLAB 表达式写出该公式并用下列数据计算:r =2, p =0.5, n =12.4.已知函数f (x )=x 4-2x 在(-2, 2)内有两个根。
取步长h =0.05, 通过计算函数值求得函数的最小值点和两个根的近似解。
部分习题参考答案(数据结构 李春葆)

int lena=1,j=0; while (p->next!=ha)//求出ha的长度lena { lena++;
p=p->next; }
if (i==0) //将hb的所有数据结点插入到ha的头结点和第1个数据结点之间
{ p=hb->prior;
//p指向hb的最后一个结点/
p->next=ha->next;
//将*p链到ha的第1个数据结点前面
ha->next->prior=p;
ha->next=hb->next;
hb->next->prior=ha;
//将ha头结点与hb的第1个数据结点链起
来
}
else if (i<lena)
q->next->prior=q;
p->next=q;q->prior=p;
q=p->prior;
//q重指向*p的前趋节点
}
return true;
}
}
2.5 设ha=(a1,a2,…,an)和hb=(b1,b2, …,bm) 是两个带头结点的循环单链表,编写将 这两个表合并为带头结点的循环单链表hc的算法。
else
//找到的情况
{ p->freq++;
//频度增1
q=p->prior;
//*q为p前驱节点
while (q!=h && q->freq<p->freq)
2014注册给排水专业考试计算公式最新勘误版

16/06/2014
Q——设计流量,Qh ∑q——集中流量总和 ∑l ——管网总计算长度 l——管段计算长度 : 管段配水情况 管段计算长度 l
双侧配水 单侧配水 不配水
为管段实际长度 为管段实际长度的一半 为0
2、 沿线流量 q l :在假设全部干管均匀配水前提 下,沿管线向外配出的流量。 ql= qsl (与计算长度有关,与水流方向无关) 3、节点流量: 集中用水量一般直接作为节点流量 分散用水量经过比流量、沿线流量计算后折算为节点流量,即节点流量等 于与该点相连所有管段沿线流量总和的一半。 q i =0.5∑q l 0.5——沿线流量折算成节点流量的折算系数 4、 管段计算流量 qij ——确定管径的基础 5、 管段流量 qij 与沿线流量 ql 的区别: 计算目的不同,算法不同: ql:在假定前提下,管段向外沿线配出,其值的大小沿线减小, 无水流方向问题,只有数值大小,用以定节点流量及管段流量; qij :是依据节点流量得出的管段内大小不变的流量, 含义上 qij=本段沿线流量的折算流量 q+本段向下游转输的 q t ,依据水流连续性计算, 有方向性,用来确定管径、计算水头损失 前提条件:必须满足节点流量平衡条件,即满足节点连续性方程 i 点的连续性方程: q i +∑q ij =0 (流入 i 点和流出 i 点的流量代数和为 0) qi——i 点的节点流量 qij——从节点 i 到节点 j 的管段流量,“流入为负,流出为正” 6、管径计算 4q 由“断面积×流速=流量” ,得
2
2
a
a
又 H 1 =H 2 ,则 n=3.86≈4 段
第3章
取水工程
1、进水孔格栅面积的设计(P55) F 0 =Q/K 1 K 2 v 0 F 0 —进水孔或格栅面积,m2 Q--进水孔的设计流量,m3/s v 0-- 进水孔的设计流速,m/s K 1— 栅条引起的面积减少系数: K 1 =b/b+s, b 为栅条净距,s 为栅条厚度(或直径) 采用 0.75, 水流通过格栅的水头损失, 一般采用 0.05~0.1m K 2 --格栅阻塞系数。 2、 平板式格网的面积可按下式计算: (P56) F 1 =Q/K 1 K 2 εv 1 F 1 —平板式格网的面积,m2 Q—通过网格的流量,m3/s V 1-- 通过网格的流速,m/s 一般采用 0.2~0.4 m/s K 1— 栅条引起的面积减少系数: K 1 =b/(b+d)2, b 为网眼尺寸,一般为 5*5~10*10mm,d 为网眼直径, 一般为 1~2mm K 2 --格栅阻塞系数。一般采用 0.5, ε—水流收缩系数,一般采用 0.64~0.80 水流通过格栅的水头损失,一般采用 0.1~0.2m 3、旋转格网的有效过水面积可按下式计算: (P57) F 2 =Q/K 1 K 2 K 3 εv 1 F 2 —旋转格网的有效过水面积,m2 Q—通过网格的流量,m3/s V 2-- 通过网格的流速,m/s 一般采用 0.7~1.0 m/s
2014数学模考部分试题

11、在下面的方格纸中画1个三角形,是它的面积 比给出的平行四边形面积增加1倍。
12、下面组合图形中大小正方形的边长分别是13cm 和 9cm 。仔细读一读,完成填空与解答。
★ 算式“(9+13)×9÷2”,既可以计算出三角形 ( △BEF )的面积,该三角形的底、高分别为 ( BE )、( EF );也可以计算出梯形( DCEF ) 的面积,该梯形的上、下底分别为( EF )、( ), DC GF 高为( )。(以上括号内都填写名称)
=0.05×100+99 =5+99 =104
小丁丁算法: 0.05+0.05×99+1×99
=0.05×(1+99)+1×99 =0.05+(1+0.05)×99
小胖和小丁丁第一步都运用了( 乘法分配律 )律。
ቤተ መጻሕፍቲ ባይዱ
按( 小胖 )的算法继续往下算,可使计算简便。请你 帮助他完成。
4、求“每个瓶子装0.35升饮料,2.5升饮料可以装满 多少瓶?还剩饮料多少升”竖式计算过程如下:
屏幕对角线可以表示为( 2.54x ) 厘米。19英寸的电脑显示器,其对 角线长(48.26)厘米。 19×2.45
7、甲乙两数相乘,如果甲增加0.6,乙不变,则 积增加1.68.那么乙是( 2.8 )。
1.68÷0.6=2.8
8、歌唱比赛,5个评委给一个选手打分。去掉一 个最高分,平均成绩为8分;去掉一个最低分, 平均成绩为9分。最高分与最低分相差( 4 ) 分。
。
(如下图)请回忆老师引导你推导平行四边形面积公式进 的情境,给(1)、(2)填空;(3)计算。 1、 以将平行四边形转化为长方形来推导平行四边形的面 积公式。把平行四边形转化成长方采用的方法是:___ 先切割,再平移添补。 _________________________ _______________________ 2、观察转化前的平行四边形与转化后的长方形,你发现了 什么?(请 写在下面的横线上,至少写三条)__________ (1)平行四边形的底等于长方形的长;(2)平行四边 _________________________ 形的高等于长方形的高;(3)平行四边形面积等于长方 _________________________ 形面积。 ____________________ 3
BNBC与中国建筑设计防火规范对比分析

价值工程0引言随着中国经济的迅速发展,建筑工程的规范标准体系日趋完善,国内建筑市场日趋饱和化,不少建筑企业将目光投向海外市场,并且紧跟国家一带一路的发展战略潮流,大量中资企业开拓并深耕于东南亚市场。
孟加拉国作为东南亚国家的典型代表,人口密度非常高,国家整体经济水平十分落后,人民生活水平较低,城市化与商业化发展缓慢。
因此孟加拉建筑市场具有起步性、活跃性、包容性与国际性等特征,这为大量的国际建筑设计企业带来机遇和挑战,因此,系统的研究孟加拉规范BNBC 成为国际建筑设计人才的重要任务。
BNBC (Bangladesh National Building Code )规范是为孟加拉国境内所有建筑物的设计、建造、材料质量、使用和占用、选址和维护制定最低标准,以便在可实现的范围内保障生命、肢体、健康、财产和公共福利。
《建筑设计防火规范》(GB50016-2014,2018版)是国内为了预防和减少火灾,保护人身及财产安全而单独制定的一套规范。
1建筑分类1.1BNBC 建筑分类BNBC 根据每栋建筑或建筑的一部分的功能用途或用房特征,将建筑用房分为十大类型:A 住宅:A1(单户住宅);A2(双户住宅);A3(公寓);A4(食宿公寓、宿舍或旅馆);A5(酒店和住宿房屋);B 教育:B1(高中及以下教育设施);B2(高中以上教育及培训设施);B3(学前设施);C 机构:C1(儿童看护机构);C2(健全成人监护机构);C3(非健全或残疾成人监护机构);C4(儿童精神机构);C5(成人精神机构);D 医疗:D1(普通医疗设施);D2(紧急医疗设施);E 办公:E1(办公室);E2(研究和测试实验室);E3(基本服务);F 商贸:F1(小型商店和超市);F2(大型商店和超市);F3(加油站);G 工业:G1(低危工业);G2(中危工业);H 储存:H1(低火险储藏室);H2(中火险储藏室);I 集会:I1(设有固定座椅的大型会场);I2(设有固定座椅的小型会场);I3(无固定座椅的大型会场);I4(无固定座椅的小型会场);I5(体育设施);J 危险:J1(爆炸危险建筑);J2(化学危险建筑)J3(生物危险建筑)J4(辐射危险建筑);K 其他:K1(停车场);K2(私人车库);K3(修理厂)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <iostream> #include <iomanip> using namespace std; int main() {int i,j,k; for (i=0;i<=100;i++) for (j=0;j<=100;j++) for (k=0;k<=100;k++) {m=i+j+k; n=3*i+2*j+0.5*k; if( (m==100.0) &&(n==100)) cout<<setw(5)<<i<<setw(5)<<jsetw(5)<<k<<ednl; } return 0; }
double root(a,b,eps,f) double a,b ,exp,(*f)() f0=f(a) while(|a-b|≥eps) DO { c=(a+b)/2; f1=(*f)(c) if (f1==0) { return c } if (f0*f1>0) a=c else b=c; } c=(a+b)/2; return(c)
1.1 算法基本概念
算法的基本特征:能行性: 算法中描述的操作都是可通过已经实现的基本运 算、执行有限次实现的; 包括两个方面: 1) 每个步骤都能实现。 例如不能分母为0等; 2) 执行结果能达到预期的目的。
例子: 单精度 (7位有效数字的加法)
A=1012; B=1 ;C=-1012
A+B+C
;
减半递推技术举例
乘积矩阵C中的各元素可用以上7个量的线性组合 来表示: c11 x1 x4 x5 x7 c x x 12 3 5 c21 x2 x4 c22 x1 x3 x2 x6
上述方法计算两个二阶矩阵相乘只需要7次乘法就够了, 比通常的方法减少了1次乘法。以此类推,最后可以归 结为计算一阶矩阵相乘的问题,而一阶矩阵相乘只需 要一次乘法。
减半递推技术举例
对于低阶的矩阵相乘问题,如二阶矩阵相乘,减 少乘法次数是有可能的。令:
x1 (a11 a22 )(b11 b22 ) x (a a )b 21 22 11 2 x3 a11 (b12 b22 ) x4 a22 (b21 b11 ) x (a a )b 11 12 22 5 x6 (a21 a11 )(b11 b12 ) x7 (a12 a22 )(b21 b22 )
例:编写一个过程,对于输入的参数n,依次打印输 出自然数1到n。
非递归算法。 #include <iostream> using namespace std; void wrt(int n) { int k; for(k=1;k<=n;k++) cout <<k<<endl; return; }
递归算法。 #include <iostream> using namespace std; void wrt1(int n) { if(n!=0) { wrt1(n-1); cout <<n<<endl; } return; }
• 对问题分而治之。工程上常用的分治法是减半
递推技术。这个技术在快速算法的研究中有很
重要的实用价值。所谓“减半”,是指将问题
的规 模 减半 , 而问 题 的性 质 不变 , 所谓 “递
推”,是指重复“减半”的过程。
例题
设方程 f(x)=0 在区间 [a,b] 上有实根,且 f(a) 与 f(b) 异号。利用二 分法求该方程在区间[a,b]上的一个实根。 分析: • 首先取给定区间的中点c=(a+b)/2。
A+C+B
1.1 算法基本概念
算法的基本特征 确定性:算法中的每一条指令必须有明确的含义, 不能有二义性; 有穷性:一个算法必须总是在执行有穷步后结束, 且每一步都可在合理的执行时间内完成;
拥有足够情报:算法在有足够的情报时才是有效的。
结论:
所谓算法,是一组严谨地定义运算顺序的 规则,并且每一个规则都是有效的、明确 的,此顺序将在有限的次数下终止。
课堂练习
• 兔子和鸡问题: • 共有动物35只 有脚90只 • 有多少兔子多少鸡?
2.归纳法
• 归纳法的基本思想
通过列举少量的特殊情况,经过分析,最后找出一般的 关系。
• 归纳是一种抽象
即从特殊现象中找出一般关系。但由于在归纳的过程中
不可能对所有的情况进行列举,因此,最后由归纳得到
的结论还只是一种猜测,还需要对这种猜测加以必要的 证明。
列举法---改进后的算法(C++)
#include <iostream> #include <iomanip> using namespace std; int main() {int i,j,k; for (i=0;i<=33;i++) for (j=0;j<=50-1.5*i;j++) {k=100-i-j; if (3*i+2*j+0.5*k==100.0) cout<<setw(5)<<i<<setw(5)<<jsetw(5)<<k<<ednl; } return 0; }
减半递推技术 例题分析
根据以上分析,假设 n 2k ,且 n 2k 阶矩阵相乘所 需要的乘法次数为M(k),则有
M (k ) 7M (k 1) 72 M (k 2) 7k M (0)
因此有 M (k ) 7 7
k log2 n
n
log2 7
n
2.81
减半递推技术 总结:
总循环次数为1013=1030301
#include <iostream> #include <iomanip> using namespace std; int main() {int i,j,k; for (i=0;i<=100;i++) for (j=0;j<=100;j++) for (k=0;k<=100;k++) {m=i+j+k; n=3*i+2*j+0.5*k; if( (m==100.0) &&(n==100)) cout<<setw(5)<<i<<setw(5)<<jsetw(5)<<k<<ednl; } return 0; }
这个关系就可以得到如下递推公式
1 I n 5 I n 1 n
只要知道In-1 就可以算出In ,也就是说,只要知 道了I0,就可以通过这个递推公式计算出所有的 积分值In(n=1,2,…,20)。
递推法例题分析
1 I0 dx ln 6 ln 5 ln(6 / 5) 0.182322 0 x5 I 0 0.182322 I 1 5 I , n 1,2, ,20 n n 1 n
• 基本思想
根据提出的问题,列举所有可能的情况,并用问 题中给定的条件检验哪些是需要的,哪些是不需 要的。因此,列举法常用于解决“是否存在”或 “有多少种可能”等类型的问题,例如求解不定 方程的问题。 例题:设每只母鸡值3元,每只公鸡值2元,每只 小鸡值0.5元。现要用100元钱买100只鸡,设计 买鸡方案,这就是经典的求解百鸡问题。
递推关系如下:
I 30 1 I 1 1 I , n 30,29, ,1 n 1 n 5n 5
递推法总结: 例题分析--改进前后
• 在老递推算法中,初值是近似的,即实际上存在一个误差;
老递推算法递推过程中,当计算到I20时,其误差是初值误
差的 520倍。 • 在新递推算法中,虽然初值 I30是近似的,而且误差可能很 大。但在用新递推算法递推过程中,每递推计算一次,后 一个计算值的误差是前一个计算值误差的1/5,因此,当计 算到I20时,其误差是初值I30误差的1/510 。
1
• 相邻两个积分之间除了具有递推关系式: 以外,还满足下列不等式 0 I n I n1
I n 5 I n 1
1 n
因而,I20 应比I0小。且所有的积分值都不可能为负。 这样行吗?
递推法 例题分析--改进方法
根据递推关系式可以改进成另一Байду номын сангаас递推公式:
I n 1 1 1 In 5n 5
法。
5.减半递推技术
• 举例说明:两个n阶矩阵相乘,通常需要作n3次乘法。那 么两个二阶矩阵相乘需要作8次乘法。
a11 a12 b11 b12 A B a a b b 22 21 21 22
其乘积矩阵C=AB为:
c11 c12 a11b11 a12b21 a11b12 a12b22 C c21 c22 a21b11 a22b21 a21b12 a22b22
总结:
递归是构造计算机算法的一种基本方法。如果一个过程直接或间接地调
用它自身,则称该过程是递归的,递归过程必须有一个递归终止条件, 即存在“递归出口”。无条件的递归是毫无意义的。
递归分为直接递归与间接递归两种。如果一个算法P显式地调用自己则
称为直接递归,例如算法1.4是一个直接递归的算法。如果算法P调用 另一个算法Q,而算法Q又调用算法P,则称为间接递归调用。 递归过程能将一个复杂的问题归结为若干个较简单的问题,然后将这些 较简单的每一个问题再归结为更简单的问题,这个过程可以一直做下去, 直到最简单的问题为止。 递归与递推是既有区别又有联系的两个概念。递推是从已知的初始条件 出发,逐次递推出最后所求的值。递归则是从需求的函数本身出发,逐 次上溯调用其本身求解过程,直到递归的出口,然后再从里向外倒推回 来,得到最终的值。一般说来,一个递推算法总可以转换为一个递归算