文档库 最新最全的文档下载
当前位置:文档库 › 算法设计与分析实验报告_Matlab实现

算法设计与分析实验报告_Matlab实现

算法设计与分析实验报告_Matlab实现
算法设计与分析实验报告_Matlab实现

算法设计与分析实验报告说明:本实验报告的算法全部用Matlab实现

目录:

一、求最大公约数的欧几里得算法

二、验证给定数组中的所有元素是否唯一

三、计算两个N阶矩阵的乘积

四、递归算法(阶乘、Fibonacci数列)

五、KMP模式匹配算法

六、Huffman编码

七、图的遍历(深度优先搜索算法DFS、广度优先搜索算法BFS)

八、Dijkstra算法、Kruskal算法和Prim算法

九、排序算法(选择、冒泡、归并、快速、插入)

十、二叉树的三序遍历(前序、中序、后序)

一、求最大公约数的欧几里得算法

代码:

function x=gcd(m,n)

%%求最大公约数的欧几里得算法

%输入:两个整数m,n

%输出:m,n的最大公约数x

if(m~=fix(m))||(n~=fix(n))

error('两个输入变量必须为整数!!');

end

if(m~=0)&&(n~=0)

while n~=0

r=mod(m,n);

m=n;

n=r;

end

x=m;

else

error('两个输入变量均不能为零!!');

end

end

测试:

x=gcd(123,234)

x=

3

二、验证给定数组中的所有元素是否唯一代码:

function x=UniqueElements(A)

%%验证给定数组中的所有元素是否唯一

%输入:一个数组1xN矩阵A

%输出:1--该数组所有元素唯一

%0--该数组所有元素不唯一

x=1;

N=size(A,2);

for i=1:(N-1)

for j=(i+1):N

if A(i)==A(j)

x=0;

break;

end

end

end

end

测试:

x=UniqueElements([2011051527])

x=

>>x=UniqueElements([13578926])

x=

1

三、计算两个N阶矩阵的乘积代码:

function X=MatrixMultiplication(A,B)

%%计算两个N阶矩阵的乘积

%%输入:两个N阶矩阵A,B

%输出:矩阵A与B的乘积X

%例外处理

[a_row,a_list]=size(A);

[b_row,b_list]=size(A);

if(a_row~=a_list||(b_row~=b_list))

error('A和B必须同时为方阵!!');

end

if(a_row~=b_list)

error('方阵A与B的维数必须相等!!');

end

%矩阵相乘运算

n=a_row;

X=zeros(n,n);%初始化X

for i=1:n

for j=1:n

for k=1:n

X(i,j)=X(i,j)+A(i,k)*B(k,j);

end

end

end

end

测试:

A=[12

34];

B=[56

78];

X=MatrixMultiplication(A,B)

X=

1922

4350

四、递归算法(阶乘、Fibonacci数列)代码:

function x=factorial(n)

%%求正整数n的阶乘

%%输入:正整数n

%输出:n的阶乘x=n*(n-1)*(n-2)*...*3*2*1

%例外处理

if((n~=fix(n))||(n<0))

error('n必须为非负整数!!'); end

%计算阶乘

if n==0

x=1;

else

x=factorial(n-1)*n;

end

end

function x=fibonacci(n)

%%求斐波那契数列

%%输入:正整数n

%输出:斐波那契数列中第n个数%例外处理

if((n~=fix(n))||(n<1))

error('n必须为正整数!!'); end

%计算

if n==1||n==2

x=1;

else

x=fibonacci(n-1)+fibonacci(n-2); end

end

测试:

x=factorial(5)

x=

120

x=fibonacci(1)

x=

1

>>x=fibonacci(2)

x=

1

>>x=fibonacci(3)

x=

2

>>x=fibonacci(4)

x=

3

>>x=fibonacci(5)

x=

5

>>x=fibonacci(10)

x=

55

五、KMP模式匹配算法

代码:

function KMP(T,P)

%%KMP:此算法是一种改进的字符串匹配算法%输入:

%T--原字符串

%P--模式

%返回所有匹配字符串第一个字符的下标

n=length(T);

m=length(P);

pi=Compute_Prefix(P);

q=0;

for i=1:n

while((q>0)&&(P(q+1)~=T(i)))

q=pi(q);

end

if P(q+1)==T(i)

q=q+1;

end

if q==m

temp=i-m;

fprintf('Pattern occurs with shift%u.\n',temp);

q=pi(q);

end

end

end

function pi=Compute_Prefix(P)

%%KMP函数的子函数

m=length(P);

pi(1)=0;

k=0;

for q=2:m

while((k>0)&&(P(k+1)~=P(q)))

k=pi(k);

end

if P(k+1)==P(q)

k=k+1;

end

pi(q)=k;

end

end

测试:

>>t='this is a kmp string matching test string';

>>p='string';

Pattern occurs with shift14.

Pattern occurs with shift35.

>>

六、Huffman编码

代码:

function h=Huffman(p)

%%最优二叉树的霍夫曼算法

%输入:概率数组p

%输出:对应的Huffman编码

n=length(p);

q=p;

a=zeros(n-1,n);

%生成一个n-1行n列的数组

for i=1:n-1

[q,l]=sort(q);

%对概率数组q进行从小至大的排序,并且用l数组返回一个数组,该数组表示概率数组q 排序前的顺序编号

a(i,:)=[l(1:n-i+1),zeros(1,i-1)];

%由数组l构建一个矩阵,该矩阵表明概率合并时的顺序,用于后面的编码

q=[q(1)+q(2),q(3:n),1];

%将排序后的概率数组q的前两项,即概率最小的两个数加和,得到新的一组概率序列end

%w完成最优二元树的建立,下面进行编码

for i=1:n-1

c(i,1:n*n)=blanks(n*n);

%生成一个n-1行n列,并且每个元素的的长度为n的空白数组,c矩阵用于进行huffman 编码,并且在编码中与a矩阵有一定的对应关系

end

c(n-1,n)='0';c(n-1,2*n)='1';

%由于a矩阵的第n-1行的前两个元素为进行huffman编码加和运算时所得的最后两个概率,因此其值为0或1,在编码时设第n-1行的第一个空白字符为0,第二个空白字符1。for i=2:n-1

c(n-i,1:n-1)=c(n-i+1,n*(find(a(n-i+1,:)==1))-(n-2):n*(find(a(n-i+1,:)==1)));%矩阵c的第n-i行的第一个元素的n-1个字符赋值为对应于a矩阵中第n-i+1行中值为1的位置在c矩阵中的编码值

c(n-i,n)='0';

%根据之前的规则,在分支的第一个元素最后补0

c(n-i,n+1:2*n-1)=c(n-i,1:n-1);

%矩阵c的第n-i行的第二个元素的n-1个字符与第n-i行的第一个元素的前n-1个符号相同,因为其根节点相同

c(n-i,2*n)='1';

%根据之前的规则,在分支的第二个元素最后补1

for j=1:i-1

c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(a(n-i+1,:)==j+1)-1)+1:n*find(a(n-i+1,:)==j+1));

%矩阵c中第n-i行第j+1列的值等于对应于a矩阵中第n-i+1行中值为j+1的前面一个元素的位置在c矩阵中的编码值

end

end

%完成huffman码字的分配

for i=1:n

h(i,1:n)=c(1,n*(find(a(1,:)==i)-1)+1:find(a(1,:)==i)*n);%用h表示最后的huffman编码,矩阵h的第i行的元素对应于矩阵c的第一行的第i个元素

end

fprintf('\n huffman code:\n');

end

测试:

>>p=[0.350.10.20.10.20.05];

>>h=Huffman(p)

huffman code:

h=

11

1011

00

100

01

1010

七、图的遍历(深度优先搜索算法DFS、广度优先搜索算

法BFS)

代码:

function DFS(b)

%%深度优先搜索是从某一节点开始,沿着其搜索到的第一个节点不断深入下去,

%当无法再深入的时候,回溯节点,然后再在回溯中的某一节点开始

%沿另一个方向深度搜索,直到不重复的遍历所有节点。

%输入:

%c--邻接压缩表,是一个N行2列矩阵,每行存储两个相邻两个节点编号,也就是一条边

%输出:

%初始表对应的图与DFS遍历后对应的图,红色编号为访问顺序。无返回值

m=max(b(:));%压缩表中最大值就是邻接矩阵的宽与高

A=compresstable2matrix(b);%从邻接压缩表构造图的矩阵表示

netplot(A,1)%形象表示

top=1;%堆栈顶

stack(top)=1;%将第一个节点入栈

flag=1;%标记某个节点是否访问过了

re=[];%最终结果

while top~=0%判断堆栈是否为空

pre_len=length(stack);%搜寻下一个节点前的堆栈长度

i=stack(top);%取堆栈顶节点

for j=1:m

if A(i,j)==1&&isempty(find(flag==j,1))%如果节点相连并且没有访问过

top=top+1;%扩展堆栈

stack(top)=j;%新节点入栈

flag=[flag j];%对新节点进行标记

re=[re;i j];%将边存入结果

break;

end

end

if length(stack)==pre_len%如果堆栈长度没有增加,则节点开始出栈

stack(top)=[];

top=top-1;

end

end

A=compresstable2matrix(re);

figure;

netplot(A,1)

end

function BFS(b)

%广度优先搜索是从某一节点开始,搜索与其线连接的所有节点,

%按照广度方向像外扩展,直到不重复遍历所有节点。

%输入:

%c--邻接压缩表,是一个N行2列矩阵,每行存储两个相邻两个节点编号,也就是一条边

%输出:

%初始表对应的图与DFS遍历后对应的图,红色编号为访问顺序。无返回值

m=max(b(:));%压缩表中最大值就是邻接矩阵的宽与高

A=compresstable2matrix(b);%从邻接压缩表构造图的矩阵表示

netplot(A,1)%形象表示

head=1;%队列头

tail=1;%队列尾,开始队列为空,tail==head

queue(head)=1;%向头中加入图第一个节点

head=head+1;%队列扩展

flag=1;%标记某个节点是否访问过了

re=[];%最终结果

while tail~=head%判断队列是否为空

i=queue(tail);%取队尾节点

for j=1:m

if A(i,j)==1&&isempty(find(flag==j,1))%如果节点相连并且没有访问过

queue(head)=j;%新节点入列

head=head+1;%扩展队列

flag=[flag j];%对新节点进行标记

re=[re;i j];%将边存入结果

end

end

tail=tail+1;

end

A=compresstable2matrix(re);

figure;

netplot(A,1)

end

function A=compresstable2matrix(b)

%%DFS和BFS的子函数

[n~]=size(b);

m=max(b(:));

A=zeros(m,m);

for i=1:n

A(b(i,1),b(i,2))=1;

A(b(i,2),b(i,1))=1;

end

end

function netplot(A,flag)

%%DFS和BFS的子函数

%调用方法输入netplot(A,flag),无返回值

%A为邻接矩阵或关联矩阵

%flag=1时处理邻接矩阵

%flag=2时处理关联矩阵

%函数只能处理无向图

if flag==1%邻接矩阵表示无向图

ND_netplot(A);

return;

end

if flag==2%关联矩阵表示无向图

[m n]=size(A);%关联矩阵变邻接矩阵

W=zeros(m,m);

for i=1:n

a=find(A(:,i)~=0);

W(a(1),a(2))=1;

W(a(2),a(1))=1;

end

ND_netplot(W);

return;

end

function ND_netplot(A)

[n n]=size(A);

w=floor(sqrt(n));

h=floor(n/w);

x=[];

y=[];

for i=1:h%使产生的随机点有其范围,使显示分布的更广

for j=1:w

x=[x10*rand(1)+(j-1)*10];

y=[y10*rand(1)+(i-1)*10];

end

end

ed=n-h*w;

for i=1:ed

x=[x10*rand(1)+(i-1)*10];

y=[y10*rand(1)+h*10];

end

plot(x,y,'r*');

title('网络拓扑图');

for i=1:n

for j=i:n

if A(i,j)~=0

c=num2str(A(i,j));%将A中的权值转化为字符型

text((x(i)+x(j))/2,(y(i)+y(j))/2,c,'Fontsize',10);%显示边的权值

line([x(i)x(j)],[y(i)y(j)]);%连线

end

text(x(i),y(i),num2str(i),'Fontsize',14,'color','r');%显示点的序号

hold on;

end

end

end

end

测试:

>>b=[12;13;14;24;25;36;46;47];

>>DFS(b)

原图:

DFS遍历:

>>b=[12;13;14;24;25;36;46;47]; >>BFS(b)

>>

原图:

BFS遍历:

八、Dijkstra算法、Kruskal算法和Prim算法代码:

function[d,DD]=Dijkstra(D,s)

%%Dijkstra:求从起始点s到其它各点的最短路

%输入:

%D--赋权邻接矩阵

%s--起始点

%输出:

%d--s到其它各点最短路径的长度

%DD--最短路径生成树

[m,n]=size(D);

d=inf.*ones(1,m);

d(1,s)=0;

dd=zeros(1,m);

dd(1,s)=1;

y=s;

DD=zeros(m,m);

DD(y,y)=1;

counter=1;

while length(find(dd==1))

for i=1:m

if dd(i)==0

d(i)=min(d(i),d(y)+D(y,i));

end

end

ddd=inf;

for i=1:m

if dd(i)==0&&d(i)

ddd=d(i);

end

end

yy=find(d==ddd);

counter=counter+1;

DD(y,yy(1,1))=counter;

DD(yy(1,1),y)=counter;

y=yy(1,1);

dd(1,y)=1;

end

function[s,B]=Kruskal(graph_adjacent)

%%Kruskal算法:求连通权图的最小生成树

%输入:

%graph_adjacent--%以邻接矩阵储存的图

%输出:

%s--最小生成树的代价

%B--原图最小生成树对应的邻接矩阵

len=length(graph_adjacent);%计算图中的顶点数

temp=graph_adjacent;%将原图内容拷贝到temp中,以防对原图做改动

superedge=zeros(len-1,2);%用于保存生成最小生成树的边

i=1;%指向superedge的下标

for j=1:len

tag(j)=j;%关联标志初始化,将每个顶点的关联标志设为其本身

end;

%以下的循环完成kruskal算法

[Y,I]=sort(temp);

while(superedge(len-1,1)==0)

cost_min=min(Y(1,:));%找出权值最小的边

index=find(Y(1,:)==cost_min);%找出权值最小的边对应的顶点

index=index(1);%一条边对应两个节点,且不同的边的权值可能一样,这里为了方便处理人为规定了顺序,取标号最小的顶点进行处理

anotherpoint=I(1,index);%找到该边对应的另一个顶点

%将该边对应的权值修改为最大,防止该边在下次循环中再次被选为最优边

temp(index,anotherpoint)=100;

temp(anotherpoint,index)=100;

if(tag(anotherpoint)~=tag(index))%当两个点不属于一个连通集时,这两个点之间的边为最小生成树的边

superedge(i,:)=[index,anotherpoint];%将其加入最小生成树的边集中

i=i+1;%下标加1

%下面的语句的作用是将两个连通分支变成一个连通分支,即tag值一样

sub1=find(tag==tag(anotherpoint));%找到tag数组中和tag(anotherpoint)值相同的元素的下标

sub2=find(tag==tag(index));%找到tag数组中和tag(index)值相同的元素的下标

if(length(sub1)>length(sub2))%比较两个连通分支哪个更大,将小连通支的tag值进行更新,使其等于大连通分支的tag值

tag(sub2)=tag(anotherpoint).*ones(1,length(sub2));

else

tag(sub1)=tag(index).*ones(1,length(sub1));

end

end

[ytmp,itmp]=sort(temp(:,[index,anotherpoint]));

Y(:,[index,anotherpoint])=ytmp;

I(:,[index,anotherpoint])=itmp;

end

%*************************结果显示模块************************************

s=0;

for ii=1:len-1

k=sprintf('最小生成树第%d条边:(%d,%d),权值为%d',ii,superedge(ii,1),superedge(ii,2),graph_adjacent(superedge(ii,1),superedge(ii,2)));%格式化字符串

disp(k);%显示

disp('');%空一行

s=s+graph_adjacent(superedge(ii,1),superedge(ii,2));%求最小生成树的代价

end

%显示最小生成树的代价

disp('最小生成树的总代价为:')

B=superedge;

end

function[s,B]=Prim(graph_adjacent)

%%Prim算法求连通的赋权图上权最小的支撑树(即最小生成树)

%输入:

%graph_adjacent--%以邻接矩阵储存的图

%输出:

%s--最小生成树的代价

%B--原图最小生成树对应的邻接矩阵

len=length(graph_adjacent);%求图中有多少个顶点

k=sprintf('please input the point where you want to start,do remember it must be between1 and%d',len);

start_point=input(k);%输入最小生成树产生起点

while((start_point<=0)|(start_point>len))%如果输入的结点位置不合法即:小于等于零,或大于结点数,则重新输入

disp('bad positon,please input again!');

start_point=input(k);

end;

%************************************下面完成prim算法****************************

%相关变量初始设置

tree=zeros(len-1,2);%用于保存选入最小生成树的边

lowcost=zeros(1,len);%用来保存集合V-U与集合U中顶点的最短边权值,lowcost[v]=0表示顶点v已经

%加入最小生成树中

adjvex=zeros(1,len);%用来保存依附于该边在集合U中的节点,U集合为生成最小生成树的辅

助集合,

%首先U={start_point},之后依次确定为把最小生成树的一边的另一节点加入U

%依次下去,直到图的全部顶点都在U中能找到

lowcost=graph_adjacent(start_point,:);%lowcost(i)的值为节点i与start_point的权值;adjvex=start_point.*ones(1,len);%adjvex中所有元素的值都为初始节点

%以下循n-1次,用于找出最小生成树的len-1条边

for i=1:len-1

k=lowcost>0;%k为一逻辑数组,它和lowcost同维,对于每一个位置i1lowcost(i)>0则k(i)=1 %否则k(i)=0;稍候将用这个数组进行辅助寻址

cost_min=min(lowcost(k));%找出lowcost中除0外的最小值

index=find(lowcost==cost_min);%找出此最小值在lowcost中的下标,即找到相应的节点index=index(1);%因为最小值的下标可能不止一个,这里取第一个下标进行处理

lowcost(index)=0;%表明该节点已经加入了最小生成树中

tree(i,:)=[adjvex(index),index];

%对lowcost和adjvex进行更新

for j=1:len

if lowcost(j)>graph_adjacent(j,index);

lowcost(j)=graph_adjacent(j,index);

adjvex(j)=index;

end

end

end;

%*************************结果显示模块************************************

s=0;

for ii=1:len-1

k=sprintf('最小生成树第%d条边:(%d,%d),权值为%d',ii,tree(ii,1),tree(ii,2),graph_adjacent(tree(ii,1),tree(ii,2)));%格式化字符串disp(k);%显示

disp('');%空一行

s=s+graph_adjacent(tree(ii,1),tree(ii,2));%求最小生成树的代价

end

%显示最小生成树的代价

disp('最小生成树的总代价为:')

B=tree;

end

《ACM算法与数据结构设计》大作业

《ACM算法与数据结构设计》课程大作业报告 题目:五位以内的对称素数 学生姓名 班级学号 学生学院计算机软件学院 学生专业计算机科学与技术 联系电话 电子邮 指导教师 指导单位计算机学院软件工程系 日期2011.5.24

注意事项 (1)课程大作业从《ACM算法与数据结构设计》课程实验二(2011年4月19日)或实验三(2011年5月10日)中任选一个课题完成。(2)课程大作业内容包括课题名称、课题内容和要求、课题分析、概要设计、详细设计、测试数据及其结果分析、调试过程中的问题、参考资料列表、课程小结等。 (3)课程报告可以打印,也可以手写,但前面两页内容、大作业撰写纲要、课程小结不可遗漏和更换。 (4)课程小结给出ACM程序设计过程的收获、遇到的问题,遇到问题解决问题过程的思考、程序调试能力的思考等,需要手写签字。(5)课程大作业提交时间为2011年5月24日(第14周星期二)晚19:00~20:00,地点:计算中心A机房。

一、课题名称: 五位以内的对称素数 二、课题内容和要求: 题目:判断一个数是否为对称且不大于五位数的素数。 要求:判断输入的一组数据(正整数)是否是五位以内的对称素数,逐个判断并输出“yes”或“no” 三、课题分析: 定义两个函数分别判断数据是否为素数(bool isprime(int n)),是否是对称数(bool issym(int n));在main()函数中利用if()语句来判断该数据是否是五位以内的数。只有同时满足三个条件,才能判断一个数据是五位以内的对称素数,输出“yes”;否则输出“no”。 输入输出方案: 输入: 输入数据含有不多于50个的正整数(0

MATLAB实验报告50059

实验一MATLAB操作基础 实验目的和要求: 1、熟悉MATLAB的操作环境及基本操作方法。 2、掌握MATLAB的搜索路径及设置方法。 3、熟悉MATLAB帮助信息的查阅方法 实验内容: 1、建立自己的工作目录,再设置自己的工作目录设置到MA TLAB搜索路径下,再试 验用help命令能否查询到自己的工作目录。 2、在MA TLAB的操作环境下验证课本;例1-1至例1-4,总结MATLAB的特点。 例1-1

例1-2 例1-3 例1-4

3、利用帮助功能查询inv、plot、max、round等函数的功能。 4、完成下列操作: (1)在matlab命令窗口输入以下命令: x=0:pi/10:2*pi; y=sin(x); (2)在工作空间窗口选择变量y,再在工作空间窗口选择回绘图菜单命令或在工具栏中单击绘图命令按钮,绘制变量y的图形,并分析图形的含义。

5、访问mathworks公司的主页,查询有关MATLAB的产品信息。 主要教学环节的组织: 教师讲授实验目的、开发环境界面、演示实验过程,然后同学上机练习。 思考题: 1、如何启动与退出MA TLAB集成环境? 启动: (1)在windows桌面,单击任务栏上的开始按钮,选择‘所有程序’菜单项,然后选择MA TLAB程序组中的MA TLABR2008b程序选项,即可启动 MATLAB系统。 (2)在MA TLAB的安装路径中找到MA TLAB系统启动程序matlab.exe,然后运行它。 (3)在桌面上建立快捷方式后。双击快捷方式图标,启动MA TLAB。 退出: (1)在MA TLAB主窗口file菜单中选择exitMATLAB命令。 (2)在MA TLAB命令窗口中输入exit或quit命令。 (3)单击MATLAB主窗口的关闭按钮。 2、简述MATLAB的主要功能。 MATLAB是一种应用于科学计算领域的数学软件,它主要包括数值计算和符 号计算功能、绘图功能、编程语言功能以及应用工具箱的扩展功能。 3、如果一个MATLAB命令包含的字符很多,需要分成多行输入,该如何处理?

MATLAB基本操作实验报告

南昌航空大学 数学与信息科学学院 实验报告 课程名称:数学实验 实验名称: MATLAB基本操作 实验类型:验证性■综合性□ 设计性□ 实验室名称:数学实验室 班级学号: 10 学生姓名:钟 X 任课教师(教师签名): 成绩: 实验日期: 2011-10- 10

一、实验目的 1、熟悉MATLAB基本命令与操作 2、熟悉MATLAB作图的基本原理与步骤 3、学会用matlab软件做图 二、实验用仪器设备、器材或软件环境 计算机MATLAB软件 三、实验原理、方案设计、程序框图、预编程序等 问题1:在区间【0,2π】画sinx 实验程序: >> x=linspace(0,2*pi,30); >> y=sin(x); >> plot(x,y) 问题2:在【0,2π】用红线画sinx,用绿圈画cosx,实验程序:

>> x=linspace(0,2*pi,30); >> y=sin(x); >> z=cos(x); >> plot(x,y,'r',x,z,'co') >> 问题3:在【0,π】上画y=sinx的图形。 实验程序: >> ezplot('sin(x)',[0,pi]) >> 问题4:在【0,π】上画x=cos3t,y=sin3t星形图形。

实验程序: >> ezplot('cos(t).^3','sin(t).^3',[0,pi]) >> 问题5:[-2,0.5],[0,2]上画隐函数 实验程序: >> ezplot('exp(x)+sin(x*y)',[-2,0.5,0,2]) >> 问题6:在[-2,2]范围内绘制tanh的图形。实验程序: >> fplot('tanh',[-2,2])

实验一 MATLAB基本操作及运算(含实验报告).

实验一 MATLAB 基本操作及运算 一、 实验目的 1、 理解Matlab 数据对象的特点; 2、 掌握基本Matlab 运算规则; 3、 掌握Matlab 帮助的使用方法; 二、 实验的设备及条件 计算机一台(带有MATLAB7.0以上的软件环境)。 三、 实验内容 要求建立一个名为experiment01.m 的,把与实验内容1-7相关的实验命令都放入该文件中,题与题之间用相应注释分割。注意对实验中出现的相关函数或变量,请使用help 或doc 查询相关帮助文档,学习函数的用法。 1、 建立以下标量: 1) a=10 2) b=2.5×1023 3) c=2+3i ,(i 为虚数单位) 4) d=3/2πj e ,(j 为虚数单位,这里要用到exp ,pi ) 2、 建立以下向量: 1) aVec=[3.14 15 9 26] 2) bVec=????? ???????18228871.2 3) cVec=[5 4.8 … -4.8 -5 ] (向量中的数值从5到-5,步长为-0.2) 4) dVec=[100 100.01 … 100.99 101] (产生1到10之间的等对数间隔向量,参考logspace ,注意向量的长度) 3、 建立以下矩阵: 1)???? ??????=2222 aMat aMat 一个9×9的矩阵,其元素全为2;(参考ones 或zeros )

2)??????? ?????????=1000005000001 bMat bMat 是一个9×9的矩阵,除主对角上的元素为[1 2 3 4 5 4 3 2 1]外,其余元素均为0。(参考diag )。 3)100 20109212291111 =cMat cMat 为一个10×10的矩阵,可有1:100的向量来产生(参考reshape ) 4)???? ??????=NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN dMat dMat 为3×4的NaN 矩阵,(参考nan ) 5)?? ????---=8710225113eMat 6)产生一个5×3随机整数矩阵fMat ,其值的范围在-3到3之间。(参考rand 和floor 或ceil ) 4、 使用题1中的变量计算下列等式的x,y,z 的值: 1) ) 6/)15((11--+=a e x 2) g g h h b a y /121,)(=+=提示π,参考sqrt 。 3) c c a d c d c R z ))3/sin()]))([(log(π-+= ,其中R 表示取括号内复数的实数部分,c 表示c 的共轭复数,log 是自然对数。(参考real ,conj ,log ) 5、 使用题2中的向量求解一下等式: 1))25.2/(22 25.221 cVec e xVec -=π, 其中cVec 指的是题2 中定义的向量cVec ,一下雷同。 2)22)(bVec aVec yVec T +=,T aVec 表示aVec 的转置 3) )/1(log 10dVec zVec =,10log 表示已10为底的对数,参考log10 6、 使用题2和题3中所产生的向量和矩阵计算以下等式,注意本题的操作

《程序设计与算法综合实践》期末大作业题目及评分标准

2017级《程序设计与算法综合实践》 期末大作业题目及评分标准 有如下情况之一者,为不及格。 (1)未能完成所选题目评分标准的最低要求。 (2)抄袭他人成果。 (3)大作业检查时不带电脑,或电脑没有C语言开发环境。 (4)出勤次数、课堂表现等不符合学校相关教学文件规定等其他情况。 备选题目目录 1.图书购买系统...............................................................................................................- 2 - 2.物流信息管理系统 ....................................................................................................- 3 - 3.PM2.5实时信息管理系统 ............................................................ - 5 - 4.电影评论系统 ............................................................................... - 6 - 5.游戏角色属性分析........................................................................ - 8 - 6.KTV点歌系统 ................................................................................ - 9 - 7.英语词斩系统 ............................................................................. - 11 - 8.校运动会成绩管理系统.............................................................. - 14 - 9.通讯录管理系统 ......................................................................... - 15 - 10.机票购买系统 ............................................................................. - 16 - 11.车辆销售管理系统...................................................................... - 17 - 12.饮品自动贩卖机系统.................................................................. - 18 -

matlab实验报告

实验一小球做自由落体运动内容:一小球竖直方向做自由落体,并无损做往返运动。程序: theta=0:0.01:2*pi x=cos(theta) y=sin(theta) l=1 v=1 while l<10 for t=1:10 y=y+(-1)^l*v*t plot(x,y,[-1,1],[-56,2],'.') axis equal pause(0.1) end l=l+1 end 结果:

-50 -40 -30 -20 -10 收获:通过运用小球自由落体规律,及(-1)^n 来实现无损往 返运动! 实验二 旋转五角星 内容:一个五角星在圆内匀速旋转 程序:x=[2 2 2 2 2 2] y=[0 4/5*pi 8/5*pi 2/5*pi 6/5*pi 0] y1=2*sin(y) x1=2*cos(y) theta=0:4/5*pi:4*pi

x2=2*cos(theta) y2=2*sin(theta) plot(x,y,x1,y1,x2,y2) axis equal theta1=theta+pi/10 x2=2*cos(theta1) y2=2*sin(theta1) plot(x2,y2) axis equal theta=0:4/5*pi:4*pi for rot=pi/10:pi/10:2*pi x=2*cos(theta+rot) y=2*sin(theta+rot) plot(x,y) pause(0.1) end 结果:

-2 -1.5-1-0.500.51 1.52 -2-1.5-1-0.500.511.5 2 收获:通过theta1=theta+pi/10,我们可以实现五角星在圆内匀速 旋转! 实验三 转动的自行车 内容:一辆自行车在圆内匀速转动 程序:x=-4:0.08:4; y=sqrt(16-x.^2); theta1=-pi/2:0.01*pi:3*pi/2; x3=0.5*cos(theta1); y3=0.5*sin(theta1); theta=-pi/2+0.02*pi for k=1:100

matlab操作实验报告

实验一matlab基本操作 一、实验目的 熟悉matlab的安装与启动;熟悉matlab用户界面;熟悉matlab功能、建模元素;熟悉matlab优化建模过程。 二、实验设备与工具 1.计算机 2.matlab软件 三、实验步骤 1. 了解matlab的硬件和软件必备环境; 2. 启动matlab; 3. 学习优化建模过程。 四、实验报告要求 1. 写出matlab系统界面的各个构成;以及系统布局区的组成;以及每一部 分的功能; 2. 优化建模过程应用举例 五、实验内容 (一)、Matlab操作界面 1.命令窗口(command window) 2.命令历史窗口(command history) 3.工作空间管理窗口(workspace) 4.当前路径窗口(current directory) (二)、优化建模过程应用举例 1、简单矩阵 123 456 789 A ?? ?? =?? ?? ?? 的输入步骤。 (1)在键盘上输入下列内容 A = [1,1,3; 4,5,6; 7,8,9] (2)按【Enter】键,指令被执行。 (3)在指令执行后,MATLAB指令窗中将显示以下结果: A = 1 2 3 4 5 6 7 8 9

2、矩阵的分行输入。 A=[1,2,3 4,5,6 7,8,9] A = 1 2 3 4 5 6 7 8 9 3、指令的续行输入 S=1-1/2+1/3-1/4+ ... 1/5-1/6+1/7-1/8 S = 0.6345 4、画出衰减振荡曲线t e y t 3sin 3-=及其它的包络线3 0t e y -=。t 的取值范围是]4,0[π。 t=0:pi/50:4*pi; y0=exp(-t/3); y=exp(-t/3).*sin(3*t); plot(t,y,'-r',t,y0,':b',t,-y0,':b') grid 5、画出2222) sin(y x y x z ++=所表示的三维曲面。y x ,的取值范围是]8,8[-。 clear;x=-8:0.5:8; y=x';

软件系统分析与设计大作业

《软件系统分析与设计》 期末大作业 选题名称:游戏平台管理系统设计人:徐文豪刘青海 赖超宇甘智宏 班级:软工143班 南昌大学软件学院 2016.6.1

目录 一、整体描述 (2) 二、需求分析 (3) 三、系统功能概况 (4) 四、类的属性与方法 (5) 五、系统界面界限 (11) 六、设计模型 (13) 七、设计原则 (17) 八、设计模式······················

一、整体描述 随着移动通讯的发展,手机应用也越来越多,其中,游戏应用占据了很大的比重,游戏平台管理系统是整合了大量游戏应用,以及玩家线上交流的平台。 主要受众群:拥有移动端或电脑端的人群。 应用前景:移动互联的发展为游戏平台的发展提供了很大的生存空间,应用前景十分广阔 盈利方式:向平台中游戏的开发商收取一定的费用,游戏玩家向游戏中注入资金时,收取一定比例的游戏收入。 面临的困难:游戏平台前期的推广,提高游戏平台本身对开发商和游戏玩家的吸引力,游戏平台能否适应大部分游戏玩家的要求。 玩家首先要注册账号,然后就可以在上面下载游戏应用,上传自己的游戏资源。同时,根据玩家的活跃程度获取相应积分,用积分可以兑换游戏礼包,也会根据玩家等级在游戏装备上给与相应的优惠和等级奖励。玩家在每一款游戏的评论区都可以交流游戏经验,提出意见和建议,以便游戏及时更新,弥补相应不足。玩家也可以建立游戏工会,不同游戏的玩家都可以加入,分享自己的游戏心得或者转赠游戏装备或积分。

二、需求分析 时间when:游戏厂商:随时;注册用户:随时;管理人员:正常工作时间。 地点Where:游戏厂商,管理人员:工作地点;注册用户:随地 人员who:游戏厂商,管理人员,注册用户, What:游戏厂商:推广游戏,管理人员:扩大服务,盈利;注册人员:玩游戏。 Why:游戏厂商:推广力度不大,效果不好,管理人员:方便管理,注册用户:良好的游戏环境。 性能Performance:系统提供服务的效率,响应时间快,由于是手机端的APP吞吐量不需要太大。 成本Cost:实现系统需要付出的代价,耗费****元 时间Time:2016年6月3日 可靠性Reliability: 需要系统长时间正确运行的能力 安全性Security: 由于该平台会涉及资金的流动,所以需要对信息安全的保护能力。 合规性Compliance: 需要符合各种行业的标准,法律法规,规范。技术性Technology:要求基于安卓平台开发。 兼容性Compatibility:需要与一些支付平台进行兼容能力。还有对游戏的兼容性。

MATLAB实验报告(1-4)

信号与系统MATLAB第一次实验报告 一、实验目的 1.熟悉MATLAB软件并会简单的使用运算和简单二维图的绘制。 2.学会运用MATLAB表示常用连续时间信号的方法 3.观察并熟悉一些信号的波形和特性。 4.学会运用MATLAB进行连续信号时移、反折和尺度变换。 5.学会运用MATLAB进行连续时间微分、积分运算。 6.学会运用MATLAB进行连续信号相加、相乘运算。 7.学会运用MATLAB进行连续信号的奇偶分解。 二、实验任务 将实验书中的例题和解析看懂,并在MATLAB软件中练习例题,最终将作业完成。 三、实验内容 1.MATLAB软件基本运算入门。 1). MATLAB软件的数值计算: 算数运算 向量运算:1.向量元素要用”[ ]”括起来,元素之间可用空格、逗号分隔生成行向量,用分号分隔生成列向量。2.x=x0:step:xn.其中x0位初始值,step表示步长或者增量,xn 为结束值。 矩阵运算:1.矩阵”[ ]”括起来;矩阵每一行的各个元素必须用”,”或者空格分开; 矩阵的不同行之间必须用分号”;”或者ENTER分开。2.矩阵的加法或者减法运算是将矩阵的对应元素分别进行加法或者减法的运算。3.常用的点运算包括”.*”、”./”、”.\”、”.^”等等。 举例:计算一个函数并绘制出在对应区间上对应的值。

2).MATLAB软件的符号运算:定义符号变量的语句格式为”syms 变量名” 2.MATLAB软件简单二维图形绘制 1).函数y=f(x)关于变量x的曲线绘制用语:>>plot(x,y) 2).输出多个图像表顺序:例如m和n表示在一个窗口中显示m行n列个图像,p表 示第p个区域,表达为subplot(mnp)或者subplot(m,n,p) 3).表示输出表格横轴纵轴表达范围:axis([xmax,xmin,ymax,ymin]) 4).标上横轴纵轴的字母:xlabel(‘x’),ylabel(‘y’) 5).命名图像就在subplot写在同一行或者在下一个subplot前:title(‘……’) 6).输出:grid on 举例1: 举例2:

参考答案Matlab实验报告

实验一 Matlab基础知识 一、实验目的: 1.熟悉启动和退出Matlab的方法。 2.熟悉Matlab命令窗口的组成。 3.掌握建立矩阵的方法。 4.掌握Matlab各种表达式的书写规则以及常用函数的使 用。 二、实验内容: 1.求[100,999]之间能被21整除的数的个数。(rem) 2.建立一个字符串向量,删除其中的大写字母。(find) 3.输入矩阵,并找出其中大于或等于5的元素。(find) 4.不采用循环的形式求出和式 63 1 2i i= ∑ 的数值解。(sum) 三、实验步骤: ●求[100,199]之间能被21整除的数的个数。(rem) 1.开始→程序→Matlab 2.输入命令: ?m=100:999; ?p=rem(m,21); ?q=sum(p==0) ans=43 ●建立一个字符串向量,删除其中的大写字母。(find) 1.输入命令:

?k=input('’,’s’); Eie48458DHUEI4778 ?f=find(k>=’A’&k<=’Z’); f=9 10 11 12 13 ?k(f)=[ ] K=eie484584778 ●输入矩阵,并找出其中大于或等于5的元素。(find) 1.输入命令: ?h=[4 8 10;3 6 9; 5 7 3]; ?[i,j]=find(h>=5) i=3 j=1 1 2 2 2 3 2 1 3 2 3 ●不采用循环的形式求出和式的数值解。(sum) 1.输入命令: ?w=1:63; ?q=sum(2.^w) q=1.8447e+019

实验二 Matlab 基本程序 一、 实验目的: 1. 熟悉Matlab 的环境与工作空间。 2. 熟悉M 文件与M 函数的编写与应用。 3. 熟悉Matlab 的控制语句。 4. 掌握if,switch,for 等语句的使用。 二、 实验内容: 1. 根据y=1+1/3+1/5+……+1/(2n-1),编程求:y<5时最大n 值以及对应的y 值。 2. 编程完成,对输入的函数的百分制成绩进行等绩转换,90~100为优,80~89为良,70~79为中,60~69为及格。 3. 编写M 函数文件表示函数 ,并分别求x=12和56时的函数值。 4. 编程求分段函数 2226;03 56;0532 1;x x x x y x x x x x x x +-<≠=-+≤<≠≠-+且且及其它,并求输入x=[-5.0,-3.0,1.0,2.0,2.5,3.0,3.5]时的输出y 。 三、 实验步骤: 根据y=1+1/3+1/5+……+1/(2n-1),编程求:y<5时最大n 值以及对应的y 值。 1. 打开Matlab ,新建M 文件 2. 输入命令: 51022-+x

MATLAB基本操作实验报告

MATLAB基本操作 实验报告 课程名称: 院系: 专业班级: 学号: 学生姓名: 指导教师: 开课时间:至学年第学期

一、学生撰写要求 按照实验课程培养方案的要求,每门实验课程中的每一个实验项目完成后,每位参加实验的学生均须在实验教师规定的时间内独立完成一份实验报告,不得抄袭,不得缺交。 学生撰写实验报告时应严格按照本实验报告规定的内容和要求填写。字迹工整,文字简练,数据齐全,图表规范,计算正确,分析充分、具体、定量。 二、教师评阅与装订要求 1.实验报告批改要深入细致,批改过程中要发现和纠正学生实验报告中的问题,给出评语和实验报告成绩,签名并注明批改日期。实验报告批改完成后,应采用适当的形式将学生实验报告中存在的问题及时反馈给学生。 2.实验报告成绩用百分制评定,并给出成绩评定的依据或评分标准(附于实验报告成绩登记表后)。对迟交实验报告的学生要酌情扣分,对缺交和抄袭实验报告的学生应及时批评教育,并对该次实验报告的分数以零分处理。对单独设课的实验课程,如学生抄袭或缺交实验报告达该课程全学期实验报告总次数三分之一以上,不得同意其参加本课程的考核。 3.各实验项目的实验报告成绩登记在实验报告成绩登记表中。本学期实验项目全部完成后,给定实验报告综合成绩。 4.实验报告综合成绩应按课程教学大纲规定比例(一般为10-15%)计入实验课总评成绩;实验总评成绩原则上应包括考勤、实验报告、考核(操作、理论)等多方面成绩; 5.实验教师每学期负责对拟存档的学生实验报告按课程、学生收齐并装订,按如下顺序装订成册:实验报告封面、实验报告成绩登记表、实验报告成绩评定依据、实验报告(按教学进度表规定的实验项目顺序排序)。装订时统一靠左侧按“两钉三等分”原则装订。

算法分析大作业动态规划方法解乘法表问题和汽车加油行驶问题#精选.

算法分析大作业 动态规划方法解 乘法表问题和汽车加油行驶问题目录 1.动态规划解乘法表问题 1.1问题描述------ 1.2算法设计思想------ 1.3设计方法------ 1.4源代码------ 1.5最终结果------ 2.动态规划解汽车加油行驶问题 2.1问题描述------ 2.2算法设计思想------ 2.3设计方法------ 2.4源代码------ 2.5最终结果------ 3.总结

1.动态规划解决乘法表问题 1.1问题描述 定义于字母表∑{a,b,c)上的乘法表如表所示: 依此乘法表,对任一定义于∑上的字符串,适当加括号表达式后得到一个表达式。 例如,对于字符串x=bbbba,它的一个加括号表达式为(b(bb))(ba)。依乘法表,该表达式的值为a。 试设计一个动态规划算法,对任一定义于∑上的字符串x=x1x2…xn,计算有多少种不同的加括号方式,使由x导出的加括号表达式的值为a。 1.2算法设计思想 设常量a,b,c 分别为 1, 2 ,3 。n 为字符串的长度。 设字符串的第 i 到第 j 位乘积为 a 的加括号法有result[i][j][a] 种, 字符串的第 i 到第 j 位乘积为 b 的加括号法有result[i][j][b] 种, 字符串的第 i 到第 j 位乘积为 c 的加括号法有 result[i][j][c] 种。 则原问题的解是:result[i][n][a] 。 设 k 为 i 到 j 中的某一个字符,则对于 k 从 i 到 j :result[i][j][a] += result[i][k][a] * result[k + 1][j][c] + result[i][k][b] * result[k + 1][j][c] + result[i][k][c] * result[k + 1][j][a]; result[i][j][b] += result[i][k][a] * result[k + 1][j][a] + result[i][k][a] * result[k + 1][j][b] + result[i][k][b] * result[k + 1][j][b]; result[i][j][c] += result[i][k][b] * result[k + 1][j][a] + result[i][k][c] * result[k + 1][j][b] + result[i][k][c] * result[k + 1][j][c];

实验5 Matlab绘图操作实验报告

Tutorial 5 实验报告 实验名称:Matlab 绘图操作 实验目的: 1、 掌握绘制二维图形的常用函数; 2、 掌握绘制三维图形的常用函数; 3、 掌握绘制图形的辅助操作。 实验内容: 1. 设sin .cos x y x x ?? =+ ??+?? 23051,在x=0~2π区间取101点,绘制函数的曲线。 2. 已知: y x =21,cos()y x =22,y y y =?312,完成下列操作: (1) 在同一坐标系下用不同的颜色和线性绘制三条曲线; (2) 以子图形式绘制三条曲线; (3) 分别用条形图、阶梯图、杆图和填充图绘制三条曲线。 3. 已知:ln(x y x x ≤=??+>??0102 ,在x -≤≤55区间绘制函数曲线。 4. 绘制极坐标曲线sin()a b n ρθ=+,并分析参数a 、b 、n 对曲线形状的影响。 5.在xy 平面内选择区域[][],,-?-8888, 绘制函数z =的三种三维曲面图。 6. 用plot 函数绘制下面分段函数的曲线。 ,(),,x x f x x x x ?+>? ==??+

8. 在同一坐标轴中绘制下列两条曲线。 (1).y x =-205 (2)sin()cos ,sin()sin x t t t y t t π=?≤≤? =?303 实验结果: 1. 2. (1)

(2)

(3)

对并行算法的介绍和展望——学期大作业

《计算机系统结构》大作业 对并行算法的介绍和展望 专业计算机科学与技术 班级 111 学号 111425020133 姓名完颜杨威 日期 2014年4月17日 河南科技大学国际教育学院

对并行算法的介绍和展望 我们知道,算法是求解问题的方法和步骤。而并行算法就是用多台处理机联合求解问题的方法和步骤,其执行过程是将给定的问题首先分解成若干个尽量相互独立的子问题,然后使用多台计算机同时求解它,从而最终求得原问题的解。并行算法的研究涉及到理论、设计、实现、应用等多个方面,要保持并行算法研究的持续性和完整性,需要建立一套完整的“理论-设计-实现-应用”的学科体系,也就是所谓的并行算法研究的生态环境。其中,并行算法理论是并行算法研究的理论基础,包含并行计算模型和并行计算复杂性等;并行算法的设计与分析是并行算法研究的核心内容;并行算法的实现是并行算法研究的应用基础,包含并行算法实现的硬件平台和软件支撑技术等;并行应用是并行算法研究的发展动力,除了包含传统的科学工程计算应用外,还有新兴的与社会相关的社会服务型计算应用等。 并行算法主要分为数值计算问题的并行算法和非数值计算问题的并行算法。而并行算法的研究主要分为并行计算理论、并行算法的设计与分析、和并行算法的实现三个层次。现在,并行算法之所以受到极大的重视,是为了提高计算速度、提高计算精度,以及满足实时计算需要等。然而,相对于串行计算,并行计算又可以划分成时间并行和空间并行。时间并行即流水线技术,空间并行使用多个处理器执行并发计算,当前研究的主要是空间的并行问题。并行算法是一门还没有发展成熟的学科,虽然人们已经总结出了相当多的经验,但是远远不及串行算法那样丰富。并行算法设计中最常用的的方法是PCAM方法,即划分,通信,组合,映射。首先划分,就是将一个问题平均划分成若干份,并让各个处理器去同时执行;通信阶段,就是要分析执行过程中所要交换的数据和任务的协调情况,而组合则是要求将较小的问题组合到一起以提高性能和减少任务开销,映射则是要将任务分配到每一个处理器上。任何一个并行算法必须在一个科学的计算模型中进行设计。我们知道,任何算法必须有计算模型。任何并行计算模型必须要有为数不多、有明确定义的、可以定量计算的或者可以实际测量的参数,这些参数可以构成相应函数。并行计算模型是算法设计者与体系结构研究者之间的一个桥梁,是并行算法设计和分析的基础。它屏蔽了并行机之间的差异,从并行机中抽取若干个能反映计算特性的可计算或可测量的参数,并按照模型所定义的计算行为构造成本函数,以此进行算法的复杂度分析。 经过多年的发展,我国在并行算法的研究上也取得了显著进展,并行计算的应用已遍布天气预报、石油勘探、航空航天、核能利用、生物工程等领域,理论研究与应用普及均取得了很大发展。随着高性价比可扩展集群并行系统的逐步成熟和应用,大规模电力系统潮流并行计算和分布式仿真成为可能。目前,并行算法在地震数据处理中应用已较为成熟,近年来向更实用的基于PC机群的并行技术发展.然而,在非地震方法中,并行算法应用较少见文献报道,研究尚处于初级研究阶段。在大地电磁的二维和三维正、反演问题上,并行计算技术逐渐得到越来越多关注和重视.随着资源和能源需求的增长,地球物理勘探向深度和广度快速发展,大幅增长的数据量使得高性能并行计算机和高效的并行算法在勘探地球物理学中的发展和应用将占据愈来愈重要的地位。计算机技术在生物医学领域已经广泛应用,实践证明,并行算法在生物医学工程的各个领域中具有广泛的应用价值,能有效提高作业效率。随着电子科学技术的发展,电磁问题变得越来越复杂,为了在有限的计算机资源条件下求解大规模复杂电磁问题,许电磁学家已

matlab实验报告

Matlab实验报告 实验二图像处理 一、实验目的 (1)通过应用MA TLAB语言编程实现对图像的处理,进一步熟悉MATLAB软件的编程及应用; (2)通过实验进一步掌握图像处理的基本技术和方法。 二、实验内容及代码 ㈠.应用MA TLAB语言编写显示一幅灰度图像、二值图像、索引图像及彩色图像的程序,并进行相互之间的转换 首先,在matlab页面中的current directory下打开存放图像的文件夹。 1.显示各种图像 ⑴显示彩色图像: ①代码:>> mousetif=imread('tif.TIF'); >> image(mousetif) 显示截图: ②代码:>> mousetif=imread('tif.TIF'); >> imshow(mousetif) 显示截图:

③代码:mousetif=imread('tif.TIF'); subimage(mousetif) 显示截图: 显示截图:

⑵显示二值图像 ①代码:>> I=imread('单色bmp.bmp'); >> imagesc(I,[0 2]) 显示截图: ②代码:>> I=imread('单色bmp.bmp');

>> imshow(I,2) 显示截图: ③代码:>> I=imread('单色bmp.bmp'); >> subimage(I) 显示截图:

⑶显示灰度图像 ①代码:>> I1=imread('256bmp.bmp'); >> imagesc(I1,[0,256]) 显示截图: 代码:>> I1=imread('256bmp.bmp'); >> colormap(gray); >> subplot(1,2,1); >> imagesc(I1,[0,256]); >> title('灰度级为[0 256]的mouse.bmp图'); >> subplot(1,2,2); >> imagesc(I1,[0,64]); >> colormap(gray); >> title('灰度级为[0 64]的mouse.bmp图'); 显示截图:

matlab实验报告

实验报告 2. The Branching statements 一、实验目的: 1.To grasp the use of the branching statements; 2.To grasp the top-down program design technique. 二、实验内容及要求: 1.实验内容: 1).编写 MATLAB 语句计算 y(t)的值 (Write the MATLAB program required to calculate y(t) from the equation) ???<+≥+-=0 530 53)(2 2t t t t t y 已知 t 从-5到 5 每隔0.5取一次值。运用循环和选择语句进行计算。 (for values of t between -5 and 5 in steps of 0.5. Use loops and branches to perform this calculation.) 2).用向量算法解决练习 1, 比较这两个方案的耗时。 (tic ,toc 的命令可以帮助你完成的时间计算,请使用'help'函数)。 Rewrite the program 1 using vectorization and compare the consuming time of these two programs. (tic, toc commands can help you to finish the time calculation, please use the …help ? function). 2.实验要求: 在报告中要体现top-down design technique, 对于 3 要写出完整的设计过程。 三、设计思路: 1.用循环和选择语句进行计算: 1).定义自变量t :t=-5:0.5:5; 2).用循环语句实现对自变量的遍历。 3).用选择语句实现对自变量的判断,选择。 4).将选择语句置入循环语句中,则实现在遍历中对数据的选择,从而实现程序的功能。 2. 用向量法实现: 1).定义自变量t :t=-5:0.5:5; 2).用 b=t>=0 语句,将t>=0得数据选择出,再通过向量运算y(b)=-3*t(b).^2 + 5; 得出结果。 3).用取反运算,选择出剩下的数据,在进行向量运算,得出结果。 四、实验程序和结果 1.实验程序 实验程序:创建m 文件:y_t.m

0-1背包问题的算法设计策略对比与讲解

算法设计与分析大作业 班级:电子154 姓名:吴志勇 学号: 1049731503279 任课老师:李瑞芳 日期: 2015.12.25

算法设计与分析课程论文 0-1背包问题的算法设计策略对比与分析 0 引言 对于计算机科学来说,算法的概念是至关重要的。在一个大型软件系统的开发中,设计出有效的算法将起到决定性的作用。通俗的讲,算法是解决问题的一种方法。也因此,《算法分析与设计》成为计算科学的核心问题之一,也是计算机科学与技术专业本科及研究生的一门重要的专业基础课。算法分析与设计是计算机软件开发人员必修课,软件的效率和稳定性取决于软件中所采用的算法;对于一般程序员和计算机专业学生,学习算法设计与分析课程,可以开阔编程思路,编写出优质程序。通过老师的解析,培养我们怎样分析算法的“好”于“坏”,怎样设计算法,并以广泛用于计算机科学中的算法为例,对种类不同难度的算法设计进行系统的介绍与比较。本课程将培养学生严格的设计与分析算法的思维方式,改变随意拼凑算法的习惯。本课程要求具备离散数学、程序设计语言、数据结构等先行课课程的知识。 1 算法复杂性分析的方法介绍 算法复杂性的高低体现在运行该算法所需要的计算机资源的多少上,所需的资源越多,该算法的复杂性越高;反之,所需资源越少,该算法的复杂性越低。对计算机资源,最重要的是时间与空间(即存储器)资源。因此,算法的复杂性有时间复杂性T(n)与空间复杂性S(n)之分。 算法复杂性是算法运行所需要的计算机资源的量,这个量应集中反映算法的效率,并从运行该算法的实际计算机中抽象出来,换句话说,这个量应该只依赖要解决的问题规模‘算法的输入和算法本身的函数。用C表示复杂性,N,I和A表示问题的规模、算法的输入和算法本身规模,则有如下表达式: C=F(N,I,A) T=F(N,I,A) S=F(N,I,A) 其中F(N,I,A)是一个三元函数。通常A隐含在复杂性函数名当中,因此表达式中一般不写A。 即:C=F(N,I) T=F(N,I) S=F(N,I) 算法复杂性中时间与空间复杂性算法相似,所以以下算法复杂性主要以时间复杂性为例: 算法的时间复杂性一般分为三种情况:最坏情况、最好情况和平均情况。下面描述算法复杂性时都是用的简化的复杂性算法分析,引入了渐近意义的记号O,Ω,θ,和o。 O表示渐近上界Ω表示渐近下界: θ表示同阶即:f(n)= O(g(n))且 f(n)= Ω(g(n)) 2 常见的算法分析设计策略介绍 2.1 递归与分治策略 分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。 由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。 分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。 递归算法举例: 共11页第1页

广州大学学生实验报告1 matlab 程序设计

广州大学学生实验报告 开课学院及实验室:机械与电气工程学院计算机楼 301室2014 年10 月30 日

2、MATLAB指令窗的基本操作 MATLAB指令窗给用户提供了最直接的交互界面,可用于输入和执行指令、显示指令运行结果、调试MATLAB程序等常用的MATLAB仿真计算功能。本实验掌握以下在指令窗执行的基本操作,达到熟悉使用指令窗的目的: (1)最简单的计算器使用方法:在MATLAB指令窗中,可按计算器的方式进行一般的数学计算,MATLAB的运算符的含义大致与常见的运算规则一致; (2)在指令窗中输入和生成矩阵:与一般的计算器不同,在MATLAB中可直接输入和生成矩阵。实际上,矩阵是MATLAB工作的基本元素。 (3)数值表述方法:在MATLAB中的大部分数值的表述方式与平常是相同的,需要注意的是在表示比较大的数时,MATLAB默认采用科学计数法显示; (4)变量命名规则:对于MATLAB变量命名规则,需要注意以下几点: a、变量名、函数名对字母大小写敏感 b、变量名的第一个字母必须是英文字母,后续可以是字母、数字、下划线 c、变量的有效时限:在变量定义赋值之后,会作为内存变量保存并显示在Workspace Browser中。因此,凡是显示在Workspace Browser中的变量 都是“有效”的,其后可以被调用,否则不能被调用。 d、对于像 等常用的数学常量,MATLAB定义了预定义变量与其对应,在使用时需多加留意。 e、复数和复数矩阵的表示方法。 (5)其他操作的操作要旨和操作技巧的运用。 3、计算结果的图形表示 计算结果可视化是MATLAB的主要组成部分,借助图形表现数据是十分常用的“数据表达手段”,尤其当数据量相当庞大时,因为图形可以表现数据内在联系和宏观特征。关于MATLAB绘图的基本方法在后续章节中详细讲述,本实验主要通过示例了解MATLAB绘图的基本功能。 4、Current Directory、路径设置器和文件管理 理解当前目录Current Directory和搜索路径的作用是正确使用MATLAB的关键环节。当前目录指的是当前MA TLAB工作的目录,MATLAB运行指令需要打开或者保存的文件,都首先在目录中查找或保存。搜索路径则是MATLAB工作时,需查找相应的文件、函数或变量所在的相关文件夹所在的路径。 在理解当前目录Current Directory和搜索路径的作用的基础上,也要掌握当前目录Current Directory和搜索路径的设置方法,这是正确使用MA TLAB 的必要步骤。 为了理解MATLAB当前目录Current Directory和搜索路径的作用,可以大致了解一下当用户从指令窗送入一个名为cow的指令后,MATLAB的“运作次序”: (1)MATLAB在内存中检查,看cow是不是变量;如果不是,进行下一步; (2)检查cow是不是内建函数;如果不是进行下一步; (3)在当前目录下,检查是否有名为cow的M文件存在;如果不是,进行下一步; (4)在MA TLAB搜索路径的其他目录下,检查是否有名为cow的M文件存在。

相关文档