matlab常见错误

合集下载

掌握Matlab技术的常见报错及解决方法

掌握Matlab技术的常见报错及解决方法

掌握Matlab技术的常见报错及解决方法Matlab是一种广泛应用于科学计算和工程领域的高级编程语言与环境。

无论是初学者还是有经验的用户,都可能在使用Matlab时遇到各种各样的错误。

本文将介绍一些常见的Matlab错误,并提供相应的解决方法,帮助读者更好地掌握Matlab技术。

一、语法错误在编写Matlab程序时,常常会因为一些错误的语法而导致程序无法运行或者运行出错。

这类错误一般是由于拼写错误、括号不匹配、运算符错位等造成的。

为了避免这类错误,可以在编写程序的过程中注意以下几点:1. 拼写检查:Matlab自带了拼写检查功能,可以在编辑器中右键单击并选择"拼写检查",及时发现并纠正拼写错误。

2. 括号匹配:在编写Matlab程序时,经常使用括号来分组或者调用函数。

在使用括号时,要确保左右括号的数量和位置是匹配的,可以使用自动缩进功能和括号匹配提示来辅助。

3. 运算符使用:Matlab中有多种运算符,如加法运算符"+"、减法运算符"-"、乘法运算符"*"等。

要注意运算符的使用规则,确保正确地使用运算符。

若出现语法错误,Matlab会给出相应的错误提示信息,提示具体错误的位置和可能的原因。

根据提示信息进行逐步调试和修改,可以帮助解决语法错误。

二、矩阵尺寸不匹配错误在Matlab中,矩阵是一种重要的数据结构,常常会涉及到矩阵运算和操作。

当进行矩阵运算时,尺寸不匹配的错误很常见。

矩阵尺寸不匹配的原因可能是因为矩阵的行数和列数不一致,或者两个矩阵的尺寸无法进行对应运算等。

解决矩阵尺寸不匹配错误的方法主要有以下几种:1. 使用转置操作:如果两个矩阵的行数和列数无法对应运算,可以考虑对其中一个矩阵进行转置操作。

转置后,两个矩阵的行数和列数就可以对应运算了。

2. 使用reshape函数:reshape函数可以改变矩阵的尺寸,将一个矩阵改变为指定的行数和列数。

Matlab中常见编程错误及解决方法

Matlab中常见编程错误及解决方法

Matlab中常见编程错误及解决方法引言Matlab是一种非常强大和流行的数值计算软件,它被广泛应用于工程学、科学研究和数据分析。

然而,正如其他编程语言一样,Matlab编程也可能出现各种错误。

本文将介绍Matlab中常见的编程错误,并提供相应的解决方法,帮助读者更好地应对这些问题。

一、矩阵维度不匹配在Matlab中,矩阵维度不匹配是一个常见的错误。

当执行矩阵运算、矩阵相乘或索引时,如果参与运算的矩阵尺寸不一致,就会导致错误的发生。

解决方法:1. 矩阵维度检查:在编写代码时,应该仔细检查所有参与运算的矩阵的维度,确保它们匹配。

可以使用`size`函数和`length`函数来获取矩阵的维度信息,然后进行比较。

2. 矩阵转置:当两个矩阵的维度不匹配时,可以尝试对其中一个矩阵进行转置,以满足维度要求。

3. 利用矩阵运算函数:Matlab提供了许多矩阵运算函数,如`dot`、`cross`、`kron`等,使用这些函数可以避免手动编写循环进行元素级别的计算,从而减少矩阵维度不匹配的错误。

二、错误的变量命名在Matlab编程中,变量的命名是一项非常重要的任务。

如果变量命名不当,可能会导致程序逻辑错误或与其他变量冲突。

解决方法:1. 使用有意义的变量名:为了便于代码的阅读和理解,应该使用具有描述性的变量名。

变量名应该能够清晰地表达其含义和作用。

2. 避免使用Matlab内置关键字作为变量名:Matlab有一些内置的关键字,如`if`、`for`、`while`等。

应该避免将这些关键字用作变量名,以免产生错误。

3. 维护良好的命名习惯:养成良好的命名习惯是减少变量命名错误的关键。

可以使用驼峰命名法或下划线分隔符来提高变量名的可读性。

三、下标越界错误在Matlab中,下标越界是一个常见的编程错误。

例如,当访问数组、矩阵或字符串中的元素时,如果使用了错误的下标范围,Matlab会抛出一个下标越界错误。

解决方法:1. 校验下标范围:在编写代码时,应该谨慎检查所有涉及下标的操作,确保它们处于正确的范围内。

matlab命令大全及常见错误

matlab命令大全及常见错误

Matlab命令汇总一、常用对象操作:除了一般windows窗口的常用功能键外。

1、!dir 可以查看当前工作目录的文件。

!dir& 可以在dos状态下查看。

2、who 可以查看当前工作空间变量名,whos 可以查看变量名细节。

3、功能键:功能键快捷键说明方向上键Ctrl+P 返回前一行输入方向下键Ctrl+N 返回下一行输入方向左键Ctrl+B 光标向后移一个字符方向右键Ctrl+F 光标向前移一个字符Ctrl+方向右键Ctrl+R 光标向右移一个字符Ctrl+方向左键Ctrl+L 光标向左移一个字符home Ctrl+A 光标移到行首End Ctrl+E 光标移到行尾Esc Ctrl+U 清除一行Del Ctrl+D 清除光标所在的字符Backspace Ctrl+H 删除光标前一个字符Ctrl+K 删除到行尾Ctrl+C 中断正在执行的命令4、clc可以命令窗口显示的内容,但并不清除工作空间。

二、函数及运算1、运算符:+:加,-:减,*:乘,/:除,\:左除^:幂,‘:复数的共轭转置,():制定运算顺序。

2、常用函数表:sin( ) 正弦(变量为弧度)Cot( ) 余切(变量为弧度)sind( ) 正弦(变量为度数)Cotd( ) 余切(变量为度数)asin( ) 反正弦(返回弧度)acot( ) 反余切(返回弧度)Asind( ) 反正弦(返回度数)acotd( ) 反余切(返回度数)cos( ) 余弦(变量为弧度)exp( ) 指数cosd( ) 余弦(变量为度数)log( ) 对数acos( ) 余正弦(返回弧度)log10( ) 以10为底对数acosd( ) 余正弦(返回度数)sqrt( ) 开方tan( ) 正切(变量为弧度)realsqrt( ) 返回非负根tand( ) 正切(变量为度数)abs( ) 取绝对值atan( ) 反正切(返回弧度)angle( ) 返回复数的相位角atand( ) 反正切(返回度数)mod(x,y) 返回x/y的余数sum( ) 向量元素求和3、其余函数可以用help elfun和help specfun命令获得。

MATLAB调试与错误处理技巧

MATLAB调试与错误处理技巧

MATLAB调试与错误处理技巧导语:MATLAB是一款功能强大的科学计算软件,广泛应用于各个学科领域。

在使用MATLAB编写程序时,难免会遇到各种错误和bug。

本文将介绍一些常见的MATLAB调试技巧和错误处理方法,帮助读者更加高效地解决问题。

一、错误分类与调试技巧1. 语法错误:在编写MATLAB代码的过程中,很容易出现语法错误。

这些错误可能由于拼写错误、括号不匹配、运算符错误等引起。

一种常见的调试方法是认真查看错误提示信息,并逐行检查代码中可能存在问题的地方。

有时候,手动注释掉一些代码也能帮助找到错误所在。

2. 运行时错误:当程序运行至某个语句时出现错误,我们称之为运行时错误。

常见的运行时错误包括零除错误、数组越界错误等。

为了快速定位和解决这类错误,我们可以利用MATLAB提供的调试工具,如断点调试功能和变量追踪功能。

通过设置断点,在程序执行到指定语句时暂停,我们可以查看和修改变量的值,进一步分析错误产生的原因,从而进行修复。

3. 逻辑错误:逻辑错误是指程序在运行过程中逻辑错误的结果。

这类错误比较隐蔽,需要通过与预期结果的对比来发现。

为了避免逻辑错误,我们可以使用一些技巧,如利用MATLAB提供的assert函数进行断言,编写详细的注释和说明,以及对关键变量进行可视化输出等。

此外,运用单元测试和边界测试的方法也能够有效检测逻辑错误。

4. 内存错误:在大规模数据处理和复杂计算中,内存错误是常见的问题。

过多的变量和占用过大的内存在运行过程中可能导致程序崩溃或内存耗尽。

为了解决内存错误,我们可以通过清理不需要的变量和释放占用内存的资源来释放内存空间。

此外,使用MATLAB提供的分段计算方法,将大型任务拆分为多个小任务,也可有效减少对内存的消耗。

二、错误处理方法1. 异常处理:异常是指在程序运行过程中发生了不可预期的错误。

MATLAB提供了异常处理机制来处理这类错误。

通过在代码中使用try-catch结构,我们可以捕捉到可能出现的异常,并进行相应的处理。

Matlab中常见数据处理中的错误与解决方法

Matlab中常见数据处理中的错误与解决方法

Matlab中常见数据处理中的错误与解决方法在科学研究和工程领域中,数据处理是一个非常重要的环节。

Matlab作为一种常用的数学软件工具,被广泛应用于数据处理和分析。

然而,由于操作失误或者对Matlab不够熟悉,常常出现一些常见的错误。

本文将介绍一些常见的错误,并提供相应的解决方法,以帮助读者更加高效地使用Matlab进行数据处理。

错误一:维度不匹配在进行矩阵运算或者数据处理时,经常会遇到维度不匹配的错误。

这可能是因为输入数据的维度不一致,或者在操作过程中没有按照预期进行维度变换。

解决这个问题的方法是使用Matlab的函数reshape(),可以根据需要将数据进行维度变换,使其匹配。

错误二:数组越界在处理数组或矩阵时,经常会出现数组越界的错误。

这通常是由于索引值超过了数据的有效范围所致。

解决这个问题的方法是在进行索引操作前,先检查索引值是否超过了数组的范围,可以使用函数size()和length()获取数组的大小,然后进行合理的判断和处理。

错误三:代码逻辑错误在编写Matlab程序时,常常会遇到代码逻辑错误。

这可能是由于错误的条件判断、错误的循环控制或者错误的变量使用所致。

解决这个问题的方法是仔细检查代码的逻辑,确保条件判断和循环控制的正确性,同时进行适当的变量命名和使用,使程序的逻辑结构清晰可读。

错误四:数据格式转换问题在进行数据处理时,可能需要进行不同格式的数据之间的转换,比如将字符串转换为数值型数据。

错误的数据格式转换会导致程序出错或者得到错误的结果。

解决这个问题的方法是使用Matlab提供的函数str2num()、num2str()等,根据需要进行正确的格式转换,避免数据类型不匹配导致的错误。

错误五:数值精度问题在进行数值计算时,由于浮点数的精度限制,可能会出现数值计算结果不准确的问题。

例如,两个浮点数相等时会出现不相等的情况。

解决这个问题的方法是使用Matlab提供的函数eps()进行浮点数的比较,或者采用更加精确的数值计算方法,如符号计算工具箱。

Matlab常见错误

Matlab常见错误

Matlab常见错误Subscript indices must either be real positive integers or logicals中文解释:下标索引必须是正整数类型或者逻辑类型出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从0 开始,要么出现了负数。

注:matlab 的语法规定矩阵的索引从 1 开始,这与 C 等编程语言的习惯不一样。

解决办法:自己调试一下程序,把下标为0 或者负数的地方修正。

关于矩阵的各种访问方式。

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

(注:何谓“所有已添加的路径”——在命令窗口中输入 pathtool 可以查看;何谓“当前路径”——在命令窗口中输入 pwd 可以查看)举例:myPlus.m:1.function d = myPlus(a,b)2. d = a + b;复制代码【错误调用】:命令窗口:1.>> z = myPlus(a,b)复制代码【正确调用】:命令窗口:2.>> y = 5;3.>> z = myPlus(x,y)复制代码Input argument "x" is undefined中文解释:输入变量 x 没有定义出错原因及解决方法:参见[原创]写给学习 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中文解释:矩阵的维数必须一致出错原因:这是由于运算符(= + - / * 等)两边的运算对象维数不匹配造成的,典型的出错原因是错用了矩阵运算符。

MATLAB常见错误

MATLAB常见错误

MATLAB常见错误下面是编译错误代码中英对照错误代码及错误信息错误释义error1:Outofmemory内存溢出error2:Identifierexpected缺标识符error3:Unknownidentifier未定义的标识符error4:Duplicateidentifier重复定义的标识符error5:Syntaxerror语法错误error6:Errorinrealconstant实型常量错误error7:Errorinintegerconstant整型常量错误error8:Stringconstantexceedsline字符串常量超过一行error10:Unexpectedendoffile文件非正常结束error11:Linetoolong行太长error12:Typeidentifierexpected未定义的类型标识符error13:Toomanyopenfiles打开文件太多error14:Invalidfilename无效的文件名error15:Filenotfound文件未找到error16:Diskfull磁盘满error17:Invalidcompilerdirective无效的编译命令error18:Toomanyfiles文件太多error19:Undefinedtypeinpointerdef指针定义中未定义类型error20:Variableidentifierexpected缺变量标识符error21:Errorintype类型错误error22:Structuretoolarge结构类型太长error23:Setbasetypeoutofrange集合基类型越界error24:Filecomponentsmaynotbefilesorobjectsfile分量不能是文件或对象error25:Invalidstringlength无效的字符串长度error26:Typemismatch类型不匹配error27:error27:Invalidsubrangebasetype无效的子界基类型error28:Lowerboundgreaterthanupperbound下界超过上界error29:Ordinaltypeexpected缺有序类型error30:Integerconstantexpected缺整型常量error31:Constantexpected缺常量error32:Integerorrealconstantexpected缺整型或实型常量error33:PointerTypeidentifierexpected缺指针类型标识符error34:Invalidfunctionresulttype无效的函数结果类型error35:Labelidentifierexpected缺标号标识符error36:BEGINexpected缺BEGINerror37:ENDexpected缺ENDerror38:Integerexpressionexpected缺整型表达式error39:Ordinalexpressionexpected缺有序类型表达式error40:Booleanexpressionexpected缺布尔表达式error41:Operandtypesdonotmatch操作数类型不匹配error42:Errorinexpression表达式错误error43:Illegalassignment非法赋值error44:Fieldidentifierexpected缺域标识符error45:Objectfiletoolarge目标文件太大error46:Undefinedexternal未定义的外部过程与函数error47:Invalidobjectfilerecord无效的OBJ文件格式error48:Codesegmenttoolarge代码段太长error49:Datasegmenttoolarge数据段太长error50:DOexpected缺DOerror51:InvalidPUBLICdefinition无效的PUBLIC定义error52:InvalidEXTRNdefinition无效的EXTRN定义error53:ToomanyEXTRNdefinitions太多的EXTRN定义error54:OFexpected缺OFerror55:INTERFACEexpected缺INTERFACEerror56:Invalidrelocatablereference无效的可重定位引用error57:THENexpected缺THENerror58:TOorDOWNTOexpected缺TO或DOWNTOerror59:Undefinedforward提前引用未经定义的说明error61:Invalidtypecast无效的类型转换error62:Divisionbyzero被零除error63:Invalidfiletype无效的文件类型error64:Cannotreadorwritevariablesofthistype不能读写此类型变量error65:Pointervariableexpected缺指针类型变量error66:Stringvariableexpected缺字符串变量error67:Stringexpressionexpected缺字符串表达式error68:Circularunitreference单元UNIT部件循环引用error69:Unitnamemismatch单元名不匹配error70:Unitversionmismatch单元版本不匹配error71:Internalstackoverflow内部堆栈溢出error72:Unitfileformaterror单元文件格式错误error73:IMPLEMENTATIONexpected缺IMPLEMENTATION error74:Constantandcasetypesdonotmatch常量和CASE类型不匹配error75:Recordorobjectvariableexpected缺记录或对象变量error76:Constantoutofrange常量越界error77:Filevariableexpected缺文件变量error78:Pointerexpressionexpected缺指针表达式error79:Integerorrealexpressionexpected缺整型或实型表达式error80:Labelnotwithincurrentblock标号不在当前块内error81:Labelalreadydefined标号已定义error82:Undefinedlabelinprecedingstatementpart在前面未定义标号error83:Invalid@argument无效的@参数error84:UNIT expected缺UNITerror85:";"expected缺“;”error86:":"expected缺“:”error87:","expected缺“,”error88:"("expected缺“(”error89:")"expected缺“)”error90:"="expected缺“=”error91:":="expected缺“:=”error92:"["or"(."Expected缺“[”或“(.”error93:"]"or".)"expected缺“〕”或“.)”error94:"."expected缺“.”error95:".."expected缺“..”error96:Toomanyvariables变量太多error97:InvalidFORcontrolvariable无效的FOR循环控制变量error98:Integervariableexpected缺整型变量error99:Filesandproceduretypesarenotallowedhere该处不允许文件和过程类型error100:Stringlengthmismatch字符串长度不匹配error101:Invalidorderingoffields无效域顺序error102:Stringconstantexpected缺字符串常量error103:Integerorrealvariableexpected缺整型或实型变量error104:Ordinalvariableexpected缺有序类型变量error105:INLINEerrorINLINE错误error106:Characterexpressionexpected缺字符表达式error107:Toomanyrelocationitems重定位项太多error108:Overflowinarithmeticoperation算术运算溢出error112:CASEconstantoutofrangeCASE常量越界error113:Errorinstatement表达式错误error114:Cannotcallaninterruptprocedure不能调用中断过程error116:Mustbein8087modetocompilethis必须在8087模式编译error117:Targetaddressnotfound找不到目标地址error118:Includefilesarenotallowedhere该处不允许INCLUDE文件error119:Noinheritedmethodsareaccessiblehere该处继承方法不可访问error121:Invalidqualifier无效的限定符error122:Invalidvariablereference无效的变量引用error123:Toomanysymbols符号太多error124:Statementparttoolarge语句体太长error126:Filesmustbevarparameters文件必须是变量形参error127:Toomanyconditionalsymbols条件符号太多error128:Misplacedconditionaldirective条件指令错位error129:ENDIFdirectivemissing缺ENDIF指令error130:Errorininitialconditionaldefines初始条件定义错误error131:Headerdoesnotmatchpreviousdefinition和前面定义的过程或函数不匹配error133:Cannotevaluatethisexpression不能计算该表达式error134:Expressionincorrectlyterminated表达式错误结束error135:Invalidformatspecifier无效格式说明符error136:Invalidindirectreference无效的间接引用error137:Structuredvariablesarenotallowedhere该处不允许结构变量error138:CannotevaluatewithoutSystemunit没有System单元不能计算error139:Cannotaccessthissymbol不能存取符号error140:Invalidfloatingpointoperation无效的符号运算error141:Cannotcompileoverlaystomemory不能编译覆盖模块至内存error142:Pointerorproceduralvariableexpected缺指针或过程变量error143:Invalidprocedureorfunctionreference无效的过程或函数调用error144:Cannotoverlaythisunit不能覆盖该单元error146:Fileaccessdenied不允许文件访问error147:Objecttypeexpected缺对象类型error148:Localobjecttypesarenotallowed不允许局部对象类型error149:VIRTUALexpected缺VIRTUALerror150:Methodidentifierexpected缺方法标识符error151:Virtualconstructorsarenotallowed不允许虚构造函数error152:Constructoridentifierexpected缺构造函数标识符error153:Destructoridentifierexpected缺析构函数标识符error154:Failonlyallowedwithinconstructors只能在构造函数内使用Fail标准过程error155:Invalidcombinationofopcodeandoperands操作数与操作符无效组合error156:Memoryreferenceexpected缺内存引用指针error157:Cannotaddorsubtractrelocatablesymbols不能加减可重定位符号error158:Invalidregistercombination无效寄存器组合error159:286/287instructionsarenotenabled未激活286/287指令error160:Invalidsymbolreference无效符号指针error161:Codegenerationerror代码生成错误error162:ASMexpected缺ASMerror166:Procedureorfunctionidentifierexpected缺过程或函数标识符error167:Cannotexportthissymbol不能输出该符号error168:Duplicateexportname外部文件名重复error169:Executablefileheadertoolarge可执行文件头太长error170:Toomanysegments段太多。

MATLAB中常见错误及解决方法汇总

MATLAB中常见错误及解决方法汇总

MATLAB中常见错误及解决方法汇总MATLAB是一种强大的数值计算和科学计算软件,被广泛应用于工程、科学和数学领域。

然而,在使用MATLAB时,我们常常会遇到一些错误和问题。

本文将汇总一些常见的MATLAB错误,并提供解决方法,帮助读者更好地处理和解决这些问题。

1. 向量维度不匹配错误这是在进行向量运算或矩阵操作时经常遇到的错误。

当出现该错误时,通常是因为参与运算的向量或矩阵的维度不匹配。

解决方法是检查参与运算的向量或矩阵的维度,确保其维度一致才能进行运算。

2. 数组索引越界错误当我们使用索引访问数组的元素时,如果指定的索引值超过了数组的大小范围,就会产生数组索引越界错误。

解决方法是检查索引值,并确保它们在数组大小范围内。

3. 未找到某个函数或变量的错误当我们尝试调用一个不存在的函数或访问一个未定义的变量时,就会产生未找到某个函数或变量的错误。

解决方法是检查函数或变量的名称是否正确拼写,并确保它们存在于当前工作空间或已添加到MATLAB的搜索路径中。

4. 内存不足错误大规模计算或处理复杂数据时,有时会出现内存不足的错误。

解决方法包括:- 减少数据的规模或精度;- 释放已使用的内存空间;- 使用更高配置的计算机或服务器。

5. 文件读写错误在进行文件读写操作时,常常会遇到文件读写错误。

解决方法包括:- 检查文件路径和名称是否正确;- 确保文件具有正确的读写权限;- 关闭已打开的文件或释放文件资源。

6. 函数参数个数不匹配错误在调用函数时,如果提供的参数个数与函数定义的参数个数不匹配,就会产生函数参数个数不匹配错误。

解决方法是检查函数的定义,并确保提供的参数个数和类型与定义一致。

7. 函数或脚本文件未结束错误在编写函数或脚本文件时,如果忘记在文件末尾添加"end"关键字,就会产生函数或脚本文件未结束错误。

解决方法是在文件的适当位置添加"end"关键字,以标识函数或脚本文件的结束。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.Subscript indices must either be real positive integers or logicals 中文解释:下标索引必须是正整数类型或者逻辑类型出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。

注:matlab 的语法规定矩阵的索引从1 开始,这与 C 等编程语言的习惯不一样。

解决办法:自己调试一下程序,把下标为 0 或者负数的地方修正。

2.Undefined function or variable "U"中文解释:函数或变量 U 没有定义.出错原因及解决办法:可能变量名输入错误,仔细检查3.Matrix dimensions must agree中文解释:矩阵的维数必须一致出错原因:这是由于运算符(= + - / * 等)两边的运算对象维数不匹配造成的,典型的出错原因是错用了矩阵运算符。

matlab 通过“.”来区分矩阵运算和元素运算。

解决办法:自己调试一下程序,保证运算符两边的运算对象维数一致。

4.Function definitions are not permitted at the prompt or in scripts 中文解释:不能在命令窗口或者脚本文件中定义函数出错原因:一旦在命令窗口写 function c = myPlus(a,b),此错误就会出现,因为函数只能定义在 m 文件中。

关于脚本文件和 m 文件的区别请查阅 matlab 基础书。

简言之:1) 如果你写成 function 的形式,那么必须写在 m 文件中,且以 function 开头(即 function 语句前不能包含其他语句,所有语句必须放在 function 中,当然,function 的定义可以有多个,各 function 之间是并列关系,不能嵌套);2) 如果你写成脚本的形式,则既可以写在命令窗口中,也可以写在 m 文件中,但两者均不能包含 function 语句(即不能进行函数的定义)解决办法:新建一个 m 文件,然后再进行函数的定义5.One or more output arguments not assigned during call to '...'中文解释:在调用...函数过程中,一个或多个输出变量没有被赋值出错原因:函数如果带有输出变量,则每个输出在返回的时候都必须被赋值。

容易出现这个错误的两个地方是:在部分条件判断语句(如 if )中没有考虑到输出变量的返回值。

在循环迭代过程中部分变量的维数发生了变化。

解决办法:调试程序,仔细查看函数返回时各输出变量的值。

更好的方法是:在条件判断或者执行循环之前对所使用的变量赋初值。

6.??? Index exceeds matrix dimensions.中文解释:索引超出矩阵的范围出错原因:在引用矩阵元素的时候,索引值超出矩阵应有的范围解决办法:检查所定义数组的维数,和引用的范围。

.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 的维数、大小是否相同,不同的话就要修改成两者一致2008-04-25 15:09循环变量由于历史的原因,程序员们总是使用i,j,…为循环变量命名,但是在Matlab中这种习惯可能会导致一些很隐蔽的问题。

因为i,j同时也是Matlab中的虚数单位,如果你给i赋值,就会覆盖掉原来虚数单位的定义,例如:4+i*3ans =4.0000 + 3.0000ifor i=1:10, end4+i*3ans =34在一段很长的程序中很难发现这个错误,因此不要用i,j作循环变量名,除非你确认在代码的作用域内不会和复数打交道;或者使用4+3i这样的复数记法;也可以换用j:for i=1:10, endii =10jans =0 + 1.0000i1ians =0 + 1.0000i4+3ians =4.0000 + 3.0000i循环我经常看到一些Matlab初学者写出带有层层循环的代码,这些代码往往运行得很慢,而且非常难懂。

Matlab提供了大量的命令来避免循环,我的建议是:在确定要写一个针对矩阵操作的2重循环之前,请仔细阅读帮助中的Maximizing MATLAB Performance一节。

里面有很多例子,这里举一个我自己碰到的问题。

要统计数字图像的亮度最大值和最小值,由于数字图像可能是一个二维或三维的矩阵,开始我写出了如下的代码:switch ndims(img)case 2m = max(max(img));case 3m = max(max(max(img)));end后来我对这种做法很不满意,如果有一个8维的矩阵,难道我要写max(max(max(max(max(max(max(max(x))))))))才行?后来我发现无论矩阵是什么维数,实际上max( x(:) )就够了。

符号运算许多Matlab函数(特别是数值计算方面的)可以函数句柄(function handle)或内联对象(inline object)作为参数。

我们以quad函数为例,这个函数使用Simpson 算法求函数的数值积分。

它的一种调用形式是:quad(fun, a, b)其中,fun可以是指向被积函数的函数句柄,或者含有被积函数的内联对象;a 和b分别是被积区间的上、下限。

考虑以下积分:使用函数句柄的方法:% 将下面到"% EOF"的代码保存为f.mfunction y = f(x)y = sin(x) ./ x;% EOFquad(@f, 1, 2)ans =0.6593使用内联对象的方法:quad( inline( 'sin(x)./x' )), 1, 2 )ans =0.6593由于使用内联对象不需要另外建立m文件,所以比较方便,建议使用这种方法。

更加常见的应用是被积函数有不确定的参数,例如:其中参数a,b,K运行时确定,这时,使用函数句柄将显得很麻烦,可以用以下的方法:a = rand;b = rand + 1;K = rand;y = subs('sin(K*x)/x', 'K', sym(K, 'd') )quad( inline(vectorize(char(y))), a, b)y =sin(.79193703742703536185842949635116*x)/xans =0.8188当然,由于a,b,K是随机数,结果是不确定的。

这里有两点需要说明:第一,请注意sym(K, 'd'),如果直接使用subs('sin(K*x)/x, 'K', K)或subs('sin(K*x)/x, 'K', sym(K))的话,高版本的符号工具箱会将K尽可能化为分数,有时这是十分恐怖的,也许会得到:sin(6649179754310225/9007199254740992*x)/x这样的结果。

第二,注意vectorize函数。

sym对象重载的char函数会把数组的乘除(.*, ./, .^)化成矩阵的乘除(*, /, ^),vectorize会将字符串里的*,/,^全化成.*, ./, .^,如果不这样做,quad函数将会出错,这个问题曾经困扰了我很长的时间:quad( inline(char(y)), a, b)??? Index exceeds matrix dimensions.Error in ==> D:\MATLAB6p5\toolbox\matlab\funfun\quad.mOn line 67 ==> if ~isfinite(y(7))隐藏的图形对象属性Matlab的所谓句柄图形(handle graphics)对象的配置是通过许多属性的设置来完成的。

有一些帮助文件中没有提到的确实存在的属性。

figure的Toolbar属性有三个值:'none', 'auto', 'figure'利用这个属性可以把figure变成没有菜单条却有工具栏的样式:figure('Menubar', 'none', 'Toolbar', 'figure')root object的Default属性在我的Malab环境里,Root object有如下的默认值:get(0, 'Default')ans =defaultFigurePosition: [232 258 560 420]defaultTextColor: [0 0 0]defaultAxesXColor: [0 0 0]defaultAxesYColor: [0 0 0]defaultAxesZColor: [0 0 0]defaultPatchFaceColor: [0 0 0]defaultPatchEdgeColor: [0 0 0]defaultLineColor: [0 0 0]defaultFigureInvertHardcopy: 'on'defaultFigureColor: [0.8000 0.8000 0.8000]defaultAxesColor: [1 1 1]defaultAxesColorOrder: [7x3 double]defaultFigureColormap: [64x3 double]defaultSurfaceEdgeColor: [0 0 0]defaultFigurePaperType: 'A4'defaultFigurePaperUnits: 'centimeters'实际上,还有一些默认值不会被显示出来:get(0, 'defaultUicontrolBackgroundColor')get(0, 'defaultUicontrolForegroundColor')get(0, 'defaultUicontrolFontName')get(0, 'defaultUicontrolFontSize')get(0, 'defaultUicontrolFontWeight')get(0, 'defaultUicontrolFontAngle')ans =0.7725 0.7961 0.8118ans =0 0 0ans =MS Sans Serifans =8ans =normalans =normal这些默认值有助于在创建用户界面时遵循操作系统颜色,例如:figure('Color', get(0,'defaultUicontrolBackgroundColor')) system_dependent('getdata')system_dependent('getwinsys')版本使用version函数可以获得Matlab或工具箱的版本:v1 = ver('matlab')v1 =Name: 'MATLAB'Version: '6.5'Release: '(R13)'Date: '20-Jun-2002'v2 = ver('control')v2 =Name: 'Control System Toolbox'Version: '5.2'Release: '(R13)'Date: '28-Jun-2002'如果工具箱不存在或没有安装返回空结构v3 = ver('nonsense')v3 =0x0 struct array with fields:NameVersionReleaseDate可以利用这个函数让自己的程序在不当的Matlab版本上运行时给出比较体面的警告。

相关文档
最新文档