Function 如何纠正;不允许在提示或脚本中使用函数定义;

Function 如何纠正;不允许在提示或脚本中使用函数定义;,function,matlab,scripting,Function,Matlab,Scripting,我想为这个方程编写代码:T2(I)=T1(I)+2*[T1(I-1)+T1(I+1)] 我想编码生成T2(111)=T1(111)+2*[T1(011)+T(211)]然后循环继续。 但是matlab给出了这个错误 “不允许在提示或脚本中使用函数定义” 如何解决这个问题?Matlab希望函数位于它们自己的文件中。将上述代码复制到文件“stat.m”中,它应该可以工作 此策略确实会导致不必要的短文件数量,但这是必需的,因为matlab处理可变范围的方式。每个文件都有自己的作用域,命令提示符中的所有

我想为这个方程编写代码:
T2(I)=T1(I)+2*[T1(I-1)+T1(I+1)]

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

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


如何解决这个问题?

Matlab希望函数位于它们自己的文件中。将上述代码复制到文件“stat.m”中,它应该可以工作

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

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

???在2697处使用==>sym.sym>检查索引时出错

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

这是因为对于第一个循环,
i-1
为零,并且MATLAB从1开始计数。如果尝试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

的定义来使用相同的代码。我想这是一个简单的问题,我可以通过按编辑器文件中的播放按钮来解决,这就是在matlab命令窗口中编译函数,然后描述输入并给出函数参数…

R2016或更高版本允许使用脚本中的函数


正如其他人所说,您需要将函数放在另一个文件中。

我将此代码复制到另一个文件中,并运行它,但重复此操作error@roghie:确保不要将行
syms T1 T2
复制到文件中。仅
函数
以及.Related:之后的所有内容,如果@yoda的答案对您不起作用(您仍在解决此问题),请发布您试图解决的问题的更多详细信息。可能有一种更简单的方法,比如T2=2*[T1(2:(end-1))+T1(1:end-2)+T1(3:end)]?
dummyT1=[0;T1(:);0];
f=@(i)(dummyT1(i+1)+2*(dummyT1(i)+dummyT1(i+2)));
T2=f(1:3)