"Function definitions are not permitted at the prompt or in scripts"
blockquote>
我怎么解决这个问题?
相关:MATLAB中脚本和函数之间有什么区别?在MATLAB中,我可以在同一文件中包含脚本和函数定义吗?
Matlab希望函数位于自己的文件中。将上面的代码复制到文件" stat.m",它应该可以工作。
此策略的确会导致不必要数量的短文件,但由于matlab处理变量范围的方式而需要此策略。每个文件都有自己的作用域,命令提示符中的所有变量都具有全局作用域。
我将此代码处理到另一个文件,并运行它,但重复此错误
@roghie:确保不要将syms T1 T2行复制到文件中。 仅function及其后的所有内容。
正如Quantum7所指出的,您已经在同一脚本中定义了该函数,这将给您带来错误。无论函数是否在其他文件中,无论您编写的是什么,都不会使用符号变量进行有效的操作。如果仅注释掉第二行并运行它,则会出现以下错误:
??? Error using ==> sym.sym>checkindex at 2697
Index must be a positive integer or logical.
这是因为i-1在第一个循环中为零,并且MATLAB从1开始计数。如果尝试for i=2:3,则会收到此错误,
??? Error using ==> mupadmex
Error in MuPAD command: Index exceeds matrix dimensions.
因为符号变量只是一个1x1数组。
从您编写的内容来看,似乎您有一个数组T1,并且T2是根据T2(i)=T1(i)+2*[T1(i-1)+T1(i+1)]关系从T1构造的。我认为做您正在尝试的一种更好的方法是使用匿名函数。
我将略微更改索引以解决以下事实:在第一个元素和最后一个元素时,您会得到一个错误,因为索引将超出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的定义来使用相同的代码。
如果@yodas答案对您不起作用(并且您仍在解决此问题),请发布您要解决的问题的更多详细信息。 可能有更简单的方法来执行此操作,例如T2 = 2 * [T1(2:(end-1))+ T1(1:end-2)+ T1(3:end)]?
R2016或更高版本允许使用脚本中的功能
https://www.mathworks.com/help/matlab/matlab_prog/local-functions-in-scripts.html
正如其他人所说,您需要将函数放在另一个文件中。
我认为这是一个简单的问题,我解决了它在编辑器文件中按下播放按钮的问题,那就是在matlab命令窗口中编译您的函数,然后描述您的输入并提供函数参数...