Matlab数学实验报告.docx |
您所在的位置:网站首页 › matlab矩阵某一个元素 › Matlab数学实验报告.docx |
Matlab数学实验报告.docx Matlab数学实验报告
数学实验报告
姓名: 班级: 学号:
第一次实验任务 过程: a=1+3i;b=2-i; 结果: a+b=3.0000+2.0000i a-b=-1.0000+4.0000i a*b=5.0000+5.0000i a/b=-0.2000+1.4000i 过程: x=-4.5*pi/180;y=7.6*pi/180; 结果: sin(abs(x)+y)/sqrt(cos(abs(x+y)))=0.2098 心得: 对于matlab中的角度计算应转为弧度。 (1)过程: x=0: 0.01: 2*pi;y1=sin(x);y2=cos(x);y3=exp(x);y4=log(x); plot(x,y1,x,y2,x,y3,x,y4)plot(x,y1,x,y2,x,y3,x,y4) 结果: (2)过程: >>subplot(2,2,1) >>plot(x,y1) >>subplot(2,2,2) >>plot(x,y2) >>subplot(2,2,3) >>plot(x,y3) >>subplot(2.2.4) >>subplot(2,2,4) >>plot(x,y4) 结果: 心得: 在matlab中,用subplot能够实现在同一页面输出多个坐标系的图像,应注意将它与holdon进行区别,后者为在同一坐标系中划出多条曲线。 5、随机生成一个3x3矩阵A及3x2矩阵B,计算 (1)AB, (2)对B中每个元素平方后得到的矩阵C,(3)sinB,(4)A的行列式,(5)判断A是否可逆,若可逆,计算A的逆矩阵,(6)解矩阵方程AX=B,(7)矩阵A中第二行元素加1,其余元素不变,得到矩阵D,计算D。 过程: A=fix(rand(3,3).*10); B=fix(rand(3,3).*10); 结果: (1)A*B= 2228 4964 76100 (2)C=B.^2 C= 14 916 2536 (3)sin(B) ans= 0.84150.9093 0.1411-0.7568 -0.9589-0.2794 (4)a=det(A) a=0 (5)由det(A)存在,且det(A)=0,故A不可逆 (6)X无解 (7)l=A(2,1),l1=l+1,m=A(2,2),m1=m+1,n=A(2,3),n1=n+1 D=A,D(2,1)=l1,D(2,2)=m1,D(2,3)=n1 D= 123 567 789 心得: 熟练掌握matlab中对数组的操作方法尤为重要,其中,除了要牢记一些十分方便的函数外,应注意对数组的每一个元素进行操作时,应在运算符前加“.”号,如.^.*等。 6、设y=(x2+excosx+[x])/x,分别计算x=1,3,5,7.4时y的值。 其中[x]表示x的取整函数。 过程: x=1,y=(x^2+exp(x)*cos(x)+fix(x))/x 结果: x=1 y=3.4687 x=3 y=-2.6282 x=5 y=14.4198 x=7.4 y=105.2995 7、已知某地区1-12月份的平均气温为5,8,13,20,25,28,31,33,27,24,19,10,请绘图表示。 过程: : T=[5,8,13,20,25,28,31,33,27,24,19,10]; bar(T) 结果:
第2次实验任务 1.某大学本科生就业情况如下: 458人考入研究生,60人签到外企或合资企业,184人签到国营大企业,87人签到私人企业,13人自主创业,画出饼图表示之; 过程: x=[458601848713]; pie3(x) 答案: 2.求极限 过程: symsxa; limit('((x-a)/(x+a))^x',x,inf) 答案: ans=exp(-2*a) 3.求极限 过程: >>symsx; >>limit('tan(x)^(1/log10(x))',x,0,'right') 答案: ans=exp (1)
4.设 过程: symsxqt; q=limit('(1+1/x)^(2*x)',x,inf); df=diff('q^t',t) 答案: df=q^t*log(q)
5.展开多项式 ; 过程: symsab; F=(a+b)^3+(b-1)^2+a+2*b; expand(F) 答案: ans=a^3+3*a^2*b+3*a*b^2+b^3+b^2+1+a 6.分解因式 过程: symsx; F=x^5+3*x^4+2*x^2+x-1; factor(F) 答案: ans=x^5+3*x^4+2*x^2+x-1 7.求方程 的根 过程: symsx; C=solve(‘x^3-2*x+1=0’) 答案C= 1 1/2*5^(1/2)-1/2 -1/2-1/2*5^(1/2) 8. 过程: >>symsx; >>f=sqrt(x+sqrt(x+sqrt(x))); >>df=diff(f) 答案: df=1/2/(x+(x+x^(1/2))^(1/2))^(1/2)*(1+1/2/(x+x^(1/2))^(1/2)*(1+1/2/x^(1/2))) 9.求不定积分 过程: symsx; F=1/(sqrt(2*x+3)+sqrt(2*x-1)); Nf=int(F,x,) 答案: Nf=-1/12*(2*x-1)^(3/2)+1/12*(2*x+3)^(3/2)
过程: symsx; F=1/(1+cos(x)); Nf=int(F) 答案: Nf=tan(1/2*x) 10求定积分 过程: symsx; F=1/(x*sqrt(log(x)*(1-log(x))); Nf=int(F,x,exp(1/2),exp(3/4)) 答案: ans= asin(2*log(595882530372511)-96*log (2)-1)-asin(2*log(1856295125090727)-100*log (2)-1) 11.解方程组 过程: symsxy; eq1=sym(‘2*x+y=8’); eq2=sym(‘x-3*y=1’); [x,y]=solve(eq1,eq2) 答案: x=25/7 y=6/7 12.求和 过程: symsk; symsum(1/k^2,k,1,20) 答案: ans=17299975731542641/10838475198270720 13. 过程: symsx; taylor(cos(2*x),x,15,pi/6) 答案: ans=1/2-3^(1/2)*(x-1/6*pi)-(x-1/6*pi)^2+2/3*3^(1/2)*(x-1/6*pi)^3+1/3*(x-1/6*pi)^4-2/15*3^(1/2)*(x-1/6*pi)^5-2/45*(x-1/6*pi)^6+4/315*3^(1/2)*(x-1/6*pi)^7+1/315*(x-1/6*pi)^8-2/2835*3^(1/2)*(x-1/6*pi)^9-2/14175*(x-1/6*pi)^10+4/155925*3^(1/2)*(x-1/6*pi)^11+2/467775*(x-1/6*pi)^12-4/6081075*3^(1/2)*(x-1/6*pi)^13-4/42567525*(x-1/6*pi)^14
14.编写猜数游戏程序: 首先由计算机随机产生一个[1,100]之间的一个整数,然后由用户猜测所产生的这个数。 根据用户猜测的情况给出不同的提示,如果猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“Youwon! ”,同时退出游戏。 用户最多有7次机会。 过程: a=fix(rand (1)*100); fori=1: 1: 7 x=input('pleaseinputthenumberyouguess'); ifx>a fprintf('high'); continue; end ifx fprintf('low'); continue; end ifx==a fprintf('youwon'); break; end end 结果: pleaseinputthenumberyouguess50 lowpleaseinputthenumberyouguess75 highpleaseinputthenumberyouguess63 highpleaseinputthenumberyouguess56 lowpleaseinputthenumberyouguess60 youwon>>
心得体会: (1)灵活运用符号方程和各类求解函数对于我们高数的学习和数学问题的验证将会产生很大帮助。 (2)应熟练掌握生成某个范围内随机整数等常用技巧。 (3)应正确区分循环中的continue与break的作用,即continue是跳过当次循环,而break是跳出整个循环。
第三次Matlab上机实验报告 第一题: 每门课程考试阅卷完毕,任课教师都要对各班的考试成绩进行统计,统计内容包括: 全班人数,总得分,平均得分,不及格的人数及90分(包括90分)以上的人数.请编制程序解决这一问题,并自给一组数据验证程序的正确性.要求: 使用者在提示下通过键盘输入学生成绩,计算机自动处理后,显示需要的结果. 问题分析及程序: 1分析: 运用循环来对数组中的每个数的值进行判定,从而达到统计各项人数的目的。 2程序: a=input('请输入数组学生成绩 a[n]=');%输入学生成绩到数组中 n=length(a); s=0; p=0; q=0; for i=1: n%在循环中进行统计 s=a(i)+s; if a(i)>=90 p=p+1; elseif a(i) q=q+1; end end r=s/n; fprintf('全班人数%.0f 总得分%.0f 平均得分%.2f 不及格的人数%.0f 90分(包括90分)以上的人数%.0f\n',n,s,r,q,p);%输出 运行结果: 请输入数组学生成绩a[n]=[8798679890706066] 全班人数8总得分636平均得分79.50不及格的人数090分(包括90分)以上的人数3 结果分析: 灵活运用循环语句,选择语句等基本语句,能很方便地在程序中实现很多基本功能。 第二题: 1习题1: 编程计算小于1000的水仙花数。 问题分析及程序: 分析: 水仙花数指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。 所以在外层设置1到1000的循环,内层对每一个数是否满足水仙花数的条件进行判断并输出。 程序: i=10; g=0; s=0; b=0; fprintf(‘1到1000的水仙花数有: \n’) whilei g=mod(i,10); s=(mod(i,100)-g)/10; b=(i-10*s-g)/100; ifi==g^3+b^3+s^3 fprintf('%.0f\n',i); end i=i+1; end 运行结果: 1到1000的水仙花数有: 153 370 371 407 结果分析: (1)在1到1000内只有以上四个水仙花数; (2)其实,改程序的代码还可以进行进一步简化,用三个for循环语句的嵌套(每一个for循环代表某一位上数字的变化)来实现对一个三位数的检验。 2习题3: 求方程2x+y+4z=100的所有非负整数解。 问题分析及程序: 分析: 对于该三元一次方程,无法用现成的数学函数直接求解,应用一个三层循环对x,y,z的取值进行判断。 程序: fprintf('方程的解有: \n'); i=1; forx=1: 50 fory=1: 100 forz=1: 25 if2*x+y+4*z==100 i=i+1; end end end end fprintf(‘%.0f个’,i); 结果: 方程的解有: 577个 分析: 总共有577组解(因数量过多,故只在此显示解的数量)。 第三题: 编写猜数游戏程序: 首先由计算机随机产生一个[1,100]之间的一个整数,然后由用户猜测所产生的这个数。 根据用户猜测的情况给出不同的提示,如果猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“Youwon! ”,同时退出游戏。 用户最多有7次机会。 问题分析及程序: 分析: 产生随机数,进行七次循环,每次对输入的值进行判定,若相同则提前跳出循环。 程序: a=fix(rand (1)*100); fori=1: 1: 7 x=input('pleaseinputthenumberyouguess'); Ifx>a fprintf('high'); continue; end Ifx fprintf('low'); continue; end ifx==a fprintf('youwon'); break; end end 结果: pleaseinputthenumberyouguess50 lowpleaseinputthenumberyouguess75 highpleaseinputthenumberyouguess63 highpleaseinputthenumberyouguess56 lowpleaseinputthenumberyouguess60 youwon 结果分析: 用二分法能有较高概率猜中结果。 第四题: Fibonacci数组元素满足Fibonacci规则: (1)用循环语句形成前20个分量的数组; (2)求该数组中第一个大于10000的数. 问题分析及程序: 分析: 分别用for循环和while循环能解决以上两个问题。 程序: (1) a (1)=1; a (2)=1 fori=3: 20 a(i)=a(i-1)+a(i-2); end 结果: 112358 1321345589144 23337761098715972584 41816765 (2) a (1)=1; a (2)=1; i=3; whilea(i-1) a(i)=a(i-1)+a(i-2); ifa(i)>10000 fprintf(‘第一个大于10000的数是: %d’,a(i)) end i=i+1; end 结果: 第一个大于10000的数是: 10946 第五题: 5. (1)编写一个function函数,调用该函数,可以求一组数的最大值及最小值. (2)通过键盘输入一组数,利用 (1)编写的function函数,得出最大最小数. 问题分析: 在函数中利用循环求得最大最小值并返回这两个值。 程序: (1) function[y1y2]=daxiao(x) n=length(x); y1=x (1); y2=x (1); fori=2: n ifx(i)>x(i-1) y1=x(i); elsey2=x(i); end end (2) x=input('请输入这组数的值x[n]='); [y1y2]=daxiao(x); fprintf('最大值是: %.0f,最小值是: %.0f',y1,y2) 结果: 请输入这组数的值x[n]=[3445566789991] 最大值是: 99,最小值是: 1 结果分析: 函数中的应给存放最值的变量存初值,否则不会得到预期的结果。 心得体会: (1)matlab中的语句与C语言中的语句结构具有很高的相似性,熟练掌握循环结构,选择结构等将会对我们matlab程序的编写产生很大帮助。 (2)函数的返回值可以是也可以是多个值。 当函数返回的是多个值时,应注意用多个变量进行接收,否则得不到预期的结果。 (3)应熟练掌握MATLAB程序中的几个输入输出函数,以及它们的用法,比如fprintf(不要误写成print,并且在使用时,应在单引号内指明变量输出的格式与类型)与input。 总的感悟 通过本学期的Matlab课程的学习,我对Matlab有了全新的认识,在高等数学上某些问题的解决与验证也有了新的工具,程序的编写能力也有所提高。 相信在未来我能有效得利用好Matlab这款强大的工具,为我的学习提供帮助。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |