matlab关于句柄函数的自变量的问题

如何获取函数y的四个自变量,有没有那样的matlab函数?不用声明a,自动获取句柄函数y的自变量a,进而求偏导数可以不?

1、getmaths并非MATLAB自带函数,能查到的只有百度贴吧上的一个帖子,其内容是:

function g =getmaths(y)
g = matlabFunction(sym (y));
end

问的问题也和你差不多,看ID,应该就是你吧?

 

2、首先明确一下术语:

    句柄函数】:你所说的“句柄函数”应该是指使用getmaths生成的函数,那个不叫“句柄函数”,应该叫“匿名函数”(anonymous function)。我的印象中也并被没有“句柄函数”的说法,常用的概念倒是有函数句柄(function handle)。

    函数自变量】:你在标题里面说的函数和自变量都是数学上的概念,在MATLAB里对应的应该分别是符号表达式(symbolic expression)和符号变量(symbolic variable)。尤其要注意:编程语言中函数的概念与数学上是不一样的,而变量的概念和自变量也不是一回事。

 

3、明确了上面的术语之后,现在可以说:上面代码里getmaths调用的matlabFunction作用是把符号表达式转换为匿名函数(当然,需要的话,也可以转换为m文件)。

 

你第2代码的作用是,由字符串s转换得到一个匿名函数y,MATLAB工作区中此时有两个变量sy,然后第3代码试图用 diff(y,a) 求偏导数,而这时候,从编程语言的角度说,并不存在a这个变量(注意,不是数学意义上的自变量),所以当然会出错。

 

4、使用syms a进行声明,其本质上是创建了一个sym类型的变量a,变量有了定义,后面当然就可以使用了。另外还值得一提的是,MATLAB系统中有多个diff函数(可以用which diff -all查看),MATLAB会根据输入参数的类型、这些函数的类型及其在路径中的顺序来决定调用哪一个。

 

5、如果想获取函数y的自变量,可以使用symvarfindsym函数,但需要对输入参数y做一下转换,例如

symvar(char(y))
symvar(sym(y))
findsym(sym(x))

之所以调用 diff(y,a) 不需要做这样的转换,是因为在diff函数内部首先就对输入参数进行了强制转换,而symvarfindsym函数却没有(可能具体版本有差别)。顺便说明一下,用diff可以对匿名函数求偏导数,但并非对所有函数句柄都可以那么做——尽管从语法上是可行的。

追问

朋友您好!你的见解太犀利了,我是外行,哈哈,方便的话加个qq呗,我用c#,不用matlab,此次用到点matlab,就是用其中的diff函数进行一个混编,我的465413993,你要是不便,可以发我邮箱把号码465413993@qq。com

追答

因工作忙,而且单位对上网有限制,所以平常不挂Q,加了意义不大。抱歉。

温馨提示:答案为网友推荐,仅供参考
相似回答