matlab关于句柄函数的自变量的问题 如何获取函数y的四个自变量,有没有那样的matlab函数?不用声明a,自动获取句柄函数y的自变量a,进而求偏导数可以不?
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/25 02:44:26
matlab关于句柄函数的自变量的问题 如何获取函数y的四个自变量,有没有那样的matlab函数?不用声明a,自动获取句柄函数y的自变量a,进而求偏导数可以不?
matlab关于句柄函数的自变量的问题
如何获取函数y的四个自变量,有没有那样的matlab函数?
不用声明a,自动获取句柄函数y的自变量a,进而求偏导数可以不?
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工作区中此时有两个变量s和y,然后第3代码试图用 diff(y,a) 求偏导数,而这时候,从编程语言的角度说,并不存在a这个变量(注意,不是数学意义上的自变量),所以当然会出错.
4、使用syms a进行声明,其本质上是创建了一个sym类型的变量a,变量有了定义,后面当然就可以使用了.另外还值得一提的是,MATLAB系统中有多个diff函数(可以用which diff -all查看),MATLAB会根据输入参数的类型、这些函数的类型及其在路径中的顺序来决定调用哪一个.
5、如果想获取函数y的自变量,可以使用symvar或findsym函数,但需要对输入参数y做一下转换,例如
symvar(char(y))symvar(sym(y))
findsym(sym(x))
之所以调用 diff(y,a) 不需要做这样的转换,是因为在diff函数内部首先就对输入参数进行了强制转换,而symvar或findsym函数却没有(可能具体版本有差别).顺便说明一下,用diff可以对匿名函数求偏导数,但并非对所有函数句柄都可以那么做——尽管从语法上是可行的.