Matlab数学实验报告.docx
《Matlab数学实验报告.docx》由会员分享,可在线阅读,更多相关《Matlab数学实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
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(2511)-96*log
(2)-1)-asin(2*log(90727)-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=/
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
ifxfprintf('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)<60
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<1000
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
Ifxfprintf('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)<10000
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这款强大的工具,为我的学习提供帮助。