MATLAB 符号函数转换为数值函数?

我要求函数的一阶偏导为零的那个点,因此设为符号函数,用diff求一阶偏导,用solve求解,但最后怎么把结果转化为数值呢?

  1. 最简便的办法:利用 matlabFunction(这个函数只适用于2009a及更新的版本)
  syms x

  y=exp(x)*x^2+x+1

  g = matlabFunction(y)
  2. eval + vectorize 函数:vectorize 的目的是将字符串(string)表达式里的 * / ^ 替换为 .* ./ .^ ,以支持向量运算。eval 执行该字符串后得到函数句柄
  syms x

  y=exp(x)*x^2+x+1

  g = eval(['@(x)',vectorize(y)])
  3. str2func + vectorize 函数:str2func 函数可以直接将字符串转化为函数句柄
  syms x

  y=exp(x)*x^2+x+1

  g = str2func(['@(x)',vectorize(y)])
  4. str2num + vectorize
  syms x

  y=exp(x)*x^2+x+1

  g = str2num(['@(x)',vectorize(y)])
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-01
直接重新复制结果,粘贴就计算出来了
第2个回答  2012-10-22
看情况,如果是数值的表达式,用double就可以了
如果里面含有字母,就用subs函数来替换追问

小弟在做非线性最优化,用的是含有字母的函数,而且是迭代运算的,N个变量(这里设为符号变量,为了求函数的微分)同时迭代,第i个变量求解时,其余(N-1)个变量视为常数,敢问大神我该怎么处理啊

追答

那就用subs替换了

本回答被网友采纳
第3个回答  2012-10-22
一开始是符号后面就没法变了。

可以开始时将要算的变量用以个矩阵表示 如0:0.01:20来表示 再解 就是数值解了追问

这样还能对函数进行diff 和solve 吗?

追答

可以diff,int,不过solve好像不行吧

相似回答