matlab中sym的变量限制范围,关于matlab:如何更正“提示或脚本中不允许使用功能定义”...

"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命令窗口中编译您的函数,然后描述您的输入并提供函数参数...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值