当前位置:文档之家› 用Matlab求水仙花数,完美数,回文数和亲合数

用Matlab求水仙花数,完美数,回文数和亲合数

用Matlab求水仙花数,完美数,回文数和亲合数
用Matlab求水仙花数,完美数,回文数和亲合数

题目:对深圳市人口及医疗的预测

编号: 10055

队长李荣

姓名: 李荣(09041117)

王遂(09041124)

李春晓(09055025)

1.水仙花数:

(1)题目

若一个三位数自然数的各位数的各位数字的立方和等于该数本身,则称该数为水仙花数,例如,153=1^3+5^3+3^3,所以153为水仙花数,编程计算所有水仙花数.

(2)分析问题:

本题特点在于一个数的各个位数立方和与其本身的关系很明确且很简单,可以用if语句或find语句来完成.如果用if语句,则又有两种选择:1.命一个三位数,再表示其各个位数的数字;2.命各个位数的数字,再表示该三位数.如果用find语句,其思路与if语句类似.

(3)问题求解:

方法一:

for x=100:1:999

a=fix(x/100);

b=fix(x/10-10*a);

c=x-100*a-10*b;

if x==a^3+b^3+c^3

x

end

end

方法二:

for x=1:1:9

for y=0:1:9

for z=0:1:9

if x^3+y^3+z^3==100*x+10*y+z

m=100*x+10*y+z

end

end

end

end

方法三:

shui=100:999;

i=floor(shui/100);

j=floor(mod(shui,100)/10);

k=floor(mod(shui,10));

p=i.^3+j.^3+k.^3;

shui(find(p==shui))

(4)结论及分析:

通过实验,结果正确,证明分析无误.

(5)结果:

153 370 371 407

2.回文数

(1)题目:

对于一个自然数,若将各位数字倒序排出,加到原数字上,反复多次,若能得到一个从左到右读和从有到左读完全一样的数,则称该自然数能产生回文数.通过编程计算,你能找出多少个能产生回文数的数,又能找到多少不能产生回文数的数,二者的最小数是多少?

(2)分析问题:

本题关键在于如何将一个数的各个数位的数字倒序排出,并加到原数上.又

由题目知必然要用到循环语句.

(3)假设:

由于将一个数的各个数位的数字倒序排出,并不断加到原数上比较困难,我们假设该数为四位数并假设倒序排出加到原数得到的新数不超过10000,于是有了下面的简单程序

for a=0:9;

for b=0:9;

for c=0:9;

for d=0:9;

x=1000*a+100*b+10*c+d;

while x<10000;

if a==d&b==c;

x=x;

else

x=x+1000*d+100*c+10*b+a;

end

end

end

end

x

end

end

实际操作时,我们发现:该程序不仅具有假设中的缺陷,而且在实际操作中运行速度很慢,无法得到结果,所以必须将方法优化。后来我们使用取余和取整操作,借助循环语句while,得出如下程序,突破了本题的关键。

for a=1:100

b=0;

c=0;

x=a;

while x>=10

b=mod(x,10);

x=fix(x/10);

c=10*c+b;

end

c=10*c+x;

此程序实现了一个数的倒序操作,并不用考虑位数问题.

(4)问题求解:

for a=1:100

c=0;

x=a;

while x>=10

b=mod(x,10);

x=fix(x/10);

c=10*c+b;

end

c=10*c+x;

A=a+c;

B=0;

y=A;

while y>=10

C=mod(y,10);

y=fix(y/10);

B=10*B+C;

end

B=10*B+y;

while B~=A

A=A+B;

m=0;

z=A;

while z>=10

n=mod(z,10);

z=fix(z/10);

m=10*m+n;

end

m=10*m+z;

B=m;

end

[a,A]

end

(5)结论及分析:

修改后的程序通过四个while循环语句完成了(1)数字的倒序排出(2)倒序排出数与原数无上界的不断相加(3)相加之和倒序、正序排列所得数的比较,得出了正确的的结果。运行速度较快.

(6)结果:

最小的能产生回文数的数是1,100个数中找到了98个能产生回文数的数.其中89,98运算结果为:1.0e+012 * 1.0e+012 *

0.0000 8.8132 0.0000 8.8132

它们是不能产生回文数的数,则得到两个这样的数,最小的为89..

(7)结论推广:

在命a的范围时,我们的范围是1到100,而事实上a可以任意取值,故可以通过国修改a的范围算出任意区间上的结果.

3.完美数

(1)题目:

对于一个数而言,若它的真因子之和等于数本身,则称该数为完美数。通过编程计算,你能找到多少个完美数。

(2)分析问题:

问题的关键在于找出一个数的真因子,通过使用mode命令可以找到其所有因子。然后利用for循环得到因子之和,最后用if语句使之与原数相等而导出结果。

(3)假设:

由于暂时没有想到得到真因子的方法,我们忽略了“真”字,于是得出下列

程序:

for a=1:1000;

c=0;

for b=1:1000;

if mod(a,b)==0;

c=c+b;

end

end

if c==a

a

end

end

结果只得了一个a=1.

于是我们改换思路,将以上程序中a除以b的商当做真因子并作了部分修改,得到了结果。在做亲和数实验时,为了将完美数从结果中去掉,我们添加了变量之间的不等命令。从中我们得到了启示,对以上程序添加了a>b命令,再次得到结果。

(4)问题求解:

方法一

for a=1:1000;

c=0;

for b=1:1000;

if mod(a,b)==0&a>b;

c=c+b;

end

end

if c==a

a

end

end

方法二

for a=1:1000;

s=0;

for b=2:1000;

if mod(a,b)==0;

c=a/b;

s=s+c;

end

end

if s==a

s

end

end

(5)结论及分析:

通过对自己原来固有思维的大胆突破,我们得出了结果;通过对原来程序的修改,我们再次得到结果。修改后的程序运行较快,结果正确。

(6)结果:

一千以内的完美数有:6 ,28, 496

(7)结论推广:

程序中的a为1到1000,而a的取值可以时任意区间的自然数,可以通过修改a的范围得到其他结果。

4.亲和数

(1)题目:

亲和数又叫友好数,是指两个自然数,其中每个自然数的真因数之和等于另一个数。通过编程计算,你能得到多少对亲和数。

(2)分析问题:

此题实际上是在完美数的基础上的一个拓展,故其思想与完美数基本一样。

(3)假设:

我们假设亲和数可以是两个相同的完美数,于是将完美数的方法二分别用于两类数上,并进行了适当的修改,得出以下程序:

for a=1:1000;

x=0;

for b=2:1000;

if mod(a,b)==0;

c=a/b;

x=x+c;

end

end

for l=1:1000

y=0;

for m=2:1000;

if mod(l,m)==0;

n=l/m;

y=y+n;

end

end

if y==a&l==x;

[a,l]

end

end

end

此程序有两大缺点:1、运行速度慢;2、没有将完美数排除在外。于是我们又做了些优化,将以上程序中的x直接取代l,于是得出了运行较快的程序,而这样无疑是将运算范围缩小了一半。此外,我们添加了a~=l命令,解决了第二个缺陷。同时这个命令使我们得到了启示,于是得出了完美数的方法一,也随即得出了亲和数的第三、四种方法。

(4)问题求解:

方法一

for a=1:10000;

for b=2:10000;

if mod(a,b)==0; c=a/b;

x=x+c;

end

end

for l=1:10000

y=0;

for m=2:10000;

if mod(l,m)==0; n=l/m;

y=y+n;

end

end

if y==a&l==x&a~=l; [a,l]

end

end

end

方法二

for a=1:20000;

x=0;

y=0;

for b=2:20000;

if mod(a,b)==0; c=a/b;

x=x+c;

end

end

for m=2:10000;

if mod(x,m)==0; n=x/m;

y=y+n;

end

if y==a&a~=x;

[a,x]

end

end

方法三

for a=1:10000;

c=0;

for b=1:10000;

if mod(a,b)==0&a>b; c=c+b;

end

end

for x=1:10000;

z=0;

for y=1:10000;

if mod(x,y)==0&x>y; z=z+y;

end

end

if c==x&z==a&x~=a;

[a,x]

end

end

end

方法四

for a=1:10000;

c=0;

z=0;

for b=1:10000;

if mod(a,b)==0&a>b; c=c+b;

end

end

for y=1:10000;

if mod(c,y)==0&c>y; z=z+y;

end

end

if a==z&a~=c

[a,c]

end

end

(5)结论及分析:

虽然4种方法都可得出结果,但通过优化的方法,明显缩短了运算时间。

(6)结果:

我们得出了10000以内的所有亲和数:

220 284

284 220

1184 1210

1210 1184

2620 2924

2924 2620

5020 5564

5564 5020

6232 6368

6368 6232

(7)结论推广:

程序中的运算范围我们定为1到10000,,但通过改变对变量的赋值范围,

就可以得出其他更多的结果

实验感想

本次实验我们初步了解了MATLAB的使用方法,尤其对简单编程有了进一步的实践,并掌握了一些基本操作方法和编程思想。通过实验,电脑软件的强大功能让我们认识到了其对数学研究的重要性和必要性。由于第一次接触MATLAB,在实验过程中我们遇到了不少困难,但我们通过查阅书本、互相讨论、反复研究以及向学长、老师请教等途径将它们一一克服。尤其是我们的团结协作,在此体现得非常明显,很多问题都是在大家不断的商量与完善中才得出的结果。而对于同一个的问题,每个人通常都会有不同的看法,在不断的对比与优化中我们才逐渐得到比较好的程序。另外在实验报告的完成过程中,大家各尽所长。这次试验使我们更加清楚的认识到团结合作的重要性。在今后的学习中,我们要更认真地学习MATLAB,使之成为我们学习数学和日后进行研究的好帮手;同时,我们要更加重视团队合作,取长补短,精益求精。

2009年12月23日

高级程序设计(实习基础类试题)

《高级程序设计》实习 基础类编程题目 (顺序结构类题目) 1、(数字处理)输入一个三位整数x(999=>x>=100),将其分解出百位、十位、各位,并求出各位之和以及各位之积。 2、要将"Program"译成密码,译码规律是:用原来字母后面的第5个字母代替原来的字母.例如,字母"A"后面第5个字母是"F"."F"代替"A"。 (选择结构类题目) 3、编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式data1op data2的值,其中op可为+,-,*,/(用switch语句实现)。 (题目可扩充到四则混合运算,可以将“+、-、*、\”以及“()”考虑进去) 4、编一程序,对于给定的一个百分制成绩,输出相应的五分值成绩。设90分以上为'A',80-89分为'B',70-79分为'C',60-69分为'D',60分以下为'E'(用switch语句实现)。 (循环结构类题目) 5、求Sn=a+aa+aaa+------+aaaaaaa(n个a),其中a和n都从键盘中输入,如从键盘中输入2,5,则计算S5=2+22+222+2222+22222。 (要求使用三种循环语句分别完成) 6、韩信点兵。 韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。编程求韩信至少有多少兵? 7、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 8、(穷举算法)古希腊人认为因子的和等于它本身的数是一个完全数(自身因子除外),例如28的因子是1、2、4、7、14,且1+2+4+7+14=28,则28是一个完全数,编写一个程序求2-1000内的所有完全数。 9、(穷举算法)(钱币问题)在日常生活中常常需要用一些较小面额的钱币去组合出一定的币值。现有面值为1元、2元和5元的钞票(假设每种钞票的数量都足够多),从这些钞票中取出30张使其总面值为100元,问有多少种取法?每种取法的各种面值的钞票各为多少张? (数组类题目) 10、已知一组字符串a[10]=”abCDefGHi”,将其中的小写字母改写成大写字母。 11、已知有20个两位正整数的数组a[20]={10,11,12,13,14,19,18,17,16,15,20,21,22,23,24,29,28,27,26,25},编一程,将数组a中满足:个位数加十位数是偶数的元素赋给数组b[],并对数组b[]从小到大排序打印。例:11,13。 12、(排序)已知有20个两位正整数的数组a[20]={10,11,12,13,14,19,18,17,16,15,20,21,22,23,24,29,28,27,26,25},从键盘输入上述数组a中的某个数,编写一程序,将该数从数组a中删除掉,将删除后该数的数组a打印。 (编程思路:需要考虑键盘输入的数在数组中的位置,可能的位置是输入的数值为10,刚好是数组第一个元素;可能是数组a中间的某个数值;可能是数组a最好一个数值25,整个处理都不相同)

南京理工大学数字信号处理matlab上机完美版

1.已知3阶椭圆IIR数字低通滤波器的性能指标为:通带截止频率0.4π,通带波纹为0.6dB,最小阻带衰减为32dB。设计一个6阶全通滤波器对其通带的群延时进行均衡。绘制低通滤波器和级联滤波器的群延时。 %Q1_solution %ellip(N,Ap,Ast,Wp) %N--->The order of the filter %Ap-->ripple in the passband %Ast->a stopband Rs dB down from the peak value in the passband %Wp-->the passband width [be,ae]=ellip(3,0.6,32,0.4); hellip=dfilt.df2(be,ae); f=0:0.001:0.4; g=grpdelay(hellip,f,2); g1=max(g)-g; [b,a,tau]=iirgrpdelay(6,f,[0 0.4],g1); hallpass=dfilt.df2(b,a); hoverall=cascade(hallpass,hellip); hFVT=fvtool([hellip,hoverall]); set(hFVT,'Filter',[hellip,hoverall]); legend(hFVT,'Lowpass Elliptic filter','Compensated filter'); clear; [num1,den1]=ellip(3,0.6,32,0.4); [GdH,w]=grpdelay(num1,den1,512); plot(w/pi,GdH); grid xlabel('\omega/\pi'); ylabel('Group delay, samples'); F=0:0.001:0.4; g=grpdelay(num1,den1,F,2); % Equalize the passband Gd=max(g)-g; % Design the allpass delay equalizer [num2,den2]=iirgrpdelay(6,F,[0,0.4],Gd); [GdA,w] = grpdelay(num2,den2,512); hold on; plot(w/pi,GdH+GdA,'r');

MATLAB上机指导书

MATLAB上机指导书 电子信息科学与技术专业 张焕明孙明编 佛山科学技术学院 2005年9月

目录 前言 实验一 MATLAB基础知识 1 实验二矩阵与数组 5 实验三基本操作命令 8 实验四高级操作命令 10 实验五 MATLAB的M函数编程 12

前言 MATLAB的名称源自Matrix Laboratory,是一门计算语言,它专门以矩阵的形式处理数据.MATLAB将计算与可视化集成到一个灵活的计算机环境中,并提供了大内置函数,可以在广泛的工程问题中直接利用这些函数获得数值解.此外,用MATLAB 编写程序,犹如在一张草稿纸上排列公式和求解问题一样效率高,因此被称为“演算纸式的”科学工程算法语言.在我们高等数学的学习过程中,可以结合 MATLAB 软件,做一些简单的编程应用,在一定程度上弥补我们常规教学的不足,同时,这也是我们探索高职高专数学课程改革迈出的一步.

实验一 MATLAB 基础知识 一、实验目的 1、MATLAB 的使用初步练习 2、MATLAB 的窗口组成 二、实验内容 1、掌握表达式的输入方法 2、MATLAB 的常量及其表示方法 3、分号、百分比号、逗号及省略号的用法 4、向量和矩阵的处理方式;常用的数学函数;搜索路径的概念;MATLAB 的帮 助功能。 三、实验仪器、设备和材料 1、微型计算机,能正常运行Matlab 6.0或以上版本 2、Matlab6.0或以上版本 四、实验原理 略(参考教材的相关部分) 五、实验步骤 1、MATLAB 文件的编辑、存储和执行 MATLAB 提供了两种运行方式,即命令行和M 文件方式. A .命令行方式 直接在命令窗口输入命令来实现计算或作图功能. 例如,若要求表达式 9 .248.26107 sin 369.12÷?+π的值,我们可在MATLAB 命令窗口中键入下面的命令: >> 1.369^2+sin(7/10*pi)*sqrt(26.48)/2.9 (回车) 观测运行结果并解释原因 也可将计算的结果赋给某一个变量,例如输入 : >> a=1.369^2+sin(7/10*pi)*sqrt(26.48)/2.9 (回车) 观测运行结果并解释原因 B .M 文件的运行方式 1)文件编辑 在MATLAB 窗口中单击File 菜单依次选择NewM-File,打开M 文件输入运行界面,如下图所示。此时屏幕上会出现所需的窗口,在该窗口中输入程序文件,可以进行调试和运行.与命令行方式相比,M 文件方式的优点是可以调试,可重复应用. 2)文件存储 单击File 菜单,选择Save 选项,可将自己所编写的程序存在一个后缀为m 的文件中. 3)运行程序 在M 文件窗口中选择Debug 菜单中的run 选项,即可运行此M 文件;也可在MATLAB 命令窗口中直接输入所要执行的文件名后回车即可.但需要的是该程序文件必须存在MATLAB 默认的路径下.用户可以在MATLAB 窗口中单击File 菜单选择Set Path 将要执行的文件所在的路径添加到MATLAB 默认的路径序列中. 2、MATLAB 基本运算符及表达式 表1-1 基本运算符

Matlab 上机题及答案

1 一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。 for m=100:999 m1=fix(m/100); %求m的百位数字 m2=rem(fix(m/10),10); %求m的十位数字 m3=rem(m,10); %求m的个位数字 if m==m1*m1*m1+m2*m2*m2+m3*m3*m3 disp(m) end end 2.从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。 sum=0; n=0; val=input('Enter a number (end in 0):'); while (val~=0) sum=sum+val; n=n+1; val=input('Enter a number (end in 0):'); end if (n > 0) sum mean=sum/n end 3. 若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,500]之间的全部完数。 for m=1:500 s=0; for k=1:m/2 if rem(m,k)==0 s=s+k; end end if m==s disp(m); end end 4. 从键盘上输入数字星期,在屏幕上显示对应英文星期的单词。 function week n=input('input the number:'); if isempty(n) errror('please input !!')

end if n>7|n<1 error('n between 1 and 7') end switch n case 1 disp('Monday') case 2 disp('Tuesday') case 3 disp('Wednesday') case 4 disp('Thursday') case 5 disp('Friday') case 6 disp('Saturday') case 7 disp('Sunday') end 5. 某公司销售电脑打印机的价格方案如下: ()如果顾客只买一台打印机,则一台的基本价格为$150。 ()如果顾客购买两台以上打印机,则第二台价格为$120。 ()第三台以后,每台$110。 写一段程序分别计算出购买1--10台打印机所需的钱数。打印机台数可以在程序开始处指定,或通过input命令读入。运行程序,计算出购买10台打印机的总价格。 写出程序,生成分别购买1--10台打印机所需价格的图表(使用fprintf命令输出图表,不允许手算)。 x=input('请输入购买的打印机台数:'); for m=1:x if m<=1 y(m)=150*m; elseif m<=2 y(m)=150+120*(m-1); else y(m)=150+120+110*(m-2); y(1,m)=y(m); end end y(x) plot(1:m,y,'r*--')

MATLAB上机实验(答案)

MATLAB工具软件实验(1) (1)生成一个4×4的随机矩阵,求该矩阵的特征值和特征向量。程序: A=rand(4) [L,D]=eig(A) 结果: A = 0.9501 0.8913 0.8214 0.9218 0.2311 0.7621 0.4447 0.7382 0.6068 0.4565 0.6154 0.1763 0.4860 0.0185 0.7919 0.4057 L = -0.7412 -0.2729 - 0.1338i -0.2729 + 0.1338i -0.5413 -0.3955 -0.2609 - 0.4421i -0.2609 + 0.4421i 0.5416 -0.4062 -0.0833 + 0.4672i -0.0833 - 0.4672i 0.4276 -0.3595 0.6472 0.6472 -0.4804 D = 2.3230 0 0 0 0 0.0914 + 0.4586i 0 0 0 0 0.0914 - 0.4586i 0 0 0 0 0.2275 (2)给出一系列的a值,采用函数 22 22 1 25 x y a a += - 画一组椭圆。 程序: a=0.5:0.5:4.5; % a的绝对值不能大于5 t=[0:pi/50:2*pi]'; % 用参数t表示椭圆方程 X=cos(t)*a; Y=sin(t)*sqrt(25-a.^2); plot(X,Y) 结果: (3)X=[9,2,-3,-6,7,-2,1,7,4,-6,8,4,0,-2], (a)写出计算其负元素个数的程序。程序: X=[9,2,-3,-6,7,-2,1,7,4,-6,8,4,0,-2]; L=X<0; A=sum(L) 结果: A =

C语言特殊数据的输出

特殊数据的输出 【涉及知识点】 1.函数的参数; 2.多分支条件语句; 3.循环; 4.数据的输入输出; 5.随机函数的使用。 【题目介绍】 请编写程序,由系统随机产生一个正整数n(1

(完整版)MATLAB数学实验第二版答案(胡良剑)

数学实验答案 Chapter 1 Page20,ex1 (5) 等于[exp(1),exp(2);exp(3),exp(4)] (7) 3=1*3, 8=2*4 (8) a为各列最小值,b为最小值所在的行号 (10) 1>=4,false, 2>=3,false, 3>=2, ture, 4>=1,ture (11) 答案表明:编址第2元素满足不等式(30>=20)和编址第4元素满足不等式(40>=10) (12) 答案表明:编址第2行第1列元素满足不等式(30>=20)和编址第2行第2列元素满足不等式(40>=10) Page20, ex2 (1)a, b, c的值尽管都是1,但数据类型分别为数值,字符,逻辑,注意a与c相等,但他们不等于b (2)double(fun)输出的分别是字符a,b,s,(,x,)的ASCII码 Page20,ex3 >> r=2;p=0.5;n=12; >> T=log(r)/n/log(1+0.01*p) Page20,ex4 >> x=-2:0.05:2;f=x.^4-2.^x; >> [fmin,min_index]=min(f) 最小值最小值点编址 >> x(min_index) ans = 0.6500 最小值点 >> [f1,x1_index]=min(abs(f)) 求近似根--绝对值最小的点 f1 = 0.0328 x1_index = 24 >> x(x1_index) ans = -0.8500 >> x(x1_index)=[];f=x.^4-2.^x; 删去绝对值最小的点以求函数绝对值次小的点 >> [f2,x2_index]=min(abs(f)) 求另一近似根--函数绝对值次小的点 f2 = 0.0630 x2_index = 65 >> x(x2_index) ans = 1.2500

MATLAB上机答案

一熟悉Matlab工作环境 1、熟悉Matlab的5个基本窗口 思考题: (1)变量如何声明,变量名须遵守什么规则、是否区分大小写。 答:变量一般不需事先对变量的数据类型进行声明,系统会依据变量被赋值的类型自动进行类型识别,也就是说变量可以直接赋值而不用提前声明。变量名要遵守以下几条规则: 变量名必须以字母开头,只能由字母、数字或下划线组成。 变量名区分大小写。 变量名不能超过63个字符。 关键字不能作为变量名。 最好不要用特殊常量作为变量名。 (2)试说明分号、逗号、冒号的用法。 分号:分隔不想显示计算结果的各语句;矩阵行与行的分隔符。 逗号:分隔欲显示计算结果的各语句;变量分隔符;矩阵一行中各元素间的分隔符。 冒号:用于生成一维数值数组;表示一维数组的全部元素或多维数组某一维的全部元素。 (3)linspace()称为“线性等分”函数,说明它的用法。 LINSPACE Linearly spaced vector.线性等分函数 LINSPACE(X1,X2)generates a row vector of100linearly equally spaced points between X1and X2. 以X1为首元素,X2为末元素平均生成100个元素的行向量。 LINSPACE(X1,X2,N)generates N points between X1and X2. For N<2,LINSPACE returns X2. 以X1为首元素,X2为末元素平均生成n个元素的行向量。如果n<2,返回X2。 Class support for inputs X1,X2: float:double,single 数据类型:单精度、双精度浮点型。 (4)说明函数ones()、zeros()、eye()的用法。 ones()生成全1矩阵。 zeros()生成全0矩阵。 eye()生成单位矩阵。 2、Matlab的数值显示格式

(完整版)数字图像处理MATLAB程序【完整版】

第一部分数字图像处理

实验一图像的点运算 实验1.1 直方图 一.实验目的 1.熟悉matlab图像处理工具箱及直方图函数的使用; 2.理解和掌握直方图原理和方法; 二.实验设备 1.PC机一台; 2.软件matlab。 三.程序设计 在matlab环境中,程序首先读取图像,然后调用直方图函数,设置相关参数,再输出处理后的图像。 I=imread('cameraman.tif');%读取图像 subplot(1,2,1),imshow(I) %输出图像 title('原始图像') %在原始图像中加标题 subplot(1,2,2),imhist(I) %输出原图直方图 title('原始图像直方图') %在原图直方图上加标题 四.实验步骤 1. 启动matlab 双击桌面matlab图标启动matlab环境; 2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像, 如:cameraman图像;再调用相应的直方图函数,设置参数;最后输出处理后的图像; 3.浏览源程序并理解含义; 4.运行,观察显示结果; 5.结束运行,退出; 五.实验结果 观察图像matlab环境下的直方图分布。 (a)原始图像 (b)原始图像直方图 六.实验报告要求 1、给出实验原理过程及实现代码; 2、输入一幅灰度图像,给出其灰度直方图结果,并进行灰度直方图分布原理分析。

实验1.2 灰度均衡 一.实验目的 1.熟悉matlab图像处理工具箱中灰度均衡函数的使用; 2.理解和掌握灰度均衡原理和实现方法; 二.实验设备 1.PC机一台; 2.软件matlab; 三.程序设计 在matlab环境中,程序首先读取图像,然后调用灰度均衡函数,设置相关参数,再输出处理后的图像。 I=imread('cameraman.tif');%读取图像 subplot(2,2,1),imshow(I) %输出图像 title('原始图像') %在原始图像中加标题 subplot(2,2,3),imhist(I) %输出原图直方图 title('原始图像直方图') %在原图直方图上加标题 a=histeq(I,256); %直方图均衡化,灰度级为256 subplot(2,2,2),imshow(a) %输出均衡化后图像 title('均衡化后图像') %在均衡化后图像中加标题 subplot(2,2,4),imhist(a) %输出均衡化后直方图 title('均衡化后图像直方图') %在均衡化后直方图上加标题 四.实验步骤 1. 启动matlab 双击桌面matlab图标启动matlab环境; 2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像, 如:cameraman图像;再调用相应的灰度均衡函数,设置参数;最后输出处理后的图像; 3.浏览源程序并理解含义; 4.运行,观察显示结果; 5.结束运行,退出; 五.实验结果 观察matlab环境下图像灰度均衡结果及直方图分布。 (a)原始图像 (b)均衡化后图像

MATLAB上机考试题(一)

(1)在MATLAB的命令窗口中执行_____命令,将命令窗口的显示内容清空。() A.clear B.clc C.echo off D.cd (2)在MATLAB的命令窗口中执行_____命令,使数据输出显示为十六进制表示。() A.format long B.format rat C.format hex D.format short e (3)下列变量名中_____是合法的。() A.x*y,a,1 B.x\y,a1234 C.end,1 bcx D.char_1,i,j (4)已知x=0:5,则x有_____个元素。() A.5 B.6 C.7 D.8 (5)一下运算符中哪个的优先级最高_____。() A./ B.^ C.~= D.& (6)使用检测函数isnumeric(10)的结果是_____。() A.1 B.0 C.false D.true (7)三维图形中默认视角是_____度。() A.方位角=0 俯仰角=90 B.方位角=90 俯仰角=0 C.方位角=37.5 仰俯角=30 D.方位角=0 仰俯角=180 (8)将符号表达式化简为因式分解因式分解因式分解因式分解形式,使用_____函数。() A.collect B.expand C.horner D.factor (9)运行以下命令,则_____描述是正确的。()>>syms a b c d >>A=[a b;c d] A.A占用的内存小于100B B.创建了5个符号变量 C.A占用的内存是a b c d的总和 D.不存在 (10)已知数组a=[1 2 3;4 5 6;7 8 9],则a(:,end)是指_____元素。 (11)运行命令bitor(8,7)的结果是_____。 (12)运行以下命令: >>x=0:10; >>y1=sin(x); >>y2=5*sin(x); >>y3=[10*sin(x );20*sin(x)]; >>plot(x,y1,x,y2,x,y3) 则在一个图形窗口中,可以看到_____条曲线。 (13)符号表达式“g=sym(sin(a*z)+cos(w*v))”中的自由符号变量是_____。 (14)运行以下命令: >>syms t >>f1=1/t >>limitf1_r=limit(f1,'t','0','right'); 则函数limitf1_r趋向0的右极限为_____。 15.在MATLAB的命令窗口中执行______命令,使数值5.3显示为5.300000000000000e+000 A. format long B. format long e C. format short D. format short e 16.下列变量名中______是合法的。A.char_1,i,j B.1_1, a.1 C.x\y,a1234 D.end,1bcx 17.已知x=0:9,则x有_____个元素。 A.12 B.11 C.10 D.9 18.产生对角线上为全1其余为0的2行3列矩阵的命令是______ A. ones(2,3) B. ones(3,2) C. eye(2,3) D. eye(3,2) 19.已知数组a= [1 2 3 4 5 6 7 8 9] ,则运行a(:,1)=[]命令后______ A. a变成行向量 B. a数组为2行2列 C. a 数组为3行2列 D. a数组中没有元素3 20.按含义选出各个函数名:表示4舍5入到整数的是____,表示向最接近0取整的是____,表示向最接近-∞取整的是____,表示向最接近∞取整的是_____ A. round(x) B. fix(x) C. floor(x) D. ceil(x) 21.已知a=0:5,b=1:6,下面的运算表达式出错的为______ A. a+b B. a./b C. a’*b D. a*b 22.已知s=’显示”hello”’,则s的元素个数是______ A. 12 B. 9 C. 7 D.18

特殊数据的输出(1)资料

《C程序设计》 课程设计报告(20 14 —2015 学年第2 学期) 题目:特殊数据的输出 学院:电气与电子信息学院 班级:1309 学号:1304080016 姓名:梁骞 指导教师:罗涛华 时间:起 4.27 止4.30

一、课程设计基本信息 课程代码:05190124 课程名称:计算机基础课程设计 课程英文名称: Computer-based Course Design 课程所属单位(院(系)、教研室):数学与计算机学院计算机基础课程群 课程面向专业:食品科学与工程学院、机械工程学院、电气与电子工程学院、土建学院、动物科学与营养工程学院、化学与环境工程学院、工商管理类、国际经济与贸易、旅游管理、金融学、行政管理、汉语言文学、英语、护理学、康复治疗专业、生物科学类、制药工程、制药工程(生物制药)、药物制剂、物流管理 课程类型:必修课 先修课程:大学计算机基础通识选修课程、程序设计课程 学分:1 总学时:1周 二、课程设计目标 掌握所学语言程序设计的方法,熟悉所学语言的开发环境及调试过程,熟悉所学语言中的数据类型,数据结构、语句结构、运算方法,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。通过综合设计要求达到下列基本技能:1.培养查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。 2.通过对所选题目方案分析比较,确立方案,编制与调试程序,初步掌握程序设计的方法,能熟练调试程序。 3.系统设计编程简练,可用,功能全面,并有一定的容错能力。用户界面良好,有较好的输出功能。在完成课题基本要求后,具有创新型设计,具有一定的实用价值。 4.根据个人的设计调试过程,撰写设计报告。 三、课程设计内容 熟练掌握所学语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用,包括时间函数、绘图函数,以及文件的读写操作等。 四、课程设计要求 1.要求每个同学都要认真对待,积极参与。 2.课程设计结束时,提交完成的所有源程序、相关文件和可执行文件。同时填写并完 成《课程设计报告册》。 3.不符合要求的程序、设计报告、抄袭的设计报告或源程序代码、在设计中完全未参 与的将作不及格处理。 五、考核方式 指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神

水仙花数算法研究及其C语言代码实现

/** 水仙花数算法研究及其C语言代码实现 'BnBn-1...B1'=X(N)= sum{ digit = 0..9, count_digit[digit] * power(digit, N)} @author 东海陈光剑剑魔书仙读书录 水仙花数的相关数学证明及其算法&源程序实现 The Computer Solution Of Narcissistic Number & Mathematical Proofs 东海陈光剑剑魔书仙读书录 2013.4.28 @ iSoftStone [参数说明] N(n):n位十进制正整数N(n) MAX(n):n位十进制正整数最大值10 n -1 MIN(n):n位十进制正整数最大值10 n-1 Nar(n):n位十进制正整数中的水仙花数 b n-1,b n-2,...,b 1,b 0:N(n)各位十进制数位上的数字,显然b n-1>0. k 0 ,k 1 ,...,k 9 : N(n)中数字0,1,2,...,9 分别总计出现的次数. 显然k i >=0 & sum(k i )=n. k 0 *0^n + k 1 *1^n + ...+ k 9 * 9^n =N(n). (i=0,1,2 (9) 穷举所有十元组(k 0 ,k 1 ,...,k 9 ); 对满足条件[*]的一个特定的十元组(k 0 ,k 1 ,...,k 9 )*,即可确定唯一的一个Nar(n). [定理] 0. MIN(n)60,Nar(n)不存在. 2. 对满足条件[*]的一个特定的十元组(k 0 ,k 1 ,...,k 9 )*,确定唯一的一个Nar(n). 3. 不定方程k 0 + k 1 +...+ k 9 = n 非负整数解十元组Sj的个数为C{10+n-1,10-1}=C{9+n,9}= (9+n)!/[(9!)(n!)]组. [算法描述] Step1.求解不定方程k 0 + k 1 +...+ k 9 = n 所有的非负整数解S集. Step2.对每个解Sj计算 k 0 *0^n + k 1 *1^n + ...+ k 9 * 9^n =T(n)

MATLAB中文上机作业

1、给定c 如下,计算运算结果。 1.1 2.2 3.3 4.44321c 0.10.50.30.212233045????????? ?=???????? (a) c (2:end, 2:3:end) (b) b= c ([2 2], [3 3]) (c) e=c(2:3,3:end) (d) d (: , : , 1)=e d (:, : , 2) = e*e 2、给定a 如下,计算运算结果。 (a) a =eye(3)-2; (b) b = [ a(2) 6 4; a ]; (c)a ([1 2], :) = a ([2 2], :); 3、给定以下a, b, c 和d ,计算下列等式的值,若认为运行结果出错,请给出理由。 2112a ???=???? ?? ? ????=1310b [1,2]c = (a) result = a .* c’; (b) result = a * [c c]; (c) result = a .* [c’ c’]; (d) result = a + b * c’; (e) result = a + b .* c 4、一小球从空中下落的位移公式为2 002 1at t v x x + +=,用MATLAB 计算小球在t =5s 时的位置,已知x 0 =10m ,v 0 =15m/s , a=-9.84m/s 2。

5、用MATLAB 语句画出函数x e x y 2.02)(?=在[0,10]的值。 6、(温度转换)设计一个MATLAB 程序,读取一个华氏温度的输入,输出开尔文温度。 华氏温度和开尔文温度的转换关系式可在物理学课本中找到。其关系式为: ()5 ()()32.0273.159 T T = ?+开尔文华氏温度 要求能提示用户输入华氏温度,读取用户键盘输入数据,并最终显示出温度。 7、一个内阻R s =50?,电动势V =120V 的电源驱动一个负载R L 。当R L 为多少时,R L 的功率最大?在这种情况下,功率为多少?画出以R L 为自变量的R L 功率图。 8、电器工程低通滤波电路 图3.8 简单的低通滤波电路 上图是向大家展示了一个简单的低通滤波电路。这个电路是由一个电阻和一个电容组成。输出电压V 0与输入电压V i 的电压比为 V o V i = 11 + j 2πfRC 其中V i 是在频率f 下的正弦输入电压。R 代表电阻,单位为欧姆。C 代表电容,单位为法拉。j 为-1 假设R =16 k ?,电容C =1 μF ,请在同一个图形窗口下分别画出这个滤波器的幅频特性、相频特性曲线,要求幅频特性曲线坐标轴均采用对数坐标,相频特性曲线频率坐标用对数坐标。 9、工程师们经常用分贝或dB 来描述两功率之比。dB 的定义如下 1 2 10 log 10P P dB = P 2是已测量的功率,P 1代表参考功率。 a. 假设参考功率P 1为1mw,编写一个程序,接受一个输入功率P 2并把它转化成为以1mw 为参考功率的dB.(它在工程上有一个特殊单位dBm)。在编写程序时,注意培养好的编程习惯。 b. 写一个程序,创建一个以W 为单位的功率(横坐标),其对应的相对功率(单位为dBm)(纵坐标)的图象。要求画2个图,第1个图象的XY 轴都要用线性轴,而第2图象要用对数-线性 xy 轴。 10、收音接收机.电阻上的电压可通过频率计算出来,公式如下 o R V C L R R V 2 2)1(ωω? +=

水仙花数和完全数

E-mail文化传播网https://www.doczj.com/doc/5e15411876.html,

水仙花数

水仙花数外文名narcissistic number。 指的是:在自然数中,如果一个三位数等于其自身各个数字的立方和,那么这个三位数就称为“水仙花数”。 后来,水仙花数又发展称为阿姆斯特朗数,是指一个 n 位数( n≥3 ),它的每 个位上的数字的 n 次幂之和等于它本身。所以就有四位水仙花数、五位水仙花数、六位水仙花数。。。。。。等等。实际上这只是自幂数的一种数。严格来说三位数的3次幂数才是水仙花数。 (例如:13+ 53+ 33 = 153)

在数论中,水仙花数,也被称为 超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong nmber),用来 描述一个N位非负整数,其各个 位数字的N次方和等于该数本身。若将条件放宽,一个N位数,其 各个数之M次方和等于该数,(M 和N不一定相等)这样的数称为 完全数字不变量(perfect digital invariant), 水仙花数一定是完全数字不变量,但完全数字不变量不一定是水仙花数。

阿姆斯特朗数只是自幂数的一种,严格来说三位数的3次幂数才成为水仙花数。 其他位数的自幂数名字 一位自幂数:独身数 两位自幂数:没有 三位自幂数:水仙花数 四位自幂数:四叶玫瑰数 五位自幂数:五角星数 六位自幂数:六合数 七位自幂数:北斗七星数 八位自幂数:八仙数 九位自幂数:九九重阳数 十位自幂数:十全十美数 常见的阿姆斯特朗数。 三位的水仙花数共有4个:153,370,371,407; 四位的水仙花数共有3个:1634,8208,9474; 五位的水仙花数共有3个:54748,92727,93084; 六位的水仙花数只有1个:548834; 七位的水仙花数共有4个:1741725,4210818,9800817,9926315;八位的水仙花数共有3个:24678050,24678051

(完整word版)MATLAB实训实验讲解

2015/2016学年下学期 《信号与系统》 实验报告 班级: 学号: 学生姓名: 指导教师: 2016年3月8 日

实验一 基本函数仿真 实验项目: 基本函数仿真 实验时间: 2016年 3 月 8 日 星期 二 第 34 节课 实验地点: 1501实验室 实验目的: 1、 学习使用MATLAB 软件 2、 学习MATLAB 中各种函数,并应用函数分析 3、 对MATALB 的进一步的学习了解,熟练掌握MATALB 的各种操纵, 学会使用MATALB 解决复杂的运算并学会用MATALB 解决平时学习 4、 了解MATALB 的数值运算 5、 了解MATALB 的基本函数和命令 6、 学习掌握MATALB 有关命令 实验内容: 1、 (1) 题目:应用MA TLAB 方法实现单位阶跃信号和矩形脉冲。 (2) 程序清单(源程序) 解:对于阶跃函数,MATLAB 中有专门的stairs 绘图命令。例如,实现)(t 和矩形脉冲的程序如下: t=-1:2; % 定义时间范围向量t x=(t>=0); subplot(1,2,1),stairs(t,x);axis([-1,2,-0.1,1.2]); grid on % 绘制单位阶跃信号波形 t=-1:0.001:1; % 定义时间范围向量t g=(t>=(-1/2))-(t>=(1/2));

subplot(1,2,2),stairs(t,g);axis([-1,1,-0.1,1.2]); grid on % 绘制矩形脉冲波形 (3) 运行结果(截图) 00.20.40.60.81 00.2 0.4 0.6 0.8 1 图1 例1图 (4)函数解析 Subplot: 使用方法:subplot (m,n,p )或者subplot (m n p )。 是将多个图画到一个平面上的工具。其中,m 表示是图排成m 行,n 表示图排成n 列,也就是整个figure 中有n 个图是排成一行的,一共m 行,如果m=2就是表示2行图。p 表示图所在的位置,p=1表示从左到右从上到下的第一个位置。 Stairs: stairs 函数用于绘制阶梯状图 axis 函数通常在绘图中用于设置坐标值范围 2、(1)题目 例2 应用MA TLAB 方法生成信号)(sin )(t c t f =和)()(t S t f a =的波形。 (2)程序清单 解:为生成函数 t t t c ππsin )(sin = 可直接调用MA TLAB 中的专门命令,程序如下: t=-5:0.01:5; % 定义时间范围向量t f=sinc(t); % 计算Sa(t)函数 plot(t,f); grid on % 绘制Sa(t)的波形 (3)运行结果

水仙花数

1.“水仙花数”是指这样的数,其各位数字的立方和等于该数本身.编写程序求100至999的范围内有多少个水仙花数 #include main() { int dig,k,m,s,count; count=0; for(k=100;k<=999;k++) { dig=0; s=0; dig=k/100; s=s+dig*dig*dig; m=k%100; while(m!=0) { dig=m%10; s=s+dig*dig*dig; dig=m/10; s=s+dig*dig*dig; m=0;

} if(s==k) { count++; } } printf("%d\n",count); } 2.(x,y,z)满足方程:x^2+y^2+z^2=55^2(注:要求x>y>z);则(x,y,z)称为方程的一个解.试求方程的整数解(包括负整数解)的个数. #include main() { int x,y,z,s,n=0; for(x=-55;x<=55;x++) for(y=-55;y

for(z=-55;z main() { int dig,k,m,s,count; count=0; for(k=100;k<=400;k++) { dig=0; s=0; dig=k/100;

matlab控制系统计算机仿真实验-完整版

MALTAB 仿真实验指导书 实验一 实验题目: 欧拉法&梯形法的MATLAB 实现 实验目的: 1.熟练掌握MATLAB 的使用方法 2.牢记欧拉法、梯形法的计算过程 3.熟悉欧拉法、梯形法以及实现二阶动态响应的程序编写 实验内容: 已知被控对象的系数矩阵分别为 A=[-5 -2 -1 -0.5;4 0 0 0;0 2 0 0;0 0 1 0 ] B=[1;0;0;0]; C=[0 0 0.25 0.5]; D=0; 根据欧拉法、梯形法的递推公式,应用MATLAB 语言编写相应的仿真程实验要求: 1.取计算步长65.0=h ,初值均为零,输入为阶跃信号,取25=u ,研究系统25秒的动态过程。 2.取计算步长01.0=h ,初值均为零,输入为阶跃信号,取25=u ,研究系统25秒的动态过程。 实验算法: 欧拉法递推公式: ),(1k k k k y t hf y y +=+ 梯形法的递推公式: )],(),([2 ) ,(011101++++++=+=k k k k k k k k k k y t f y t f h y y y t hf y y 实验方法: 利用所学过数值积分方法(欧拉法、梯形法),通过MATLAB 语言对给定的系统进行仿真 实验步骤: 1.了解并掌握基本数值积分的方法,即欧拉法、梯形法,并做比较,了解它们之间的联系与区别和优缺点,其中重点掌握梯形法。 2.通过给定的系统,利用欧拉法、梯形法编写相应MATLAB 语言,实现仿真,得出相应的仿真曲线。 3.比较仿真实验结果,并得出结论。 4.撰写实验报告。 实验程序: 1.欧拉法

A=[-5 -2 -1 -0.5;4 0 0 0;0 2 0 0;0 0 1 0]; B=[1;0;0;0]; C=[0 0 0.25 0.5]; D=0; x0=[0;0;0;0];% x0为状态变量的初值,此处以列向量表示; u=25;% u为输入向量; t0=0;% t0为仿真时间的起始时刻; tf=15;% tf为仿真时间的结束时刻; h=0.65;% h=0.01 h为仿真时所取的仿真步长; m=(tf-t0)/h; [r,c]=size(A); for i=1:m for j=1:r x(j)=x0(j)+h*(A(j,:)*x0+B(j,:)*u); end y(i)=C*x'; x0=x'; t(i)=i*h; end plot(t,y) grid on title('useEuler') 2.梯形法 A=[-5 -2 -1 -0.5;4 0 0 0;0 2 0 0;0 0 1 0]; B=[1;0;0;0]; C=[0 0 0.25 0.5]; D=0; x0=[0;0;0;0];% x0为状态变量的初值,此处以列向量表示; u=25;% u为输入向量; t0=0;% t0为仿真时间的起始时刻; tf=15;% tf为仿真时间的结束时刻; h=0.65;% h=0.01 h为仿真时所取的仿真步长; m=(tf-t0)/h; [r,c]=size(A); for i=1:m for j=1:r x(j)=x0(j)+h*(A(j,:)*x0+B(j,:)*u); end x1=x'; for k=1:r xx(k)=x0(k)+0.5*h*((A(k,:)*x0+B(k,:)*u)+(A(k,:)*x1+B(k,:)*u)); end y(i)=C*xx';

相关主题
文本预览
相关文档 最新文档