matlab选修课论文.docx
《matlab选修课论文.docx》由会员分享,可在线阅读,更多相关《matlab选修课论文.docx(14页珍藏版)》请在冰豆网上搜索。
![matlab选修课论文.docx](https://file1.bdocx.com/fileroot1/2022-11/24/112ca22b-510c-49f8-a579-4ca182668f6a/112ca22b-510c-49f8-a579-4ca182668f6a1.gif)
matlab选修课论文
MATLAB简介:
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
MATLAB数据计算:
数值运算的功能、创建矩阵、矩阵运算、多项式运算、线性方程组、数值统计、线性插值、函数优化、微分方程的数值解
一,命令行的基本操作
创建矩阵的方法
直接输入法
规则:
矩阵元素必须用[]括住、矩阵元素必须用逗号或空格分隔、在[]内矩阵的行与行之间必须
用分号分隔
矩阵元素
矩阵元素可以是任何matlab表达式,可以是实数,也可以是复数,复数可用特殊函数I,j输入
a=[123;456]、x=[2pi/2;sqrt(3)3+5i]
符号的作用
逗号和分号的作用
逗号和分号可作为指令间的分隔符,matlab允许多条语句在同一行出现.
分号如果出现在指令后,屏幕上将不显示结果.
注意:
只要是赋过值的变量,不管是否在屏幕上显示过,都存储在工作空间中,以后可随时显示或调用.变量名尽可能不要重复,否则会覆盖.
当一个指令或矩阵太长时,可用续行
冒号的作用
用于生成等间隔的向量,默认间隔为1.
用于选出矩阵指定行,列及元素.
循环语句
2.用matlab函数创建矩阵
空阵[]—matlab允许输入空阵,当一项操作无结果时,返回空阵.
rand——随机矩阵
eye——单位矩阵
zeros——全部元素都为0的矩阵
ones——全部元素都为1的矩阵
还有伴随矩阵,稀疏矩阵,魔方矩阵,对角矩阵,范德蒙等矩阵的创建,就不一一介绍了.
注意:
matlab严格区分大小写字母,因此a与A是两个不同的变量.
matlab函数名必须小写.
3.矩阵的修改
直接修改
可用键找到所要修改的矩阵,用键移动到要修改的矩阵元素上即可修改.指令修改
可以用A(,)=来修改.
例如
a=[120;305;789]
a=120
305
789
a(3,3)=0
a=120
305
780
还可以用函数subs修改,matlab6.0还可用find函数修改.
二,数据的保存与获取
把matlab工作空间中一些有用的数据长久保存下来的方法是生成mat数据文件.
save——将工作空间中所有的变量存到matlab.mat文件中.
默认文件名
savedata——将工作空间中所有的变量存到data.mat文件中.
savedataab——将工作空间中a和b变量存到data.mat文件中.
下次运行matlab时即可用load指令调用已生成的mat文件.
load——
loaddata——
loaddataab——
mat文件是标准的二进制文件,还可以ASCII码形式保存.
即可恢复保存过的所有变量
三,矩阵运算
矩阵加,减(+,-)运算
规则:
相加,减的两矩阵必须有相同的行和列两矩阵对应元素相加减.
允许参与运算的两矩阵之一是标量.标量与矩阵的所有元素分别进行加减操作.
2.矩阵乘()运算
规则:
A矩阵的列数必须等于B矩阵的行数
标量可与任何矩阵相乘.
a=[123;456;780];b=[1;2;3];c=a*b
c=14
32
23
d=[-1;0;2];f=pi*d
f=-3.1416
0
6.2832
矩阵除的运算在线性代数中没有,有矩阵逆的运算,在matlab中有两种矩阵除运算
3.矩阵乘方——a^n,a^p,p^a
a^p——a自乘p次幂方阵
>1的整数
对于p的其它值,计算将涉及特征值
和特征向量,如果p是矩阵,a是标量
a^p使用特征值和特征向量自乘到p次
幂;如a,p都是矩阵,a^p则无意义.
a=[1,2,3;4,5,6;7,8,9];a^2
ans=303642
668196
102126150
※当一个方阵有复数特征值或负实特征值时,非整数幂是复数阵.
a^0.5
ans=
0.4498+0.7623i0.5526+0.2068i0.6555-0.3487i
1.0185+0.0842i1.2515+0.0228i1.4844-0.0385i
1.5873-0.5940i1.9503-0.1611i2.3134+0.2717i
4.矩阵的其它运算
inv——矩阵求逆
det——行列式的值
eig——矩阵的特征值
diag——对角矩阵
'——矩阵转置
sqrt——矩阵开方
5.矩阵的一些特殊操作
矩阵的变维
a=[1:
12];b=reshape(a,3,4)
c=zeros(3,4);c(:
)=a(:
)
矩阵的变向
rot90:
旋转;fliplr:
上翻;flipud:
下翻
矩阵的抽取
diag:
抽取主对角线;tril:
抽取主下三角;
triu:
抽取主上三角
矩阵的扩展
关系运算
小于
小于或等于
大于
大于或等于
等于
不等于
<
>=
==
~=
意义
关系符号
5.矩阵的数组运算
数组运算指元素对元素的算术运算,
与通常意义上的由符号表示的线性代数
矩阵运算不同
数组加减(.+,.-)
a.+b
a.-b
对应元素相加减(与矩阵加减等效)
2.数组乘除(,./,.\)
ab——a,b两数组必须有相同的行
和列两数组相应元素相乘.
a=[123;456;789];
b=[246;135;7910];
a.*b
ans=
2818
41530
497290
a=[123;456;789];
b=[246;135;7910];
a*b
ans=
253746
5585109
85133172
a./b=b.\a
a.\b=b./a
a./b=b.\a—都是a的元素被b的对应元
素除
a.\b=b./a—都是a的元素被b的对应元
素除
例:
a=[123];b=[456];c1=a.\b;c2=b./a
c1=4.00002.50002.0000
c2=4.00002.50002.0000
——给出a,b对应元素间的商.
3.数组乘方(.^)—元素对元素的幂
例:
a=[123];b=[456];
z=a.^2
z=
1.004.009.00
z=a.^b
z=
1.0032.00729.00
四,多项式运算
matlab语言把多项式表达成一个行向量,
该向量中的元素是按多项式降幂排列的.
f(x)=anxn+an-1xn-1+……+loa0
可用行向量p=[anan-1……a1+a0]表示
poly——产生特征多项式系数向量
特征多项式一定是n+1维的
特征多项式第一个元素一定是1
例:
a=[123;456;780];
p=poly(a)
p=1.00-6.00-72.00-27.00
p是多项式p(x)=x3-6x2-72x-27的matlab描述方法,我们可用:
p1=poly2str(p,'x')—函数文件,显示
数学多项式的形式
p1=x^3-6x^2-72x-27
2.roots——求多项式的根
a=[123;456;780];p=poly(a)
p=
1.00-6.00-72.00-27.00
r=roots(p)
r=12.12
-5.73——显然r是矩阵a的特征值
-0.39
当然我们可用poly令其返回多项式形式
p2=poly(r)
p2=
1.00-6.00-72.00-27.00
matlab规定多项式系数向量用行向量表示,一组根用列向量表示.
3.conv,convs多项式乘运算
例:
a(x)=x2+2x+3;b(x)=4x2+5x+6;
c=(x2+2x+3)(4x2+5x+6)
a=[123];b=[456];
c=conv(a,b)=conv([123],[456])
c=4.0013.0028.0027.0018.00
p=poly2str(c,'x')
p=4x^4+13x^3+28x^2+27x+18
4.deconv多项式除运算
a=[123];
c=[4.0013.0028.0027.0018.00]
d=deconv(c,a)
d=4.005.006.00
[d,r]=deconv(c,a)
余数
c除a后的整数
5.多项式微分
matlab提供了polyder函数多项式的微分.
命令格式:
polyder(p):
求p的微分
polyder(a,b):
求多项式a,b乘积的微分
[p,q]=polyder(a,b):
求多项式a,b商的微分
例:
a=[12345];poly2str(a,'x')
ans=x^4+2x^3+3x^2+4x+5
b=polyder(a)
b=4664
poly2str(b,'x')
ans=4x^3+6x^2+6x+4
五,代数方程组求解
matlab中有两种除运算左除和右除.
对于方程ax+b,a为an×m矩阵,有三种情
况:
当n=m时,此方程成为"恰定"方程
当n>m时,此方程成为"超定"方程
当nmatlab定义的除运算可以很方便地解上
述三种方程
1.恰定方程组的解
方程ax+b(a为非奇异)
x=a-1b
矩阵逆
两种解:
x=inv(a)b—采用求逆运算解方程
x=a\b—采用左除运算解方程
方程ax=b
a=[12;23];b=[8;13];
x=inv(a)*bx=a\b
x=x=
2.002.00
3.003.00
=
ax=b
例:
x1+2x2=8
2x1+3x2=13
2.超定方程组的解
方程ax=b,m方程解(a'a)x=a'b
x=(a'a)-1a'b——求逆法
x=a\b——matlab用最小二乘法找一
个准确地基本解.
例:
x1+2x2=1
2x1+3x2=2
3x1+4x2=3
a=[12;23;34];b=[1;2;3];
解1x=a\b解2x=inv(a'a)a'b
x=x=
1.001.00
00.00
=
ax=b
3.欠定方程组的解
当方程数少于未知量个数时,即不定
情况,有无穷多个解存在.
matlab可求出两个解:
用除法求的解x是具有最多零元素的解
是具有最小长度或范数的解,这个解是基于伪逆pinv求得的.
x1+2x2+3x3=1
2x1+3x2+4x3=2
a=[123;234];b=[1;2];
x=a\bx=pinv(a)b
x=x=
1.000.83
00.33
0-0.17
=
ax=b
六,微分方程求解
微分方程求解的仿真算法有多种,常用的有Euler(欧拉法),RungeKutta(龙
格-库塔法.
Euler法称一步法,用于一阶微分方程
当给定仿真步长时:
所以
yn+1=yn+h·f(xn,yn)n=0,1,2…
y(x0)=y0
RungeKutta法
龙格-库塔法:
实际上取两点斜率
的平均斜率来计算的,其精度高
于欧拉算法.
龙格-库塔法:
ode23ode45
k1=hf(xn,yn)
k2=hf(xn+h,yn+k)
例:
x+(x2-1)x+x=0
为方便令x1=x,x2=x分别对x1,x2求一
阶导数,整理后写成一阶微分方程组
形式
x1=x2
x2=x2(1-x12)-x1
建立m文件
解微分方程建立m文件
functionxdot=wf(t,x)
xdot=zeros(2,1)
xdot
(1)=x
(2)
xdot
(2)=x
(2)*(1-x
(1)^2)-x
(1)
给定区间,初始值;求解微分方程
t0=0;tf=20;x0=[00.25]';
[t,x]=ode23('wf',t0,tf,x0)
plot(t,x),figure
(2),plot(x(:
1),x(:
2))
命令格式:
[T,Y]=ODE23(ODEFUN,TSPAN,Y0)
建立m文件
functiondxdt=wf(t,x)
dxdt=[x
(2);x
(2)*(1-x
(1)^2)-x
(1)];
求解微分方程
[t,x]=ode23(@wf,[030],[00.25]);
plot(t,x);
figure
(2)
plot(x(:
1),x(:
2))
七,函数优化
寻优函数:
fmin——单变量函数
fmins——多变量函数
constr——有约束条件
无约束条件
例1:
f(x)='x2+3x+2'在[-55]区间的最小值
f=fmin('x^2+3*x+2',-5,5)
例2:
f(x)=100(x2-x12)2+(a-x1)2在x1=a,x2=a2处有最小值
functionf=xun(x,a)
f=100*(x
(2)-x
(1).^2).^2+(a-x
(1)).^2;
x=fmins('xun',[0,0],[],[],sqrt
(2))
八,数据分析与插值函数
max——各列最大值
mean——各列平均值
sum——各列求和
std——各列标准差
var——各列方差
sort——各列递增排序
九,拟合与插值
1.多项式拟合
x0=0:
0.1:
1;
y0=[-.4471.9783.115.255.024.664.014.583.455.359.22];
p=polyfit(x0,y0,3)
p=56.6915-87.117440.0070-0.9043
xx=0:
0.01:
1;yy=polyval(p,xx);
plot(xx,yy,'-b',x0,y0,'or')
2.插值
插值的定义——是对某些集合给定的数据点之间函数的估值方法.
当不能很快地求出所需中间点的函数时,插值是一个非常有价值的工具.
MATLAB学习感想:
虽然选了这门课,但是开始还是觉得没有意思的。
自从莫老师教我们相关的东西后,越来越觉得很强大的。
特别是我们开的自动控制的课程里面要用到这软件。
所以感觉学的还是很有激情的。
主要是结合相关问题的时候,更能让自己有所成就感。
简单的说MATLAB由一系列工具组成。
这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。
包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。
随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。
而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。
简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。
这就能体现他的强大。
刚开始学习MATLAB,基本上都是靠自学。
有一位前辈培训了一次,但是时间还是太短了。
开始的时候看到MATLAB,只知道是一个很陌生的软件,但随着学习的了解,觉得老师只是个指路的明灯,最终的学习还是要靠自己。
虽然界面还是全英文环境。
看到的第一本书,还是一本紫皮的讲Simulink的书。
后来上书店去买了一本铁道出版社的书《MATLAB6.1程序设计与实例》,真是一本好书啊,现在还是我首选的MATLAB书,不时拿在手上翻翻。
通读了这本书,才对MATLAB的概念有所了解。
因为要在界面上显示一个图像,其他人用的是一个pushbutton的CData显示图像,还能用鼠标按来按去。
我记得MATLAB的对象结构上讲了image,后来就想办法用Image显示出来这个图像。
花了三天左右搞定,这是我用MATLAB解决的第一个问题,对自己的鼓动很大。
后来又利用空闲时间,做了一个三角函数的显示模块,原希望帮助初中生学习三角函数,一直没有机会,就此埋没了我的**作。
再之后就是买书,看书,不看help,因为英文不好。
记得有一次,要写一个界面,按钮画好了,回调函数也写了,可是程序总是运行不通。
那个程序看了几十上百遍,还是没有看出个所以然来。
没有人可以问,没有人可以帮我,心中那个苦闷啊,依然无奈。
只好硬着头皮看help,看MATLAB的sample中的注释。
总算是开了悟,发现函数结构和函数流程没有理清楚。
开始那几个星期时间就是这样过来的。
面对问题,自己琢磨,翻书,不行再找help。
Google一下也没有什么有用的资料。
虽然去过Mathworks,难以找到什么好用的东西。
没有多少人可以讨论和交流,听说华为有一些博士在使用MATLAB,可是高人无缘一见啊。
黑暗中的摸索,应该也就是这样的吧。
学习MATLAB的过程是孤独的,MATLAB在软件开发语言中也是孤独的。
同路者少,知音更少。