Matlab常见语法错误

上传人:206****923 文档编号:37504287 上传时间:2018-04-17 格式:DOCX 页数:22 大小:76.15KB
返回 下载 相关 举报
Matlab常见语法错误_第1页
第1页 / 共22页
Matlab常见语法错误_第2页
第2页 / 共22页
Matlab常见语法错误_第3页
第3页 / 共22页
Matlab常见语法错误_第4页
第4页 / 共22页
Matlab常见语法错误_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《Matlab常见语法错误》由会员分享,可在线阅读,更多相关《Matlab常见语法错误(22页珍藏版)》请在金锄头文库上搜索。

1、Matlab 常见语法错误常见语法错误Subscript indices must either be real positive integers or logicals中文解释:中文解释:下标索引必须是正整数类型或者逻辑类型出错原因:出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要 么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始,这与 C 等编程语言的习惯不一样。解决办法:解决办法:自己调试一下程序,把下标为 0 或者负数的地方修正。关于矩阵的各种访问方 式。举例:举例: 【错误代码】: 1. for s = 0:0.2:2

2、 2. a(s) = 4 * s - 1; 3. end复制代码 【正确代码】: 1. 2. for s = 1:10 3. a(s) = 4 * s - 1; 4. end复制代码当然,这样的赋值使用循环是低效的,因此不提倡Undefined function or variable “a“中文解释:中文解释:函数或变量 a 没有定义出错原因及解决办法:出错原因及解决办法:1. 如果 a 是变量,则参见 原创写给学习 matlab 的新手们 一贴中技巧 6 后半部分 2. 如果 a 是函数,则这是因为 matlab 在所有已添加的路径中都无法找到该函数对应的 m 文件而导致的,对此,把该 m

3、 文件移动到当前路径下再运行便可。(注:何谓“所有已添 加的路径”在命令窗口中输入 pathtool 可以查看;何谓“当前路径”在命令窗 口中输入 pwd 可以查看)举例:举例: myPlus.m: 1. function d = myPlus(a,b) 2. d = a + b;复制代码 【错误调用】: 命令窗口: 1. z = myPlus(a,b)复制代码 【正确调用】: 命令窗口: 1. x = 2; 2. y = 5; 3. z = myPlus(x,y)复制代码Input argument “x“ is undefined中文解释:中文解释:输入变量 x 没有定义出错原因及解决方法

4、:出错原因及解决方法:参见 原创写给学习 matlab 的新手们 一贴中技巧 6举例:举例: 1. function y = myTest(x) 2. y = x * 2;复制代码 【错误调用】: 直接在 m 文件编辑窗口运行程序,或者命令窗口: 1. a = myTest;复制代码 【正确调用】: 1. b = 4; 2. a = myText(b);复制代码Matrix dimensions must agreeInner matrix dimensions must agree中文解释:中文解释:矩阵的维数必须一致出错原因:出错原因:这是由于运算符(= + - / * 等)两边的运算对象

5、维数不匹配造成的,典型的出 错原因是错用了矩阵运算符。matlab 通过“.”来区分矩阵运算和元素运算,对此可以参 阅:原创写给学习 matlab 的新手们 一贴中技巧 1解决办法:解决办法:自己调试一下程序,保证运算符两边的运算对象维数一致举例:举例: 【错误代码】: 1. b = 1,2; 2. a = -1,1; 3. c = a*b;复制代码 【正确代码】: 1. 2. b = 1,2; 3. a = -1,1; 4. c = a.*b;复制代码Attempt to execute SCRIPT conv as a function出错原因及解决办法:出错原因及解决办法:参见 原创写给

6、学习 matlab 的新手们 一贴中技巧 2如果经过上述检测后仍然出现错误,则请把如果经过上述检测后仍然出现错误,则请把 m 文件的路径设置为常规的试试,即不使用文件的路径设置为常规的试试,即不使用 中文的路径、不使用数字作为中文的路径、不使用数字作为 m 文件名的开头等等文件名的开头等等Function definitions are not permitted at the prompt or in scripts中文解释:中文解释:不能在命令窗口或者脚本文件中定义函数出错原因:出错原因:一旦在命令窗口写 function c = myPlus(a,b),此错误就会出现,因为函数只能定 义

7、在 m 文件中。关于脚本文件和 m 文件的区别请查阅 matlab 基础书。简言之: 1) 如果你写成 function 的形式,那么必须写在 m 文件中,且以 function 开头(即 function 语句前不能包含其他语句,所有语句必须放在 function 中,当然,function 的定 义可以有多个,各 function 之间是并列关系,不能嵌套) ; 2) 如果你写成脚本的形式,则既可以写在命令窗口中,也可以写在 m 文件中,但两者均 不能包含 function 语句(即不能进行函数的定义)解决办法:解决办法:新建一个 m 文件,然后再进行函数的定义1. X must have

8、 one or two columns2. Vectors must be the same lengths中文解释:中文解释: 1. X 必须是 1 或者 2 列 2. 向量长度必须一致出错原因:出错原因: 1. 实际输入不满足该条件。至于如何判断矩阵的行、列,请参阅高等代数或者 matlab 的 基础书籍 2. 输入的两个(或几个)变量长度不满足该条件。例如 plot 函数的前两个输入变量,如 果一个是 1*2,另一个是 1*3,则会出错解决方法:解决方法:都需要自己调试一下 1. 把 X 的维数改为 1 或者 2 列 2. 按照函数的语法要求把向量的长度设置为一样举例:举例: 【错误代码

9、】: 1. a = -1,-2,-3; 2. b = 1,2; 3. plot(a,b);复制代码 【正确代码】: 1. 2. a = -1,-2; 3. b = 1,2; 4. plot(a,b);复制代码One or more output arguments not assigned during call to .中文解释:中文解释:在调用.函数过程中,一个或多个输出变量没有被赋值出错原因:出错原因:函数如果带有输出变量,则每个输出在返回的时候都必须被赋值。容易出现这 个错误的两个地方是: 1) 在部分条件判断语句(如 if )中没有考虑到输出变量的返回值。例子: 多输入多输出 报错

10、2) 在循环迭代过程中部分变量的维数发生了变化。例子:请几位版主看看这个程序什么错 误解决办法:解决办法:调试程序,仔细查看函数返回时各输出变量的值。更好的方法是:在条件判断 或者执行循环之前对所使用的变量赋初值? Error using = mpowerMatrix must be square中文解释:中文解释:错误使用 mpwoer 函数,要求矩阵必须是方阵错误原因:错误原因:在使用向量乘法运算的时候,没有用点乘。解决办法:解决办法:在涉及向量乘法的语句中用.*代替*,更多的请参考本帖 5 楼的描述Explicit integral could not be found.中文解释:中文解

11、释:显式解没有找到出错原因:出错原因:并非每个函数的积分都有显式解,这是由于原函数没有解析结果而给出的警告解决办法:解决办法:改用数值积分(quad、quadl 等)即可Index exceeds matrix dimensions.Attempted to access b(3,2); index out of bounds because size(b)=2,2.中文解释中文解释:索引超出矩阵的范围出错原因:出错原因:在引用矩阵元素的时候,索引值超出矩阵应有的范围解决办法:解决办法:检查所定义数组的维数,和引用的范围。举例:举例: 【错误代码】: 1. b = zeros(2,2); 2.

12、 a = b(3,2);复制代码 【正确代码】: 1. 2. b = zeros(2,2); 3. a = b(1,2);复制代码In an assignment A(I) = B, the number of elements in B and I must be the same中文解释:中文解释:在赋值语句 A(I) = B 中,B 和 I 的元素个数必须相同出错原因:出错原因:I 和 B 的维数、大小不一样。这正如“把 5 个水果放到 6 个篮子”、或者 “把 6 个水果放到 5 个篮子”,均无法实现解决办法:解决办法:自己设置断点调试一下,看看 I 和 B 的维数、大小是否相同,不同

13、的话就要 修改成两者一致举例:举例: 【错误代码】: 1. b = 1,2; 2. s(1) = b;复制代码 【正确代码】: 1. 2. b = 1,2; 3. for i = 1:2 4. s(i) = b(i); 5. end复制代码 当然,这样的赋值使用循环是低效的,因此不提倡To RESHAPE the number of elements must not change中文解释:中文解释:矩阵变换时,变换前和变换后的总元素不能改变出错原因:出错原因:变换时语句使用不恰当。例如,变换前是 2,3 的 6 个元素的矩阵,变换后可 以是3,2、1,6的 6 元素矩阵,但不能是2,4的 8

14、 元素矩阵解决办法:解决办法:自己设置断点调试一下,看看变换前后的矩阵大小是否相同,不同的话就要修 改成两者一致举例:(出错原因中已提及)举例:(出错原因中已提及)原创原创写给学习写给学习 matlab 的新手们的新手们本人接触 matlab 已经有 5 年多的时间了,一直想写点东西,但是之前不知道放在哪里才能 发挥它的最大作用,直到几天前碰上了这个论坛(有点像诸葛亮遇见姜维,哈哈)。废话不说,我想借贵论坛宝地,写一些经验给使用 matlab 的新手们,当然了,老大们也可 以看看,不嫌弃我写得粗糙的话还可以指点一下,先谢过了首先我想说的是,matlab 跟其他语言不一样(我用的比较多的编程语言

15、,除了 matlab 就 应该是 c 或 c了,VB 和 Delphi 也接触过,我想版面(matlab 版)大部分人也差不多), 如果你抱着“把其他语言的思想运用在 matlab 里面”的话,那么我想,即使程序运行不出 错,也很难把握 matlab 的精髓,也就很难发挥 matlab 的作用了。所以,如果你是希望掌 握一门语言、一个工具,使它更有效为你服务的话,那么,希望本文对你有所帮助,请精 读;如果你是希望 matlab 作为 VC 的附属品,即你不想在 matlab 上面花太多功夫,只纯粹 想用 matlab 来完成 VC 做不了或很难做成的任务的话,那么,本文你也应该至少浏览一下。浏

16、览浏览 Matlab 是一个基于矩阵运算的软件,这恐怕是众所周知的事情了,但是,真正在运用的时 候(就是在编程的时候),许多人(特别是初学者)往往没有注意到这个问题,因此,for 循环(包括 while 循环)满天飞.这不仅是暴殄天物(没有发挥 matlab 所长), 还浪费了你宝贵的时间。对此,版友 MVH 在他的“MATLAB 小技巧”一文中也有所涉及,雷 同的东西我也就不重复了,matlab 的“帮助”里面也有相关的指示。我这里想说的一点是, 初学者往往在初始化矩阵的时候注意到这个问题,懂得了使用矩阵而不是循环来赋值,但 是,在其他环节上,就很容易疏忽,或者说,仍然没有摆脱 C的思想。举个例子吧, 下面的代码是我的一个师弟写的,我想他接触 matlab 也有 2、3 年时间了(在此说明一下, 接触 2、3 年并不是表示每天都会跟 matlab 打交道,我本人也不是,只是在一年

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号