370 likes | 587 Views
Matlab 基础及其应用. 教师简介. 主讲教师 :李浩 刘大刚 holly@uestc.edu.cn 物理电子学院. MATLAB 课程介绍. 定位:公共基础选修课 目标:了解 MATLAB ,能够熟练掌握数学(矩阵)运算,简单编程,简单的数据处理、符号运算及基本图形绘制 . 对 MATLAB 面向对象编程与 simulink 有基本了解。. 参考教材: MATLAB 基础及应用 参考书目: 《Matlab 程序设计教程 》 ,李海涛、邓樱,高等教育出版社 /2005.5.1
E N D
教师简介 主讲教师:李浩 刘大刚 holly@uestc.edu.cn 物理电子学院
MATLAB课程介绍 • 定位:公共基础选修课 • 目标:了解MATLAB,能够熟练掌握数学(矩阵)运算,简单编程,简单的数据处理、符号运算及基本图形绘制.对MATLAB面向对象编程与simulink有基本了解。
参考教材:MATLAB基础及应用 • 参考书目: 《Matlab程序设计教程》,李海涛、邓樱,高等教育出版社/2005.5.1 《精通MATLAB 6.5版》,张志涌,北京航空航天大学出版社/2003.3 《科学运算语言MATLAB5.3程序设计及应用》,薛定宇,清华大学出版社/2000 《数值方法和MATLAB实现与应用》,拉克唐瓦尔德(美),机械工业出版社/2004.9 • 特点:完全不必具备其它语言的基础,各年级各专业的同学都可选修。
MATLAB课程安排 • 学时: 32学时(基于matlab6.5版本) • 安排:讲课16学时,上机16学时 • 考核要求:实验报告必须齐备。 • 考核方式: 实验报告
上机安排 • 从9月21日(也就是下个星期四)起,每个星期四安排为上机时间。 • 上机地点:主楼东312(物电机房) • 上机时间:18:00~20:00 20:00~22:00
主要内容 • Matlab 概述与入门; • 数据类型和运算; • 数值计算; • 符号运算; • 数据和函数的可视化; • Matlab编程;
第一章 MATLAB语言概述 一、MATLAB产生的历史背景 Cleve Moler is chairman and chief scientist at The MathWorks. Moler was a professor of math and computer science for almost 20 years at the University of Michigan, Stanford University and the University of New Mexico. 在70年代中期,Cleve Moler博士和其同事在美国国家科学基金的资助下开发了调用EISPACK和LINPACK的FORTRAN子程序库.EISPACK是特征值求解的FORTRAN程序库,LINPACK是解线性方程的程序库.在当时,这两个程序库代表矩阵运算的最高水平. Cleve Moler 博士
一、MATLAB产生的历史背景 1983年春天,Cleve Moler到Standford大学讲学,MATLAB深深地吸引了工程师John Little。John Little敏锐地觉察到MATLAB在工程领域的广阔前景,同年,他和Cleve Moler,Steve Bangert一起,用C语言开发了第二代专业版。这一代的MATLAB语言同时具备了数值计算和数据图示化的功能 。 Jack Little is president, CEO, and a co-founder of The MathWorks, Inc. He was a co-author and principal architect of early versions of the company's flagship MATLAB product as well as the Signal Processing Toolbox and the Control Systems Toolbox. Jack Little CEO / Founder
MATLAB的第一个商业化的版本是1984年推出的是3.0的DOS版本MATLAB的第一个商业化的版本是1984年推出的是3.0的DOS版本 • 1992年MathWorks 公司于推出了4.0版本, • 1994年的4.2版本扩充了4.0版本的功能,尤其在图形界面设计方面更提供了新的方法。 • 1997年推出的5.0版允许了更多的数据结构,如单元数据、多维矩阵、对象与类等,使其成为一种更方便编程的语言。 • 1999年推出的 MATLAB 5.3版在很多方面又进一步改进了 MATLAB 语言的功能。
2000年10月底推出了其全新的 MATLAB 6.0正式版(Release 12),在核心数值算法、界面设计、外部接口、应用桌面等诸多方面有了极大的改进。 • 2002年6月发布了其全新的 MATLAB 6.5正式版(Release 13) • 2004年5月推出Matlab7.0
二、MATLAB的语言特点 • 语言简洁紧凑,使用方便灵活,库函数极其丰富; • 运算符丰富; • 兼聚结构化与面向对象编程的特性; • 程序设计自由度大; • 良好的程序可移植性; • 强大的图形功能; • 功能性工具箱和学科性工具箱; • 源程序的开放性。
线性方程组求解 当D=|A|≠0,方程组有解,可用Cramer法则求解。
线性方程组求解 N阶行列式的计算需要n!次乘法,求解n阶线性方程组,共需要做(n+1)!次乘法。如n=20,则,需做: 21!=5.10909×1019 16200年!
线性方程组求解 数值求解方法: • 直接法 Gauss消去法、Gauss-Jordan消去法、矩阵分解法等。 • 迭代法 Jacobi迭代法、Gauss-Seidel迭代法和超松弛迭代法等。
线性方程组求解 Matlab求解过程:
数据统计与处理 一个工厂生产三种橄榄球用品 : 防护帽、 垫肩、臀垫。需要不同数量的:硬塑料 、 泡沫塑料 尼龙线 、 劳动力。 为监控生产,管理者对它们之间的关系十分关心。为把握这些量的关系,列出下面的表格
管理者接到四份订单如上表所示。 • 问应该如何计算每份订单所需的原材料,以便组织生产? 输入下面Matlab指令 A=[4 2 3;1 3 2;1 3 3;3 2 2]; B=[35 20 60 45;10 15 50 40; …20 12 45 20]; C=A*B C = 220 146 475 320 105 89 300 205 125 101 345 225 165 114 370 255
考虑一个实际编程例子 如何编写一个能求出两个矩阵相乘的计算机通用子程序?
是否正确? 错误,未考虑其一为标量 加入标量判定,是否就是通用程序了? 错误,考虑其一或二者为复数矩阵 MATLAB 实现:C=A*B
例、用简短命令计算并绘制在0x6范围内的sin(2x)、sinx2、sin2x。例、用简短命令计算并绘制在0x6范围内的sin(2x)、sinx2、sin2x。 x=linspace(0,6) y1=sin(2*x),y2=sin(x.^2),y3=(sin(x)).^2; plot(x,y1,x, y2,x, y3)
matlab工具箱 MATLAB包含两个部分:核心部分和各种可选的工具箱。 核心部分中有数百个核心内部函数。 工具箱又分为两类:功能性工具箱和学科性工具箱。 功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。功能性工具箱可用于多种学科。 学科性工具箱是专业的,如(control、signal proceessing 、commumnication) toolbox等。这些工具箱都是由该领域内学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序。 • MATLAB主工具箱 • 符号数学工具箱 • SIMULINK仿真工具箱 • 控制系统工具箱 • 信号处理工具箱 • 图象处理工具箱 • 通讯工具箱 • 系统辨识工具箱 • 神经元网络工具箱 • 金融工具箱
菜单 Matlab 界面与初步操作 快捷工具栏 工作目录选择栏 workspace 指令窗口
Command window运行入门 • 最简单的计算器使用法; • 数值、变量和表达式; • 指令行中的标点符号; • 计算结果的图形表示;
求 的运算结果。 指令输入提示符 >> (12+2*(7-4))/3^2 ans = 2 >> Answer的缩写
简单矩阵的输入步骤: >> A=[1,2,3;4,5,6;7,8,9] A = 1 2 3 4 5 6 7 8 9 >>
指令续行输入 >> S=1-1/2+1/3-1/4+... 1/5-1/6+1/7-1/8 S = 0.6345 >> 续行符号
数值、变量和表达式 大小写敏感; 首字母为英文 (少于63个字符); 变量名不包含空格、标点; • 数值的记述; • 变量命名规则; • Matlab默认的预定义变量; • 运算符和表达式; • 复数和复数矩阵; Matlab采用习惯的十进制表示: -99 0.001 1.3e-3 4.5e33 数值范围:10e-308~10e308
1 0.5 0 -0.5 -1 0 5 10 15 • 画出衰减振荡曲线 及其它的包络线 。的取值范围是 。 t=0:pi/50:4*pi; y0=exp(-t/3); y=exp(-t/3).*sin(3*t); plot(t,y,'-r',t,y0,':b',t,-y0,':b') grid
画出 所表示的三维曲面 ,的取值范围 是 [-8,8] clear;x=-8:0.5:8; y=x'; X=ones(size(y))*x; Y=y*ones(size(x)); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; surf(X,Y,Z); colormap(cool) xlabel('x'),ylabel('y'),zlabel('z')