matlab结课作业.docx
《matlab结课作业.docx》由会员分享,可在线阅读,更多相关《matlab结课作业.docx(12页珍藏版)》请在冰点文库上搜索。
matlab结课作业
北京林业大学全校公共选修课课程作业
MATLAB程序应用
2013年12月21
一、已知符号函数
,求
;
(1)程序代码
%%从第1、2、3题中选做1题
%%2、已知符号函数f(x,y)=(x^2+y^2)sin(1/sqrt(x^2+y^2)),求对x求导,对y求导等
clear;
clc;
symsxy;
f=(x^2+y^2)*sin(1/sqrt(x^2+y^2));
Dx=diff(f,x)%对x求导
Dy=diff(f,y)%对y求导
Dxx=diff(f,x,2)%对x2求导
Dyy=diff(f,y,2)%对y2求导
Dxy=diff(Dx,y)%先对x求导在对y求导
(2)运行结果
二、学研大厦一楼到二楼台阶分为2个部分各有13级台阶,男同学可以每步1,2,3级台阶,女同学可以每步1,2级台阶。
请分别编程计算男女同学各有多少种方法从一楼到二楼;假如第一部分的第8级台阶坏了不能通行,再进行以上计算;
(1)程序代码
%%从第4、5、6题中选做1题
%%5、走台阶方法
clear;
clc;
%
(1)男同学走法
m=13;
a=[];
a
(1)=1;
a
(2)=2;
a(3)=4;
a(4)=7;
forn=4:
m;
a(n)=a(n-1)+a(n-2)+a(n-3);
end
boy1=(a(n))^2
%
(1)女同学走法
m=13;
a=[];
a
(1)=1;
a
(2)=2;
a(3)=4;
forn=4:
m;
a(n)=a(n-1)+a(n-2);
end
girl1=(a(n))^2
%第八阶坏了
%(3)男同学走法
m=7;
k=5;
a=[];
b=[];
a
(1)=1;
b
(1)=1;
a
(2)=2;
b
(2)=2;
a(3)=4;
b(3)=4;
a(4)=7;
b(4)=7;
%前7阶走法
forn=4:
m;
a(n)=a(n-1)+a(n-2)+a(n-3);
end
%后5阶走法
forn=4:
k;
b(n)=b(n-1)+b(n-2)+b(n-3);
end
boy2=(a(n)*b(n))*sqrt(boy1)
%(4)女同学走法
m=7;
k=5;
a=[];
b=[];
a
(1)=1;
b
(1)=1;
a
(2)=2;
b
(2)=2;
a(3)=4;
b(3)=4;
%前7阶走法
forn=4:
m;
a(n)=a(n-1)+a(n-2);
end
%后5阶走法
forn=4:
k;
b(n)=b(n-1)+b(n-2);
end
girl2=(a(n)*b(n))*sqrt(girl1)
(2)运行结果
三、绘制函数z=((x1./y1).^2+(y1./x1).^2)./(x1./y1+y1./x1)
的三维网格图形
(1)程序代码
%%第三题自选题
clearall;
clc;
x=linspace(-2,2,100);
y=linspace(-2,2,100);
z=linspace(-2,2,100);
[x1,y1]=meshgrid(x,y);
z=((x1./y1).^2+(y1./x1).^2)./(x1./y1+y1./x1);
mesh(x1,y1,z);
title('z=((x1./y1).^2+(y1./x1).^2)./(x1./y1+y1./x1)')
xlabel('x')
ylabel('y')
zlabel('z')
(2)运行结果
点数100
点数500
四、有3根柱子:
A,B,C,现有n个大小不一的碟子依半径的大小,从下而上套在柱子A上,最大的碟子放在柱子A的最下面。
现要将所有的碟子从柱子A移动到C柱子上,每次只允许从一根柱子转移到另一根柱子上,且在转移过程中不允许出现大碟子放在小碟子上。
B为可以利用的柱子,每次只允许移动一个碟子,请问要转移多少次才能将柱子A上的碟子全部转移柱子C上?
【问题描述】
假设只有一个碟子,则直接从A移动到C
但碟子大于1时,则需先将n-1个碟子从A经过C移动到B,再将第n个碟子从A移动到C,然后将n-1个碟子从B经过A移动到C……重复直到所有碟子移动完
因此本题可以转化利用matlab求解函数递归调用的问题
【建模方法】
主程序调用
inputn%输入n
定义i,统计移动次数
声明move(n,'A','B','C')移动碟子函数
functionmove(n,'A','B','C')函数实现
判断碟子个数,选择执行
碟子个数大于等于2,递归调用move函数,并输出移动步骤,累计移动次数
转移完成,输出移动次数
【程序代码】
functionhannoi(n)
clear;
clc;
i=0;
n=input('inputn:
');
move(n,'A','B','C');
%将n个碟子从a经过b移动到c
functionmove(n,a,b,c)
i=i+1;
%如果是一个碟子,直接从a移动到c
ifn==1
fprintf('将1号碟子从%s--->%s\n',a,c);
else
%否则,先将n-1个碟子从A经过C移动到B
move(n-1,a,c,b);
%将第n个碟子从A移动到C
fprintf('将%d号碟子从%s--->%s\n',n,a,c);
%将n-1个碟子从B经过A移动到C
move(n-1,b,a,c);
end
end
fprintf('\n一共转移%d次\n',i);
end
【运行结果】
【结果分析】
(1)从结果分析可以基本得出结论,碟子移动的次数i和碟子个数n之间有一下关系i=2n-1
五、意见和建议
心得体会:
matlab这门课程非常实用,有时候用来给函数作图解决问题也觉得很有趣。
让对矩阵的运算、多项式预算、微积分等平时看起来计算比较繁琐的工作变得非常简单;图形化使运算结果很直观;所使用的语言同我们计算机专业所学的C语言等高级语言相比,没太大的差异,操作起来很方便。
在学习matlab的过程中,该多注意实际操作并且复习下高等数学、线性代数等课程,这样学起来会更容易进步更快;还有就是要自己多查多看才能掌握的更多。
总之学习matlab是很实用也很有趣的,今后应该继续深入的学习。
建议:
本门课程因为课程本身内容难度不太小略显枯燥,但老师授课条理清晰,循序渐进,幽默风趣而不失严谨,使课程变得轻松许多。
如果老师能在讲课中不时地进行实际操作演练,我觉得可以使学生更容易接受理解