常州大学度MATLAB软件实习报告.docx

上传人:b****4 文档编号:5379164 上传时间:2023-05-08 格式:DOCX 页数:35 大小:3.70MB
下载 相关 举报
常州大学度MATLAB软件实习报告.docx_第1页
第1页 / 共35页
常州大学度MATLAB软件实习报告.docx_第2页
第2页 / 共35页
常州大学度MATLAB软件实习报告.docx_第3页
第3页 / 共35页
常州大学度MATLAB软件实习报告.docx_第4页
第4页 / 共35页
常州大学度MATLAB软件实习报告.docx_第5页
第5页 / 共35页
常州大学度MATLAB软件实习报告.docx_第6页
第6页 / 共35页
常州大学度MATLAB软件实习报告.docx_第7页
第7页 / 共35页
常州大学度MATLAB软件实习报告.docx_第8页
第8页 / 共35页
常州大学度MATLAB软件实习报告.docx_第9页
第9页 / 共35页
常州大学度MATLAB软件实习报告.docx_第10页
第10页 / 共35页
常州大学度MATLAB软件实习报告.docx_第11页
第11页 / 共35页
常州大学度MATLAB软件实习报告.docx_第12页
第12页 / 共35页
常州大学度MATLAB软件实习报告.docx_第13页
第13页 / 共35页
常州大学度MATLAB软件实习报告.docx_第14页
第14页 / 共35页
常州大学度MATLAB软件实习报告.docx_第15页
第15页 / 共35页
常州大学度MATLAB软件实习报告.docx_第16页
第16页 / 共35页
常州大学度MATLAB软件实习报告.docx_第17页
第17页 / 共35页
常州大学度MATLAB软件实习报告.docx_第18页
第18页 / 共35页
常州大学度MATLAB软件实习报告.docx_第19页
第19页 / 共35页
常州大学度MATLAB软件实习报告.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

常州大学度MATLAB软件实习报告.docx

《常州大学度MATLAB软件实习报告.docx》由会员分享,可在线阅读,更多相关《常州大学度MATLAB软件实习报告.docx(35页珍藏版)》请在冰点文库上搜索。

常州大学度MATLAB软件实习报告.docx

常州大学度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)图像。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2