我想写下这个等式的代码: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给出了这个错误
“在提示符或脚本中不允许使用函数定义”
我该如何解决这个问题?
答案 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
正如其他人所说,你需要将你的功能放在不同的文件中。