常州大学度MATLAB软件实习报告.docx
- 文档编号:10692352
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:35
- 大小:3.70MB
常州大学度MATLAB软件实习报告.docx
《常州大学度MATLAB软件实习报告.docx》由会员分享,可在线阅读,更多相关《常州大学度MATLAB软件实习报告.docx(35页珍藏版)》请在冰豆网上搜索。
常州大学度MATLAB软件实习报告
序号:
学号:
14461223
实习报告
课程报告名称:
Matlab软件实习
学生姓名:
唐延刚专业班级:
电科142
学院(系):
信息科学与工程学院数理学院
校内指导教师:
姜忠义专业技术职务:
讲师
2016年12月25日——2016年1月6日
目录
MATLAB基础题目……………………………………………………1
课题一………………………………………………………………15
课题二………………………………………………………………17
课题三………………………………………………………………19
课题四………………………………………………………………23
参考文献………………………………………………………………27
1.画处函数图形,求f(x)=4x6-x+x3-95在(0,100)上最大值、最小值,根。
(使用函数fminbnd、roots)
程序:
>>[x,y]=fminbnd('4*x.^6-x+x.^3-95',0,100)
x=
0.4432
y=
-95.3258
>>[x,y]=fminbnd('-4*x.^6+x-x.^3+95',0,100)
x=
99.9999
y=
-4.0000e+12
>>a=[40010-1-95];
>>roots(a)
ans=
1.6860+0.0000i
0.8525+1.4852i
0.8525-1.4852i
-1.7050+0.0000i
-0.8431+1.4514i
-0.8431-1.4514i
2.求解常微分方程x’’=-x’+x+1,x’(0)=1,x(0)=0(使用函数dsolve)
程序:
>>dsolve('D2x=-Dx+x+1','Dx(0)=1','x(0)=0')
ans=
exp(t*(5^(1/2)/2-1/2))*((3*5^(1/2))/10+1/2)+(5^(1/2)*exp(-t*(5^(1/2)/2+1/2))*(5^(1/2)-3))/10-1
3.已知t=an2+bn,测得对应数据如下:
(多项式插值interp1)
t=[0,20,40,60,80,100,120,140,160,183.5];
n=[0,1153,2045,2800,3466,4068,4621,5135,5619,6152];
画处图形,并求a和b的值。
程序:
>>t0=[0,20,40,60,80,100,120,140,160,183.5];
>>n0=[0,1153,2045,2800,3466,4068,4621,5135,5619,6152];
>>n=0:
0.001:
6152;
>>t=interp1(n0,t0,n,'spline');
>>p=polyfit(n,t,2)
p=
1.00.01440.0631
4.请用梯形法、辛普森法分别计算积分值
(trapz、quad)
程序:
>>f=inline('sqrt(x.^2+x+1)','x');
>>quad(f,0,1)
ans=
1.3369
>>x=0:
0.01:
1;
>>y=sqrt(x.^2+x+1);
>>trapz(x,y)
ans=
1.3369
5.计算二重积分
(使用函数dblquad)
程序:
>>dblquad('x.^2+y.^2+x*y+2*x+y+1',0,1,0,2)
ans=
10.3333
6.矩阵M=[1,2,6;4,2,7;8,9,3],求M的LU分解,QR分解,对角阵,特征值分解。
(使用函数lu、qr、shol、eig)
程序:
>>M=[1,2,6;4,2,7;8,9,3];
>>lu(M)
ans=
8.00009.00003.0000
0.5000-2.50005.5000
0.1250-0.35007.5500
>>qr(M)
ans=
-9.0000-9.1111-6.4444
0.40002.4470-2.3360
0.8000-0.0227-6.8566
>>[D,X]=eig(M)
D=
-0.4111-0.7719-0.4992
-0.54840.6237-0.3914
-0.72820.12290.7730
X=
14.294400
0-1.57120
00-6.7232
7.a=3,A=4,b=a2,B=b2-1,c=a+A-2B,C=a+B+2c,求C。
(使用函数solve)
程序:
>>symsabcABC
>>eq1='a=3';
>>eq2='A=4';
>>eq3='b=a^2';
>>eq4='B=b^2-1';
>>eq5='c=a+A-2*B';
>>eq6='C=a+B+2*c';
>>x=solve(eq1,eq2,eq3,eq4,eq5,eq6);
>>x.C
ans=
-223
8.用两种方法求解Ax=b的解。
(A为四阶随机矩阵,b为四阶向量,自己创建)。
程序:
>>A=rand(4)
A=
0.81470.63240.95750.9572
0.90580.09750.96490.4854
0.12700.27850.15760.8003
0.91340.54690.97060.1419
>>B=[1;2;3;4];
>>x=inv(A)*B
x=
73.6009
6.6966
-69.4126
3.4100
9.
,画出函数图形,用两种方法求函数的根,并求其极值与零点。
程序:
>>x=0:
0.01:
50;
>>y=x.^3+(x-0.8).^2./(x+1.25).^3-5.*(x+1./x);
>>plot(x,y)
>>solve('x^3+(x-4/5)^2/(x+5/4)^3-5*x-5/x');
>>x=double(ans);
>>fori=1:
length(x)
xx(i)=isreal(x(i));
end
>>x=x(xx)
x=
2.4156
零点:
>>fzero('x.^3+(x-0.8).^2/(x+1.25).^3-5*(x+1/x)',3)
ans=
2.4156
极值:
>>symsxy
>>y=x.^3+(x-0.8).^2/(x+1.25).^3-5*(x+1/x);
>>dydx=diff(y);
>>solve(dydx);x=double(ans);
>>fori=1:
length(x)
xx(i)=isreal(x(i));
end
>>t=x(xx)
t=
-2.4039
-0.4694
>>x=t
(1);y1=subs(y)
y1=
16.2832
>>x=t
(2);y2=subs(y)
y2=
-6.4732
>>z=diff(diff(y));
>>x=t
(1);z1=subs(z)
z1=
205.8164
>>x=t
(2);z2=subs(z)
z2=
-53.5382
函数f(x)有一个极大值点x1=-2.4039,极大值为-6.4732;一个极小值点x2=-2.4039,极小值为16.2832
10.f(x)的定义如下:
,写一个matlab函数func1实现该函数,并画出函数图形,自定义坐标区间。
程序:
functiony=func1(x)
ifx<0&x~=-4
y=x.^2+x-6;
elseifx>=0&x<10&x~=2&x~=3
y=x.^2-5*x+6;
elsey=x.^2-x-1;
end
end
end
11.写一个MATLAB小程序,求出最小的n值,使得n!
>realmax。
程序:
functionf=realmax()
s=1;n=1;
while
(1)
n=n+1;
s=s*n;
ifs>realmax
break;
end
end
fprintf('%d\n',n)
>>realmax
171
12.写一个MATLAB函式myfun.m来计算下列方程式:
y=0.5*exp(x/3)-x*x*sin(x)
其中x是函式的输入,y是函式的输出。
你的函式必须能够处理当x是纯量或是向量的两种情况。
程序:
functionf=myfun(x)
n=length(x);
fori=1:
n
y(i)=0.5*exp(x(i)/3)-x(i)*x(i)*sin(x(i));
end
y=
(x-4/5)^2/(x+5/4)^3-5*x-5/x+x^3
13.写一个MATLAB的递归函式fibo.m来计算Fibonacci数列,其定义如下:
fibo(n+2)=fibo(n+1)+fibo(n)
此数列的启始条件如下:
fibo
(1)=0,fibo
(2)=1.
程序:
functionf=fibo(n)
ifn==1
f=0;
elseifn==2
f=1;
else
f=fibo(n-1)+fibo(n-2);
end
14.对于迭代模型
取初值x0=0,y0=0,进行3000次迭代,对于k>1000,在(xk,yk)处亮一点(注意不要连线)可得所谓Henon引力线图。
程序:
>>x
(1)=0;
>>y
(1)=0;
>>fori=1:
3000;
x(i+1)=1+y(i)-1.4*x(i)^2;
y(i+1)=0.3*x(i);
holdon
plot(x(i),y(i),'*b')
end
15.某公司投资2000万元建成一条生产线。
投产后,在时刻t的追加成本和追加收益分别为G(t)=
(百万元/年),H(t)=
(百万元/年)。
试确定该生产线在合适何时停产可获最大利润?
最大利润是多少?
要求:
写出数学模型、M函数(如果需要的话)、运算命令和计算结果。
所得利润
=-3t2/3-t+175,这是一个单调递减函数,当
的时候利润最大,也就是
时利润最大。
程序:
>>fplot('18-t^(2/3)',[0,20]);
>>gridon;
>>holdon;
>>fplot('5+t+2*t^(2/3)',[0,20],'r');
>>legend('H(t)','G(t)')
>>holdoff;
>>[t,f,h]=fsolve('18-x^(2/3)-5-x-2*x^(2/3)',4)
可以得到图形和结果:
t=
4.6465
f=
1.1458e-13
h=
1
可以得到结论,当t=4.6465时,利润最大,求出最大利润:
>>t=linspace(0,t,100);
>>y=18-t.^(2/3)-5-t-2*t.^(2/3);
>>trapz(t,y)-20
ans=
6.3232
16.某大学青年教师从31岁开始建立自己的养老基金,他把已有的积蓄10000元也一次性地存入,已知月利率为0.001(以复利计),每月存入700元,试问当他60岁退休时,他的退休基金有多少?
又若,他退休后每月要从银行提取1000元,试问多少年后他的基金将用完?
设第一月的养老基金为x1,第二月的养老基金为x2,然后利用递推程序计算出第n个月的养老金xn,然后再换算成对应的年份。
递推公式:
xk+1=(xk+700)*1.001(k=1.2,3…)
程序:
求退休基金,建立m文件fun1:
functiony=fun1(n)
n=n-30;
n=n*12;
x=10700*1.001;
fori=2:
n
x=x+700;
x=x*1.001;
end
y=x;
求退休基金用完时间,建立m文件fun2:
functiony=fun2(n)
m=0;
while(n>0)
n=n*1.001;
n=n-1000;
m=m+1;
end
y=m/12;
60岁的退休基金为317780:
y=fun1(60)
y=
3.1778e+05
多少年退休金用完
>>y=fun2(317780)
y=
31.9167
所以大约32年后退休基金可以用完。
17.请设计一个程序,程序完成下列功能:
(1)让用户输入一个矩阵A;
(2)在A中找出小于0的矩阵元素的位置;
(3)在A中统计出等于0的元素的个数;
(4)显示A的行数和列数;
(5)找出矩阵A各元素中的最大值(显示值,显示元素位置)。
程序:
function title19()
a=input('请输入矩阵A:
');
[m,n]=size(a);
t=0;p=0;
for i=1:
m
for j=1:
n
if a(i,j)<0
p=p+1;
fprintf('小于0序号%d位置(%d,%d)\n',p,i,j);
end
if a(i,j)==0
t=t+1;
end
end
end
B=a(:
);max=B
(1);
for i=2:
m*n
if B(i)>max
max=B(i);
end
end
if p==0
disp('小于0.');
end
fprintf('A中0的个数为%d\n',t);
fprintf('A的行数为%d列数为%d\n',m,n);
fprintf('A中元素最大值为%d\n',max);
>>fun17
A:
[1,3,2;5,6,4;8,9,7]
小于0.
A中0的个数为0
A的行数为3列数为3
A中元素最大值为9
18.请设计一个程序,程序完成下列功能:
(1)让用户依次输入两个字符串s1和s2;
(2)比较两个字符串的长度并显示比较结果;
(3)判断s1与s2有没有长度在3个字符以上的相同子串,显示判断结果。
程序:
function fun18()
s1=input('请输入字符串s1:
', 's');
s2=input('请输入字符串s2:
', 's');
m=length(s1);n=length(s2);
t=m;kk=0;
if m>n
t=n;disp(' s1大于s2.');
elseif m else disp('字符串相等.'); end for i=4: t for j=1: m-i+1 for k=1: n-i+1 if strcmp(s1(j: j+i-1),s2(k: k+i-1))==1 l=0; for r=1: kk if strcmp(s1(j: j+i-1),b{r})==1 l=1; break; end end if l==0 kk=kk+1; b{kk}=s1(j: j+i-1); end end end end end for i=1: kk fprintf('有%d个相同字符串',i); disp(b{i}); end >>fun18 请输入字符串s1: ab 请输入字符串s2: c s1大于s2. >>fun18 请输入字符串s1: gghhv 请输入字符串s2: 222kk 字符串相等. 19.首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。 根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“Youwon”,同时退出游戏。 用户最多可以猜7次。 程序: >>M=randi([1,100],1,1) M= 10 fori=1: 7 n=input('Inputanumberbetween1to100: '); ifn==M disp('YouWon');break; elseifn>M disp('High'); elseifn disp('Low'); end i=i+1; end Inputanumberbetween1to100: 6 Low Inputanumberbetween1to100: 45 High Inputanumberbetween1to100: 32 High Inputanumberbetween1to100: 22 High Inputanumberbetween1to100: 10 YouWon MATLAB程序设计课题: 课题一复杂微分方程的求解方法 一.相关函数、命令及简介 1.在Matlab中,用大写字母D表示导数,Dy表示y关于自变量的一阶导数,D2y表示y关于自变量的二阶导数,依此类推.函数dsolve用来解决常微分方程(组)的求解问题,调用格式为: X=dsolve(‘eqn1’,’eqn2’,…) 函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解. 2.函数dsolve求解的是常微分方程的精确解法,也称为常微分方程的符号解.在求常微分方程数值解方面,MATLAB具有丰富的函数,我们将其统称为solver,其一般格式为: [T,Y]=solver(odefun,tspan,y0) 说明: (1)solver为命令ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb、ode15i之一. (2)odefun是显示微分方程 在积分区间tspan 上从 到 用初始条件 求解. (3)如果要获得微分方程问题在其他指定时间点 上的解,则令tspan (要求是单调的). (4)因为没有一种算法可以有效的解决所有的ODE问题,为此,Matlab提供了多种求解器solver,对于不同的ODE问题,采用不同的solver. 3.在matlab命令窗口、程序或函数中创建局部函数时,可用内联函数inline,inline函数形式相当于编写M函数文件,但不需编写M-文件就可以描述出某种数学关系.调用inline函数,只能由一个matlab表达式组成,并且只能返回一个变量,不允许[u,v]这种向量形式.因而,任何要求逻辑运算或乘法运算以求得最终结果的场合,都不能应用inline函数,inline函数的一般形式为: FunctionName=inline(‘函数内容’,‘所有自变量列表’) 二.实例 例1求解微分方程 程序: symsxy;y=dsolve(‘Dy+2*x*y=x*exp(-x^2)’,’x’) 例2求微分方程 在初始条件 下的特解。 程序: symsxy;y=dsolve(‘x*Dy+y-exp (1)=0’,’y (1)=2*exp (1)’,’x’);ezplot(y) 例3求解微分方程 的解。 分析: 这是一个二阶非线性方程,我们可以通过变换,将二阶方程化为一阶方程组求解.令 ,则 编写M-文件vdp.m functionfy=vdp(t,x) fy=[x (2);7*(1-x (1)^2)*x (2)-x (1)]; end 在Matlab命令窗口编写程序 课题二学习和实现MATLAB对文件的调用 一.文本文件的调用 1.文本文件的读写操作 1) 读文本文件 fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。 其调用格式为: [A,COUNT]=fscanf(fid,format,size) 说明: 其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有: d(整型)、f(浮点型)、s(字符串型)、c(字符型)等。 在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。 size为可选项,决定矩阵A中数据的排列形式,它可以取下列值: N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。 2) 写文本文件 fprintf函数可以将数据按指定格式写入到文本文件中。 其调用格式为: fprintf(fid,format,A) 说明: fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵或变量。 2.例题: Matlab读txt文件 fid=fopen('fx.txt','r'); %得到文件号 [f,count]=fscanf(fid,'%f %f',[12,90]); %把文件号1的数据读到f中。 其中f是[12 90]的矩阵 %这里'%f %f'表示读取数据的形势,他是按原始数据型读出 fclose(fid); %关闭文件 另外有的txt文件还可以用load来打开,其语句为 f=load(‘fx.txt‘) load方法最简单,但个人觉得用第一种方式较好。 因为有些时候,特别是fx.txt 的一行中有多个数据时用load就比较麻烦了。 二.图像文件的调用 1.图像文件的读写操作 1)imread函数: 从文件中读入图像 A=imread(filename,fmt) [A,map]=imread(filename,fmt) 2)image函数: 显示图像 image(A) 3)imwrite函数: 将图像写入文件 imwrite(A,filename,fmt) imwrite(A,map,filename,fmt) 2.例题: 显示一幅真彩(RGB)图像。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 常州 大学 MATLAB 软件 实习 报告