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中,矩阵维度不匹配是一个常见的错误。
当执行矩阵运算、矩阵相乘或索引时,如果参与运算的矩阵尺寸不一致,就会导致错误的发生。
解决方法:1. 矩阵维度检查:在编写代码时,应该仔细检查所有参与运算的矩阵的维度,确保它们匹配。
可以使用`size`函数和`length`函数来获取矩阵的维度信息,然后进行比较。
2. 矩阵转置:当两个矩阵的维度不匹配时,可以尝试对其中一个矩阵进行转置,以满足维度要求。
3. 利用矩阵运算函数:Matlab提供了许多矩阵运算函数,如`dot`、`cross`、`kron`等,使用这些函数可以避免手动编写循环进行元素级别的计算,从而减少矩阵维度不匹配的错误。
二、错误的变量命名在Matlab编程中,变量的命名是一项非常重要的任务。
如果变量命名不当,可能会导致程序逻辑错误或与其他变量冲突。
解决方法:1. 使用有意义的变量名:为了便于代码的阅读和理解,应该使用具有描述性的变量名。
变量名应该能够清晰地表达其含义和作用。
2. 避免使用Matlab内置关键字作为变量名:Matlab有一些内置的关键字,如`if`、`for`、`while`等。
应该避免将这些关键字用作变量名,以免产生错误。
3. 维护良好的命名习惯:养成良好的命名习惯是减少变量命名错误的关键。
可以使用驼峰命名法或下划线分隔符来提高变量名的可读性。
三、下标越界错误在Matlab中,下标越界是一个常见的编程错误。
例如,当访问数组、矩阵或字符串中的元素时,如果使用了错误的下标范围,Matlab会抛出一个下标越界错误。
解决方法:1. 校验下标范围:在编写代码时,应该谨慎检查所有涉及下标的操作,确保它们处于正确的范围内。
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编写程序时,难免会遇到各种错误和bug。
本文将介绍一些常见的MATLAB调试技巧和错误处理方法,帮助读者更加高效地解决问题。
一、错误分类与调试技巧1. 语法错误:在编写MATLAB代码的过程中,很容易出现语法错误。
这些错误可能由于拼写错误、括号不匹配、运算符错误等引起。
一种常见的调试方法是认真查看错误提示信息,并逐行检查代码中可能存在问题的地方。
有时候,手动注释掉一些代码也能帮助找到错误所在。
2. 运行时错误:当程序运行至某个语句时出现错误,我们称之为运行时错误。
常见的运行时错误包括零除错误、数组越界错误等。
为了快速定位和解决这类错误,我们可以利用MATLAB提供的调试工具,如断点调试功能和变量追踪功能。
通过设置断点,在程序执行到指定语句时暂停,我们可以查看和修改变量的值,进一步分析错误产生的原因,从而进行修复。
3. 逻辑错误:逻辑错误是指程序在运行过程中逻辑错误的结果。
这类错误比较隐蔽,需要通过与预期结果的对比来发现。
为了避免逻辑错误,我们可以使用一些技巧,如利用MATLAB提供的assert函数进行断言,编写详细的注释和说明,以及对关键变量进行可视化输出等。
此外,运用单元测试和边界测试的方法也能够有效检测逻辑错误。
4. 内存错误:在大规模数据处理和复杂计算中,内存错误是常见的问题。
过多的变量和占用过大的内存在运行过程中可能导致程序崩溃或内存耗尽。
为了解决内存错误,我们可以通过清理不需要的变量和释放占用内存的资源来释放内存空间。
此外,使用MATLAB提供的分段计算方法,将大型任务拆分为多个小任务,也可有效减少对内存的消耗。
二、错误处理方法1. 异常处理:异常是指在程序运行过程中发生了不可预期的错误。
MATLAB提供了异常处理机制来处理这类错误。
通过在代码中使用try-catch结构,我们可以捕捉到可能出现的异常,并进行相应的处理。
Matlab中常见数据处理中的错误与解决方法
Matlab中常见数据处理中的错误与解决方法在科学研究和工程领域中,数据处理是一个非常重要的环节。
Matlab作为一种常用的数学软件工具,被广泛应用于数据处理和分析。
然而,由于操作失误或者对Matlab不够熟悉,常常出现一些常见的错误。
本文将介绍一些常见的错误,并提供相应的解决方法,以帮助读者更加高效地使用Matlab进行数据处理。
错误一:维度不匹配在进行矩阵运算或者数据处理时,经常会遇到维度不匹配的错误。
这可能是因为输入数据的维度不一致,或者在操作过程中没有按照预期进行维度变换。
解决这个问题的方法是使用Matlab的函数reshape(),可以根据需要将数据进行维度变换,使其匹配。
错误二:数组越界在处理数组或矩阵时,经常会出现数组越界的错误。
这通常是由于索引值超过了数据的有效范围所致。
解决这个问题的方法是在进行索引操作前,先检查索引值是否超过了数组的范围,可以使用函数size()和length()获取数组的大小,然后进行合理的判断和处理。
错误三:代码逻辑错误在编写Matlab程序时,常常会遇到代码逻辑错误。
这可能是由于错误的条件判断、错误的循环控制或者错误的变量使用所致。
解决这个问题的方法是仔细检查代码的逻辑,确保条件判断和循环控制的正确性,同时进行适当的变量命名和使用,使程序的逻辑结构清晰可读。
错误四:数据格式转换问题在进行数据处理时,可能需要进行不同格式的数据之间的转换,比如将字符串转换为数值型数据。
错误的数据格式转换会导致程序出错或者得到错误的结果。
解决这个问题的方法是使用Matlab提供的函数str2num()、num2str()等,根据需要进行正确的格式转换,避免数据类型不匹配导致的错误。
错误五:数值精度问题在进行数值计算时,由于浮点数的精度限制,可能会出现数值计算结果不准确的问题。
例如,两个浮点数相等时会出现不相等的情况。
解决这个问题的方法是使用Matlab提供的函数eps()进行浮点数的比较,或者采用更加精确的数值计算方法,如符号计算工具箱。
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常见错误下面是编译错误代码中英对照错误代码及错误信息错误释义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错误,并提供解决方法,帮助读者更好地处理和解决这些问题。
1. 向量维度不匹配错误这是在进行向量运算或矩阵操作时经常遇到的错误。
当出现该错误时,通常是因为参与运算的向量或矩阵的维度不匹配。
解决方法是检查参与运算的向量或矩阵的维度,确保其维度一致才能进行运算。
2. 数组索引越界错误当我们使用索引访问数组的元素时,如果指定的索引值超过了数组的大小范围,就会产生数组索引越界错误。
解决方法是检查索引值,并确保它们在数组大小范围内。
3. 未找到某个函数或变量的错误当我们尝试调用一个不存在的函数或访问一个未定义的变量时,就会产生未找到某个函数或变量的错误。
解决方法是检查函数或变量的名称是否正确拼写,并确保它们存在于当前工作空间或已添加到MATLAB的搜索路径中。
4. 内存不足错误大规模计算或处理复杂数据时,有时会出现内存不足的错误。
解决方法包括:- 减少数据的规模或精度;- 释放已使用的内存空间;- 使用更高配置的计算机或服务器。
5. 文件读写错误在进行文件读写操作时,常常会遇到文件读写错误。
解决方法包括:- 检查文件路径和名称是否正确;- 确保文件具有正确的读写权限;- 关闭已打开的文件或释放文件资源。
6. 函数参数个数不匹配错误在调用函数时,如果提供的参数个数与函数定义的参数个数不匹配,就会产生函数参数个数不匹配错误。
解决方法是检查函数的定义,并确保提供的参数个数和类型与定义一致。
7. 函数或脚本文件未结束错误在编写函数或脚本文件时,如果忘记在文件末尾添加"end"关键字,就会产生函数或脚本文件未结束错误。
解决方法是在文件的适当位置添加"end"关键字,以标识函数或脚本文件的结束。
掌握Matlab技术的常见错误和解决方法
掌握Matlab技术的常见错误和解决方法一、简介Matlab(Matrix Laboratory)是一种专业的科学计算环境和编程语言。
它广泛应用于工程、科学和数学领域,为用户提供了一个强大的工具来解决复杂的数值计算和数据处理问题。
然而,由于Matlab的学习曲线较陡,很多初学者常常会遇到一些常见的错误。
本文将讨论一些常见的错误类型,并提供解决这些错误的方法,帮助读者更好地掌握Matlab技术。
二、常见错误类型及解决方法1. 语法错误语法错误是编程语言中最常见的错误类型之一。
在Matlab中,常见的语法错误包括拼写错误、缺少或多余的括号、逗号等。
解决这些错误的方法是仔细检查代码,确保语法正确无误。
此外,Matlab提供了丰富的帮助文档,可以通过查询帮助来快速定位并解决语法错误。
2. 数组错误Matlab是一种矩阵编程语言,它的基本数据结构是数组。
在处理数组时,常见的错误包括数组维度不匹配、数组下标越界等。
解决这些错误的方法是仔细检查数组的维度和索引范围,并使用Matlab提供的函数来操作数组,以保证数据的正确处理。
3. 算法设计错误在使用Matlab进行数值计算时,算法设计是至关重要的。
一些常见的算法设计错误包括误用函数、选择不合适的算法等。
解决这些错误的方法是仔细研究算法的原理和实现细节,并选择、实现正确的算法来解决问题。
此外,可以通过与其他熟悉Matlab的人讨论,获得宝贵的建议和指导。
4. 内存溢出错误Matlab是一种内存密集型的计算环境,当处理大量数据或复杂计算时,可能会遇到内存溢出错误。
解决这个问题的方法包括减小数据规模、优化代码、使用Matlab提供的内存管理工具等。
此外,可以增加计算机的物理内存或使用分布式计算等方法来解决内存不足的问题。
5. 函数使用错误Matlab提供了丰富的函数库,可以快速实现各种功能。
然而,有时候使用函数时可能会出现参数错误、函数调用次序错误等问题。
解决这些错误的方法是仔细阅读函数的文档,了解函数的输入和输出参数,并按照正确的方式使用函数。
Matlab常见语法错误分析
Matlab常见语法错误分析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 = myfun(a,b),此错误就会出现,因为函数只能定义在 m 文件中。
关于脚本文件和 m 文件的区别请查阅 matlab 基础书。
简言之:1) 如果你写成 function 的形式,那么必须写在 m 文件中,且以 function 开头(即 function 语句前不能包含其他语句,所有语句必须放在 function 中,当然,function 的定义可以有多个,各 function 之间是并列关系,不能嵌套);2) 如果你写成脚本的形式,则既可以写在命令窗口中,也可以写在 m 文件中,但两者均不能包含 function 语句(即不能进行函数的定义)解决办法:新建一个 m 文件,然后再进行函数的定义5.??? Index exceeds matrix dimensions.中文解释:索引超出矩阵的范围出错原因:在引用矩阵元素的时候,索引值超出矩阵应有的范围解决办法:检查所定义数组的维数,和引用的范围。
Matlab调试技巧与常见错误解决方案
Matlab调试技巧与常见错误解决方案引言:Matlab是一款功能强大的科学计算软件,广泛应用于数学建模、数据分析、信号处理、图像处理等领域。
然而,无论是初学者还是有经验的用户,都难免会遇到各种各样的错误和调试困扰。
本文将介绍一些常见的错误类型以及相应的解决方案,同时分享一些实用的调试技巧,帮助读者更好地应对Matlab编程过程中遇到的问题。
一、语法错误:语法错误是最常见的错误类型之一。
在Matlab中,每一个语句都必须符合语法规范,否则会导致程序无法正确运行。
常见的语法错误包括缺少分号、括号不匹配、变量命名错误等。
解决方案:首先,仔细阅读Matlab的错误提示信息,通常会指示发生错误的位置。
其次,检查受影响的行或语句,确保语法正确,并修正错误。
另外,可以利用Matlab自带的检查工具,如Check Code功能,来帮助发现并修复语法错误。
二、运行时错误:运行时错误是在程序执行过程中发生的错误。
这类错误常见的原因包括越界访问数组、除零操作、未定义的变量等。
解决方案:对于数组越界的错误,可以使用条件判断语句来确保访问有效的索引范围。
对于除零操作,可以使用条件判断来避免出现除数为零的情况。
对于未定义的变量,需要检查变量名的拼写是否正确,或者确认变量是否在当前环境中已经定义过。
三、逻辑错误:逻辑错误是指程序的逻辑或计算方面的错误,导致程序结果与预期不符。
这类错误可能会导致程序输出异常或者结果错误。
解决方案:逻辑错误的修复通常需要对程序的整体逻辑进行仔细检查。
可以采用调试打印语句的方式,在关键位置输出中间变量的值,帮助分析和追踪错误的来源。
另外,利用Matlab提供的断点调试功能,可以逐步执行程序并观察中间结果,快速定位逻辑错误。
四、性能优化:在大规模数据处理或复杂计算中,性能优化是一项重要任务。
如果程序运行速度慢或者内存占用过高,可能需要对代码进行优化。
解决方案:首先,分析程序的瓶颈所在,确定需要进行优化的部分。
MATLAB中常见编程错误与解决方法
MATLAB中常见编程错误与解决方法引言MATLAB是一种流行的科学计算语言和环境,广泛应用于各个领域的工程和科学研究中。
然而,由于其灵活性和强大的功能,有时候编写MATLAB程序可能会导致一些常见的错误。
在本文中,将介绍一些常见的MATLAB编程错误以及相应的解决方法,帮助读者更好地避免和解决这些问题。
一、变量命名错误在MATLAB编程中,变量命名错误是最常见的错误之一。
这包括使用了MATLAB保留字作为变量名、变量名包含非法字符或过长等情况。
解决这些问题的方法很简单,只需要遵循MATLAB变量命名规范即可。
变量名应该以字母开头,可以包含字母、数字和下划线,长度不能超过63个字符。
二、数组索引越界另一个常见的错误是数组索引越界。
在MATLAB中,数组的索引从1开始,而不是从0开始。
因此,当访问数组时,确保索引不超过数组的长度。
如果索引超出范围,MATLAB会返回一个“Index exceeds matrix dimensions”的错误。
要解决这个问题,需要仔细检查数组索引以确保其在合法范围内。
三、未定义的变量或函数在MATLAB编程中,有时会出现未定义的变量或函数的错误。
这通常是因为变量或函数的命名错误、缺少相应的操作或定义等原因导致的。
解决这个问题的方法是在使用变量或函数之前,确保它们被正确定义和初始化。
可以使用MATLAB的内置函数exist来检查变量或函数是否存在,以避免出现未定义的错误。
四、内存溢出随着MATLAB程序的复杂性增加,内存溢出错误也变得更加常见。
当程序尝试分配比计算机内存更大的数组或数据结构时,就会出现内存溢出错误。
解决这个问题的方法包括减少程序的内存需求,优化代码以减少不必要的存储和计算量,并使用MATLAB的内存管理函数如clear和clearvars及时释放不需要的内存。
五、程序性能低下在编写MATLAB程序时,性能低下也是一个常见的问题。
这可能是由于循环嵌套过多、未使用MATLAB的矢量化操作、重复计算等原因引起的。
MATLAB编程中的常见错误及解决方法
MATLAB编程中的常见错误及解决方法一、引言在进行Matlab编程过程中,常常会遇到各种各样的错误。
这些错误可能涉及到语法错误、逻辑错误或者是数值计算错误。
本文将讨论一些常见的Matlab编程错误,并提供相应的解决方法和建议。
二、语法错误1. 拼写错误拼写错误是最常见的语法错误之一。
在Matlab编程中如果拼写错误会导致无法识别命令或者变量名。
因此,在编程过程中应仔细检查代码中的拼写错误,特别是命令和变量名。
解决方法:定期检查代码中的拼写错误,并使用Matlab的自动完成功能来减少拼写错误的可能性。
2. 符号错误Matlab中的符号使用十分严格,常见的符号错误包括括号不匹配、引号未闭合等。
这些错误会导致代码运行失败或者出现语法错误。
解决方法:在编程过程中,注意符号的匹配检查,特别是括号和引号的使用。
使用Matlab的语法高亮显示功能可以帮助定位符号错误。
三、逻辑错误1. 循环错误循环错误是Matlab编程中常见的逻辑错误之一。
循环错误可能导致循环次数不正确,或者循环逻辑出错,无法达到预期的结果。
解决方法:在编写循环代码时,应确保循环条件正确,并明确循环变量的更新方式。
使用disp()等函数输出循环变量的值,以帮助理解循环逻辑并定位错误。
2. 条件判断错误条件判断错误是常见的逻辑错误之一。
条件判断错误可能导致程序无法正确判断条件,进而导致计算错误或者无法进入预期的分支。
解决方法:在编写条件判断代码时,应仔细检查条件表达式的正确性,并确保条件表达式能够正确地返回逻辑值。
使用disp()函数输出条件判断的结果,以帮助理解条件判断逻辑并定位错误。
四、数值计算错误1. 数值溢出错误数值计算中常常会出现数值溢出错误。
数值溢出错误可能导致计算结果超出Matlab的浮点数表示范围,进而导致不准确的结果或者无法计算。
解决方法:在进行涉及到大数值计算的时候,可以考虑使用Matlab中提供的大数值计算函数。
另外,可以通过对计算结果进行范围检查,避免数值溢出错误的发生。
Matlab编程常见错误与解决办法
Matlab常见错误及解决办法归纳1.Subscript indices must either be real positive integers or logicals中文解释:下标索引必须是正整数类型或者逻辑类型出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从0 开始,要么出现了负数。
注:matlab 的语法规定矩阵的索引从 1 开始,这与 C 等编程语言的习惯不一样。
解决办法:自己调试一下程序,把下标为0 或者负数的地方修正。
$ ]$ m8 A. T9 c$ i8 W2.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 '...'中文解释:在调用...函数过程中,一个或多个输出变量没有被赋值出错原因:函数如果带有输出变量,则每个输出在返回的时候都必须被赋值。
Matlab技术中的常见错误及解决方法
Matlab技术中的常见错误及解决方法Matlab是一种常用的科学计算软件,被广泛应用于各个科学领域。
然而,在使用Matlab进行编程和分析的过程中,往往会遇到一些常见的错误。
这些错误可能导致程序运行失败,或者得到错误的结果。
本文将介绍几种常见的Matlab错误,并提供相应的解决方法,以帮助读者更好地理解和使用Matlab。
一. 语法错误语法错误是编程语言中最常见的错误,同样也适用于Matlab。
当我们在编写Matlab代码时,如果不遵循Matlab的语法规则,就会产生语法错误。
这些错误通常是由于拼写错误、缺少括号、忘记分号等简单的错误造成的。
解决方法:1. 仔细核对代码中的拼写错误。
可以使用IDE自带的拼写检查功能或者手动检查。
2. 检查代码中的括号是否匹配。
括号不匹配可能导致代码不可运行。
3. 检查是否正确使用了分号。
Matlab中,每行语句应以分号结尾,以表示不输出结果。
二. 数组维度错误Matlab中,数组是广泛使用的数据结构,但如果在进行运算时,数组的维度出现错误,就会导致程序运行失败。
解决方法:1. 检查输入数组的维度是否与运算符要求相匹配。
例如,在进行矩阵相乘时,两个矩阵的列数和行数需要相等。
2. 使用Matlab提供的函数进行维度调整。
例如,使用“reshape”函数可以改变数组的维度。
三. 内存不足错误在处理大量数据或者复杂的运算时,可能会出现内存不足的错误。
这时,Matlab会提示“Out of Memory”错误,并停止程序运行。
解决方法:1. 减少数据的加载量。
可以考虑只加载部分数据,或者对数据进行分块处理。
2. 清除不再使用的变量。
在程序中及时释放不再使用的变量所占用的内存。
3. 增加系统内存。
如果条件允许,可以考虑增加计算机的物理内存。
四. 文件读写错误Matlab常常需要读取和写入文件,但是在进行文件读写操作时,可能会出现文件不存在、权限不足等错误。
解决方法:1. 检查文件路径是否正确。
matlab常见错误命令汇总
输入的参数“n”无定义。
Error: File: yx.m Line: 2 Column: 1
At least one END is missing: the statement may begin here.
最后的END被漏掉了:该声明可能重此处开始。
>> x=-5:5;y=-5:5;z=x^2+y^2;plot(x,y,z)
Error using ==> mpower
矩阵的次方应用出错,应该是点乘。
>> x=-5:5;y=-5:5;z=x.^2+y.^2;polt(x,y,z)
Undefined function or method 'polt' for input arguments of type 'double'.
未定义函数或函数输入的参数格式不对。
此处是函数写错了。
>> function output=mysum(n)
??? function output=mysum(n)
Error: Function definitions are not permitted at the prompt or inscripts.
在MATLAB声明或表达式中,输入的这个字符时无效的。
Undefined function or method 'e' for input arguments of type 'char'.
输入的“char”类型的参数“e”没有定义功能、函数或方法。
Input argument "n" is undefined.
MATLAB代码调试与错误排查技巧
MATLAB代码调试与错误排查技巧引言MATLAB是一种功能强大的数值计算和科学编程语言,被广泛应用于工程、数学、物理和生物等学科领域。
然而,在编写和调试MATLAB代码时,我们难免会遇到各种错误和bug。
本文将向读者介绍一些MATLAB代码调试和错误排查的技巧,帮助您更快地定位和解决代码中的问题。
一、基本的错误类型和解决方法1. 语法错误语法错误是最常见的错误类型之一。
当我们在输入MATLAB代码时,如果违反了MATLAB的语法规则,就会导致语法错误。
例如,忘记加分号、括号未正确关闭等。
解决方法:仔细检查代码,将问题区域与MATLAB的语法规则进行比对,并做出必要的修改。
2. 运行时错误运行时错误是在程序运行过程中出现的错误,比如数组越界、变量未定义等。
这些错误会导致程序崩溃或产生不正确的结果。
解决方法:使用MATLAB的调试功能,例如设置断点、单步执行等,来逐行追踪程序运行过程,并找出出错的原因。
此外,可以使用MATLAB自带的调试工具箱,如MATLAB调试器,帮助我们更方便地定位和解决运行时错误。
二、常见的调试技巧与技巧1. 打印输出检查在代码中适当地插入打印输出语句,可以帮助我们了解程序执行的过程,并追踪变量的值。
通过打印输出,我们可以判断程序中的某个变量是否正确。
2. 缩小问题范围当我们遇到一个较大的问题时,可以通过缩小问题的范围来逐步排除可能的错误源。
可以使用MATLAB的注释功能来禁用一部分代码,然后逐渐解除注释,找出出错的部分。
这样可以缩小排查的范围,有助于快速定位问题。
3. 利用断点和调试工具MATLAB提供了强大的断点和调试工具,可以帮助我们精确地定位和解决问题。
可以在代码中设置断点,让程序在特定的位置停下来,然后逐行执行。
在断点停下的位置,可以查看变量的值、调用堆栈信息等。
4. 使用MATLAB中的调试工具箱MATLAB还提供了许多调试工具箱,如MATLAB调试器、错误警告工具、性能优化工具等。
matlab常见错误信息
1. Kmeans聚类的时候遇到如下问题,??? Error using ==> kmeans>batchUpdate at 436Empty cluster created at iteration 1.可以试试:[idx, C, sumD, D]=kmeans(X,1,'emptyaction','singleton');2. 求矩阵逆inv时,出现Warning: Matrix is singular to working precision矩阵的特征值接近于0,为奇异矩阵,可以试用pinv3. 用imwrite保存图片错误,提示没有保存的许可解决:注意文件路径4.matlab中矩阵怎么求平均值呀?矩阵的每行每列都有nan首先将nan设为0不一定可取,因为0虽然不影响总和,但是会增加参与求均值的元素个数,所以这样就不能算是“求nan之外的值的均值”了。
当然可能我对楼主的意思理解有偏差。
试一下nanmean函数。
和mean的用法一样,只是将Nan看作不存在。
5. Unbalanced or unexpected parenthesis or bracket.括号不匹配或者输入了中文括号,或者()[]用错了6.图像显示函数:(1)inshow主要用于调用图像索引,比如:imshow(X,map)其功能等同于:image(X) colormap(map)但是,inshow的功能要强大一些,比如用于灰度图像,RGB图像,二进制图像,都可以应用。
(2)imagesc属于图像缩放函数,可以放大或缩小具体说一些例子:要显示一副灰度图像,可以调用函数imshow 或imagesc (即imagescale,图像缩放函数)在调用imagesc 函数时,若只使用一个参数,可以用任意灰度范围显示图像。
在该调用方式下,数据矩阵中的最小值对应于颜色映象表中的第一个颜色值,数据矩阵中的最大值对应于颜色映象表中的最后一个颜色值。
matlab常见错误及处理办法
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 '...'中文解释:在调用...函数过程中,一个或多个输出变量没有被赋值出错原因:函数如果带有输出变量,则每个输出在返回的时候都必须被赋值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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版本上运行时给出比较体面的警告。