如何更正“在提示符或脚本中不允许使用函数定义”

时间:2011-05-11 19:29:12

标签: function matlab scripting

我想写下这个等式的代码:T2(i)=T1(i)+2*[T1(i-1)+T1(i+1)]

syms T1  T2
function [T2] = stat(T1)

for   i=1:3
   T2(i)=T1(i)*2+[T1(i-1,)+T1(i+1,)]*2
end

我想编码产生T2(111)=T1(111)+2*[T1(011)+T(211)]并继续循环。  但是matlab给出了这个错误

  
    

“在提示符或脚本中不允许使用函数定义”

  

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

Matlab希望函数在他们自己的文件中。将上面的代码复制到文件'stat.m',它应该可以工作。

此策略确实会导致不必要数量的短文件,但由于matlab处理变量范围的方式,这是必需的。每个文件都有自己的范围,命令提示符中的所有变量都具有全局范围。

答案 1 :(得分:2)

作为Quantum7 pointed out,您已在同一脚本中定义了该函数,这将给您一个错误。无论函数是否在不同的文件中,您在那里编写的内容都不是带有符号变量的有效操作。如果您只是注释掉第二行并运行它,您将收到以下错误:

  

???使用==>时出错sym.sym> checkindex at 2697

     

索引必须是正整数或逻辑。

这是因为i-1对于第一个循环为零,并且MATLAB从1开始计数。如果您尝试for i=2:3,则会出现此错误,

  

???使用==>时出错mupadmex

     

MuPAD命令出错:索引超出矩阵尺寸。

因为符号变量只是一个1x1数组。

根据你所写的内容,你似乎有一个数组T1,而T2是根据T1的关系从T2(i)=T1(i)+2*[T1(i-1)+T1(i+1)]构建的。T1。我认为更好的方法来做你正在尝试的是使用匿名函数。

我将略微更改索引以解释在第一个和最后一个元素处,您将收到错误,因为索引将超过dummyT1=[0;T1(:);0]; f=@(i)(dummyT1(i+1)+2*(dummyT1(i)+dummyT1(i+2))); T2=f(1:3) 的范围。不过,答案是一样的。

T1(0)=T1(3)

如果您不想添加零,而是将其设为循环(即f),则可以通过轻松修改{{1}}的定义来使用相同的代码。

答案 2 :(得分:0)

我认为这是一个简单的问题我解决它在编辑器文件中按下播放按钮,即在matlab命令窗口中编译你的函数然后描述你的输入并给出函数参数......

答案 3 :(得分:0)

版本R2016或更高版本允许脚本中的功能

https://www.mathworks.com/help/matlab/matlab_prog/local-functions-in-scripts.html

正如其他人所说,你需要将你的功能放在不同的文件中。