77范文网 - 专业文章范例文档资料分享平台

MatLab编程中文版第二章(4)

来源:网络收集 时间:2020-03-27 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

save命令用于保存当前MATLAB工作区内的数据到一个硬盘文件。这个命令的基形式如下

save filename var1 var2 var3

filename代表你要保存变量的那个文件,var1,var2等是要保存的变量。在默认情况下,这个这个文件的扩展名为‘mat’,我们称之为MAT文件。如果在filename后面无变量,则工作区的所有内容将会被保存。

MATLAB用一种特殊的复杂形式来存储数据,包括了许许多多的细节,例如变量名和变量类型,数组的大小,以及所有变量值。一个在任何一个平台上创建的MAT文件(pc, mac, unix)在另一个平台上都可以应用。它的缺点是MAT文件的存储格式不能被其他程序读取。如果一个数据必须由其他程序所读取,那么必须转化为ASCII码,并将这些数值写到一个以ASCII码为编码的文件中。但是,当以ASCII的形式存储,像变量名和变量类型这样的信息就会丢失,产生的数据结果将会更大。

例如,假设数组x的定义如下 x=[1.23 3.14 6.28; -5.1 7.00 0]; 命令“save x.dat x -ascii”将会创建一个文件x.dat,包括数据如下 1.2300000e+000 3.1400000e+000 6.2800000e+000 -5.1000000e+000 7.0000000e+000 0.0000000e+000 用这种格式定的数据能被其他语言编写的程序或扩展页读取,所以它能帮助MATLAB程序和其他程序之间共享数据。

好的编程习惯

如果数据需要在matlab和其他程序之间交换使用,那么以ASCII格式存储数据。如果只在matlab中使用那么,应以mat文件的形式存储数据。

MATLAB并不关心ASCII码的扩展名是什么?但是,用户最好用它的传统扩展名“dat”。

好的编程习惯

以“dat”的扩展名保存ASCII数据文件,以区别于以“mat”为扩展名的mat文件。

Load命令与save命令相反。它从硬盘文件加载数据到MATLAB当前工作区。这个命令的基本格式为

load filename

filename代表所加载文件的文件名。如果这个文件是mat文件,那么所有被子加载的变量的变量名的变量类型将和原来一样。如果一个变量包含在工作区间窗口,那么这些数据将会被修复。

MATLAB能够加载由其他程序创建的ascii格式的数据文件。它首先检查所要加载的文件是mat文件还是ascii文件。如果在load语句中加入-ascii中,则强制MATLAB把这个文件看作ASCII文件。这个文件的内容将会被转化为一个MATLAB的数组,这个数组名就所要加载的文件名。例如,假设一个名为x.dat的ascii文件包括下列数据: 1.23 3.14 6.28 -5.1 7.00 0 那么“load x.dat”将会在当前工作区创建一个2×3数组x,包含数据值。

测试2.3

本测试提供了一个快速的检查方式,看你是否掌握了2.6和2.7的基本内容。如果你对本测试有疑问,你可以重读2.6和2.7,问你的老师,或和同学们一起讨论。在附录B中可以找到本测试的答案。

1.如何让MATLAB显示一个实数,带有十五个有效的数字,并有指数形式? 2.下列语句的作用是什么?它的输出是什么?

14

(a) radius = input('Enter circle radius:\\n');

area = pi * radius^2;

str = ['The area is ' num2str(area)]; disp(str);

(b) value = int2str(pi); disp(['The value is ' value '!']);

3.下列语句有作用是什么?它的输出是什么?

value = 123.4567e2;

fprintf('value = %e\\n',value); fprintf('value = %f\\n',value); fprintf('value = %g\\n',value); fprintf('value = .4f\\n',value);

2.8 标量运算和数组运算

在MATLAB赋值语句中的计算,它的一般形式如下 variable_name = expression;

赋值语句计算出等号右边表达式的值,然后赋值于等号左边的变量名。注意这个等号并不是传统意义上的等号,它的意义是:存储表达式的值到左边的变量,由于这个原因,等号在这里应叫做赋值号。像

ii = ii + 1;

这样的语句在数学上是毫无意义的,但在MATLAB语言中,它有其固有的意义。 它的意义是:把变量ii加上1之后,再把值存储到变量ii中。

2.8.1 标量运算符

位于赋值号右边的表达式,可以包含标量,数组,括号和数学符号的任一个有效联合运算。两标量间的标准运算符号如表2.5所示。

当我们需要的时侯,我们可以运用括号来控制运算顺序。括号内的表达式优先于括号外的表达式来计算。例如表达式2^((8+2)/5)的计算顺序如下 2 ^ ( ( 8 + 2 ) / 5 ) = 2 ^ ( 10 / 5 ) = 2 ^ 2 = 4 2.8.2 数组运算和矩阵运算

MATLAB在数组运算中提供了两种不同类型的运算,一种是数组运算(array operations),一种是矩阵运算(matrix).数组运算是一种用于元素对元素的运算.也就是说,这个运算是针对

?13???13??06?两数组相对应的运算使用的.例如,a??,那么b?a?b??????.注意两数

?24???21??05?组的行与列必须相同.否则,MATLAB将产生错误.

数组运算可以用于数组与标量的运算.当一个数组和一个标量进行运算时,标量将会和数组中的每一元素进行运算.例如

?12??56?,则a??a?4???? 3478????相对地,矩阵运算则遵守线性代数的一般规则,像矩阵的乘法.在线性代数中,c=a×b的定义如下:

表2.5 两标量间的数学运算符

运算符 代数形式 MATLAB形式 A+B A+B 加号

15

运算符 减号 乘号 除号 指数

n代数形式 A-B A×B ABMATLAB形式 A-B A*B A/B A^B BA c(i,j)??a(i,k)b(k,j)

k?1?12???13???7?6?例如a??,,那么a?b?a????。注意,在矩阵相乘中,a阵???34???1010???21?的列数必须等于b阵的行数。

MATLAB用一个特殊的符号来区分矩阵运算和数组运算。在需要区分两者不同的时侯,把点置于符号前来指示这是一个数组运算(例如,.*)。表2。6给出的是一些常见的数组和矩阵运算。

表2.6常见的数组和矩阵运算

运算 MATLAB形式 注释 A+B 数组加法 数组加法和矩阵加法相同 数组减法 A-B 数组减法和矩阵减法相同 A和B的元素逐个对应相乘.两数组之间必须有相同A.*B 数组乘法 的形,或其中一个是标量. A*B 矩阵乘法 A和B的矩阵乘法.A的列数必须和B的行数相同. A和B的元素逐个对应相除: A./B 数组右除法 A(i,j)/B(i,j)两数组之间必须有相同的形,或其中一个是标量. A和B的元素逐个对应相除: A.\\B 数组左除法 B(i,j)/A(i,j)两数组之间必须有相同的形,或其中一个是标量. A/B 矩阵右除法 矩阵除法,等价于A*inv(B), inv(B)是B的逆阵 A\\B 矩阵左除法 矩阵除法,等价于inv(B)*A, inv(A)是A的逆阵 AB中的元素逐个进行如下运算A(i,j)^B(i,j), A.^B 数组指数运算 A(i,j)/B(i,j)两数组之间必须有相同的形,或其中一个是标量. 初学者往往混淆数组运算和矩阵运算.在一些情况下,两者相互替换会导致非法操作, MATLAB将会报告产生了错误。在另一些情况下,两种运算都是合法的,那么这时MATLAB进行错误的运算,并产生错误的结果。当我们进行方阵运算时,极易产生这样的错误。两个方阵具有相同的大小,两者之间的数组运算和矩阵运算都是合法的,但产生的结果完全不同。在这种情况下,你要万分的小心。

常见编程错误

在你的MATLAB代码中,仔细区分数组运算和矩阵运算。数组乘法和矩阵乘法极易混淆。

例2.1

假设a,b,c和d的定义如下

16

?10???12? a??b???? c?1??21??0分别指出下列表达式的运算结果 (a) a + b (b) a .* c (c) a * b (e) a + c (f) a + d (g) a .* d 答案:

?3??? d?5 ?2?(d) a * c (h) a * d

?02?这是一个数组或矩阵加法:a?b???。

?22???10?(b) 这是一个数组乘法:a.*b???。

01????12?(c) 这是一个矩阵乘法:a*b???。

??25??3?(d) 这是一个矩阵乘法:a*c???。

?8?(e) 操作非法,两数组形不同

?65?(f) 数组与标量的加法:a?d???。

?76??50?(g) 数组乘法:a.*d???。

105???50?(h) 矩阵乘法:a*d???。

?105?矩阵的左除运算有着十分重要意义,我们必须理解它。一个3×3的线性方程组的形式如下

(a)

a11x1?a12x2?a13x3?b1a21x1?a22x2?a23x3?b2 a31x1?a32x2?a33x3?b3 (2.1)

可以写成如下形式

Ax?B

?a11?A?a21???a31a12a22a32 (2.2)

a13??b1??x1??????a23,A?b2和x?x2 ???????a33???b3???x3???12.2式的结果可以用线性代数的知识来解决。结果是

(2.3) x?AB

因为左除运算A\\B等价于inv(A)*B,所以左除运算是解线性方程的好方法。

2.9 运算的优先级

许多的数学运算写入一个表达式是非常平常的事。例如,考虑初速度为0的匀加速运动的位移表达式

distance = 0.5 * accel * time ^ 2

这个表达式有二个乘法运算和一个幂运算。在这样的表达式中,知道运算的先后顺序是十分重要的。如果幂运算先于乘法运算执行,这个表达式等价于

distance = 0.5 * accel * (time ^ 2)

17

如果乘法运算先于幂运算执行,这个表达式等价于 distance = (0.5 * accel * time) ^ 2

这两个式子将产生不同的结果,所以我们必须清楚它们中那个是正确的。

为了使表达的值精确,MATLAB建立了一系列的规则控制运算的层次或顺序。这些规则一般情况下遵循代数的运算法则。数学运算的顺序如表2.7。

表2.7运算的优先级 优先级 运算 1 括号里的内容先运算,从最里面的括号去运算 2 幂运算,从左向右 3 乘除法,从左向右 4 加减法,从左向右 例2.2

变量a,b,c,d初始化如下 a = 3; b = 2; c = 5; d = 3;

计算如下的MATLAB的赋值语句 (a) output = a*b+c*d; (b) output = a*(b+c)*d; (c) output = (a*b)+(c*d); (d) output = a^b^d; (e) output = a^(b^d);

正如我们看到的,运算的顺序对一个代数表达式的最终值产生重大的影响。 将程序中的每个表达式尽量写清楚,这是十分重要的。编写的程序不仅要能够计算出所要求的值的来,在需要的时侯,还要考虑它的可维护性。你应当经常问自己“六个月后我能看得懂我现在编得程序吗?其他的程序员看到我的代码,他能迅速的理解吗?”。如果在你的心中有所疑虑,那就用更多的括号使之更加清晰。

好的编程习惯

在需要的时侯用括号使用表达式更加清晰和易于理解。

如果在一个表达式中用到括号,那么括号必须平衡。也就是说,左括号数与右括号数相等。如果两者数目不相同,那么将会导致错误的产生。这种错误经常在输入过程中发生,当MATLAB编译器在执行这个命令时被发现。例如

(2+4) /2)

在执行时将会出现一个错误。

测试2.4

本测试提供了一个快速的检查方式,看你是否掌握了2.8和2.9的基本内容。如果你对本测试有疑问,你可以重读2.8和2.9,问你的老师,或和同学们一起讨论。在附录B中可以找到本测试的答案。

1.假设abcd的定义如下,计算下面合法运算的结果,如果不合法,指出原因

1??2?0?1??1? a??b?c?d??3 ?????

?12312??????(a) result = a .* c; (b) result = a * [c c]; (b) result = a .* [c c]; (d) result = a + b * c; (e) result = a + b .* c; 2.求矩阵x,已知Ax=B,

18

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库MatLab编程中文版第二章(4)在线全文阅读。

MatLab编程中文版第二章(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/907885.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: