matlab 匿名函数

在matlab编程中,x=sym('x');f=sym('x^3-x-3');symF;df=diff(f);F=x-f/df;Fx=inline(F);x1=1.5;f... 在matlab编程中,
x=sym('x');
f=sym('x^3-x-3');
sym F;
df=diff(f);
F=x-f/df;
Fx=inline(F);
x1=1.5;
for i=1:10
x1=feval(Fx,x1);
end
这样,没有问题,可是把Fx=inline(F);换成Fx=@(x) F;后运算得不到结果,而且x1最后也变成了字符型,求大神指教
展开
 我来答
tianxiawulang
推荐于2017-10-12 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2675万
展开全部

要搞明白出现这个现象的原因,需要了解inline函数和匿名函数是怎样工作的。

 

使用下面的语句定义inline函数:

Fx=inline(F);

由于F是sym类型,所以调用的实际上是符号数学工具箱的函数sym/inline,该函数将sym对象转换为char,再调用MATLAB基本系统的inline函数。inline函数可以按照楼主的方式调用:

x1=feval(Fx,x1);

也可以直接调:

x1=Fx(x1);

作用是完全相同的。

 

匿名函数的定义语法是:

fhandle = @(arglist) expr

等号的右边包括三部分:

  • 函数句柄的符号(@);

  • 参数表arglist(参数之间用逗号分隔,外面加括号);

  • 函数体expr :是一个合法的MATLAB表达式,用以执行函数所要实现的功能。

等号左边可以指定一个变量,用以保存匿名函数的句柄以便后面使用,不过在很多情况下,匿名函数经常会在定义时直接使用,而不把它保存为一个变量。

 

匿名函数的表达式中可以使用两种数据:

  • 参数表arglist中列出的变量,这些变量在调用的时候才会有具体的数据;

  • 在表达式expr中出现的其它变量。在构造匿名函数的时候,由MATLAB保存当前工作区中这些变量的值,然后在调用匿名函数的时候使用。需要注意,如果在构造匿名函数之后,表达式里的变量值变化甚至被清除,都不会影响到已构造的匿名函数,而从另一个角度说,如果希望这些变量值的变化起作用,需要重新构造匿名函数。另外,如果表达式中存在当前工作区未定义的变量,构造匿名函数的时候并不会报错,调用的时候才会。

 

接下来,我们来看一下楼主定义的匿名函数是怎样工作的:

Fx=@(x) F;

这样构造的一个匿名函数Fx,其函数体是F,MATLAB会把当前工作区的变量F的值保留下来——这是一个sym对象(并非楼主所说的字符型),那么,在调用它的时候,就会把这个值作为匿名函数的执行结果返回,所以就出现了楼主所说的现象。

 

要想让匿名函数执行F对应的函数表达式,应该这样定义:

Fx=@(x) subs(F);

这样,就会用匿名函数的输入参数x代替F表达式中的x,而得到想要的结果。也可以使用以下几种定义方式:

Fx=@(x0) subs(F,x,x0);
Fx=@(x0) subs(F,x0); 
Fx=@(x) subs(F,x);

结果都完全相同。这里需要说明的是,在匿名函数的表达式中,参数表中的变量处于作用域,如果参数表使用x,则在表达式expr中的x不会被视作符号变量,而是匿名函数的输入参数。所以,如果表达式中需要用到x,那么参数表中应使用另一个变量名x0加以区别。

卓英媛乌炳
2020-01-19 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:35%
帮助的人:626万
展开全部
后面的@也一样啊,同样的意思
把他拆成两个函数就是:
fx=@(x)(a.*x.^2+1./a^2),myfhd=@(a)(quad(fx,0,1))
这是matlab的句柄函数。你要是查看quad的帮助就会发现,q
=
quad(fun,a,b)
中fun需要是一个函数或者函数的句柄,所以你第二种写法是有问题的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yinconggggg
2018-04-09 · TA获得超过1.5万个赞
知道小有建树答主
回答量:8
采纳率:0%
帮助的人:1993
展开全部

matlab是匿名函数。

f = @(x1,x2,x3) x1+x2+x3。

cf = func2str(f); for k = 1:3。  

s = ['x' num2str(k)]。  

ss = ['x(' num2str(k) ',:)']。

cf = strrep(cf,s,ss)。

end ff = str2func(cf)。

匿名函数:

匿名函数它是matlab中定义的一种函数形式,出现在matlab中,匿名函数不以文件形式驻留在文件夹上;他的生成方式最简捷,可在指令窗或任何函数体内通过指令直接生成。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-10-15
展开全部
  匿名函数 出现在 matlab 中。它是matlab中定义的一种函数形式。
  函数简介:匿名函数不以文件形式驻留在文件夹上;他的生成方式最简捷,可在指令窗或任何函数体内通过指令直接生成。
  匿名函数的作用:主要实现自己定义matlab中的函数,从而扩大函数的使用功能
  和内联函数(inline)相比,匿名函数的优越性在于可以直接使用workspace中的变量,不必申明,非常适合嵌入到M文件中。
  %例10-25 匿名函数举例。
  %本例列举3个匿名函数的例子,分别有0个、1个和两个输入参数。
  %首先介绍没有输入参数的匿名函数,只需用空格代替arglist即可。例如,编写求解当前时间的匿名函数如下所示。
  >> t = @() datestr(now);
  t() %函数的调用
  ans =
  14-Sep-2004 20:22:50
  %值得注意的是,调用该函数时,括号不能省略,否则, MATLAB 7.1将对程序不予计算,如下所示。
  >> t
  t =
  @() datestr(now)
  >>
  %再介绍有一个输入参数的匿名函数,该函数用于求所输入参数的平方,编制并运行程序如下所示。
  >> sqr = @(x) x.^2
  sqr =
  @(x) x.^2
  >> sqr(12)
  ans =
  144
  >>
  %最后介绍有两个输入参数的匿名函数,用户可以由此推导有多个参数的匿名函数,编制并运行程序如下所示。
  >> sumAxBy = @(x, y) (14*x + 41*y)
  sumAxBy =
  @(x, y) (14*x + 41*y)
  >> sumAxBy(3,7)
  ans =
  329
  >>
  注意这些定义过程,其中@这个标志符是很重要的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式