1、院(系) 学号 姓名 成绩课程名称数学应用软件实验 实验项目名 称函数调用及嵌套 指导教师一 、实验目的1. 熟悉自定义函数的创建方法;2. 熟悉子函数的调用方式;3. 了解函数递归调用;4.了解函数的作用域。2、实验内容与步骤(过程及结果截图)1. 已知凸多边形的四个顶点(如:(0,0) , (3,0) , (6,3) , (6,6) ,图形如下所示) ,求其面积,周长,并画出其填充图形,编写该函数文件。 (要求,至少调用两个自定义函数)0 1 2 3 4 5 60123456凸凸凸凸图 1解:源代码为:function S C=SCT2(x,y)%计算三角形的面积及周长;%example:
2、 x=0 4 4; y=0 0 3;a,b,c,d=Distance(x,y);S=Square(a,b,c,d,e);C=Perimeter(a,b,c,d);s=r;my_plot(x,y,s)function my_plot(x,y,s)%自定义画图函数fill(x,y,s);legend(triangle)endendfunction a,b,c,d,e=Distance(x,y)%自定义函数求三角形的三边长度;a=sqrt(x(1)-x(2)2+(y(1)-y(2)2);b=sqrt(x(2)-x(3)2+(y(2)-y(3)2);c=sqrt(x(3)-x(4)2+(y(3)-y(
3、4)2);d=sqrt(x(1)-x(4)2+(y(1)-y(4)2);e=sqrt(x(2)-x(4)2+(y(2)-y(4)2);endfunction S=Square(a,b,c,d,e)%自定义函数求三角形的面积;p1=(a+e+d)/2;S1=sqrt(p1*(p1-a)*(p1-e)*(p1-d);p2=(b+c+e)/2;S2=sqrt(p2*(p-b)*(p-c)*(p-e);S=S1+S2;endfunction C=Perimeter(a,b,c,d)%自定义函数求三角形的周长;C=a+b+c+d;end定义填充函数:function my_plot(x,y,s)%自定义
4、画图函数fill(x,y,s); %填充legend(凸四边形 )end定义实现功能函数,其中调用 my_plot 函数function SCT2(x1,y1)s=b;my_plot(x1,y1,s)2.编写函数文件,主函数文件头如下,求解线性方程组 ,并至少找三个实例进行验证。Axb要求:至少调用两个自定义函数。function B,SS,Tag=MyLES(A,b)% 功能:求解线性方程组;% A,b分别为系数矩阵及右端项;% B为基础解系构成的矩阵,无解时B=,有唯一解时,B=SS=唯一解;% SS为特解,无解时SS=;% Tag为求解结果标识, Tag=0表无解,Tag=1表存在唯一解
5、,Tag=2 表存在无穷多解。end解:源代码为:function B,SS,Tag=MyLES(A,b)m n=size(A);a1=rank(A);a2=rank(A,b); %增广矩阵的秩c=a1-a2;if c=0Tag=1;if a1=n %克拉默法则求for i=1:ntemp=A;temp(:,i)=b;B(i)=det(temp)/det(A);endSS=B;else a1 A=1 1 2 3;3 -1 -1 -2;2 3 -1 -1;1 2 3 -1; b=1 -4 -6 -4; B,SS,Tag=MyLES(A,b)结果如下图 12:第二组数组测试(无穷多个解) A=1
6、3 5 -4 0;1 3 2 -2 1;1 -2 1 -1 -1;1 -4 1 1 -1;1 2 1 -1 1; b=1 -1 3 3 -1; B,SS,Tag=MyLES(A,b)测试结果如下图:第三组测试数据(无解) A=-2 1 1;1 -2 1;0 0 0; b=1 -2 3; B,SS,Tag=MyLES(A,b)结果如下图:3、实验结果分析或总结通过本次实验我熟悉自定义函数的创建方法和子函数的调用方式;也了解了函数递归调用和函数的作用域。在本次实验中我遇到过一些问题,但通过网上查找资料以及与同学们讨论我完成了作业。在求解第一个问题时,我通过看例题,想把它分解成两个三角形,弄了好久。可是也依旧没有弄出来。我想我可以换一种思路,就可以把它做出来。我的编程能力依旧需要提高。我还需要多做多练多思考。