- 4
- 0
- 约2.13千字
- 约 12页
- 2018-09-14 发布于境外
- 举报
* 数学建模讲座 算法与写作 西南交通大学峨眉校区基础课部数学教研室 徐昌贵 2018年3月30日 一、算法概述 二、算法举例 三、写作模板 四、公式图表的录入 五、写作具体要求 六、优秀写作案例 内容提要 算法定义 所谓算法,是指在使用计算机解题前,需要将解题方法转换成一系列具体的在计算机上可执行的步骤,这些步骤能够清楚的反映解题方法一步步“怎么做”的过程,这个过程就是通常所说的算法。 一、算法概述 算法一词最早起源于公元9世纪的阿拉伯。有一位名叫花拉兹米的阿拉伯数学家,在他的一生中发现了很多求解算术问题的算法 。 由于很多成熟的算法已经集成在数学软件中,我们只需要会调用相应的函数即可,故数学建模中所指的算法应该是指广义的算法,即它可以是真正的算法,也可以只是解题的步骤或过程。 数学建模中千万不要说没有模型、没有算法之类的话 算法的特点 有穷性(有限性):任何一种提出的解题方法都是在有限的操作步骤内可以完成的,哪怕是失败的解题方法。 确定性(唯一性):解题方法中的任何一个操作步骤都是清晰无误的,不会使人产生歧义或者误解。 可行性(能行性):解题方法中的任何一个操作步骤在现有计算机软硬件条件下和逻辑思维中都能够实施实现。 有多个输入或输出:一个算法执行结束之后必须有数据处理结果输出,哪怕是输出错误的数据结果,没有输出的算法使毫无意义的。 算法的表示 使用自然语言描述算法 ① 确定一个n的值; ② 假设等号右边的算式项中的初始值i为1; ③ 假设sum的初始值为0; ④ 如果i≤n时,执行⑤,否则转出执行⑧; ⑤ 计算sum加上i的值后,重新赋值给sum; ⑥ 计算i加1,然后将值重新赋值给i; ⑦ 转去执行④; ⑧ 输出sum 的值,算法结束。 你知道上面算法描述的内容是什么吗? 算法的表示 使用流程图描述算法。 算法的表示 使用伪代码描述算法。 (1) 算法开始; (2) 输入 n 的值; (3) i ← 1; /* 为变量 i 赋初值*/ (4) sum ← 0; /*为变量 sum 赋初值*/ (5) do while i=n /*当变量 i =n 时,执行下面的循环体语句*/ (6) { sum ← sum + i; (7) i ← i + 1;} (8) 输出 sum 的值; (9) 算法结束; 伪代码一般在专业书籍中较多使用,在数学建模中使用较少。 建议在数学建模中根据需要同时采用自然语言与框图描述算法。 问题 二、算法举例 筛法的原理是从自然数中相继把所有素数的真倍数都删掉,那么就只剩下素数,首先删掉2的所有真倍数,再删掉3的,依次类推。 利用筛法产生2000以内的素数表 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Step6 统计集合F中所有的1对应集合S中的元素。 计算步骤(算法)如下: Step1 定义n=2000,集合S={2,3,..,n},F={1,1,…,1},其中集合F中的1表示对应集合S中的元素可能是素数,0表示肯定不是素数; Step2 定义k=1,这里k表示当前处理的数的位置; Step3 筛去素数S[[k]]的所有真倍数,即将集合F中S[[k]]的所有真倍数对应的元素赋值为0; Step4 判断k是否大于Sqrt[n],如是,则循环结束,转Step6;否则,k++,转下一步; Step5 循环执行(若F[k]=0,则k++)直到F[k]!=0;转Step3; Mathematica程序如下: (*程序功能: 利用筛法产生2000以内的素数表*) n=2000; S=Table[i,{i,2,n}]; F=Table[1,{i,1,n-1}]; (*用1标志可能是素数,0标志肯定不是素数*) k=1; (*k表示当前处理的数的位置*) While [ k=Sqrt[n], For[
原创力文档

文档评论(0)