声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1620|回复: 11

[编程技巧] 求助,创建复杂的匿名函数

[复制链接]
发表于 2008-6-21 10:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我举个例子,就是好比a*x.^2+b*x+c=0中的a,b,c非常复杂,如何写成匿名函数才能运行?

a=sin(x)+cos(x)+... ;
b=sin(x)*cos(x);c=23;

pp=@(x)(a*x.^2+b*x+c+a*a+x/b);

[ 本帖最后由 sigma665 于 2008-6-21 14:07 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-6-21 11:37 | 显示全部楼层
help subs
 楼主| 发表于 2008-6-21 11:49 | 显示全部楼层
楼上的是什么意思?能帮忙吗?非常感谢呀
发表于 2008-6-21 13:16 | 显示全部楼层
syms a b c;
pp= @(x) subs(a*x.^2+b*x+c+a*a+x/b,{a,b,c},{sin(x)+cos(x),sin(x)*cos(x),23});

[ 本帖最后由 sigma665 于 2008-6-21 13:19 编辑 ]

评分

1

查看全部评分

发表于 2008-6-21 13:32 | 显示全部楼层
学到点东西,嘿嘿        
 楼主| 发表于 2008-6-21 13:38 | 显示全部楼层

离成功还差一步,sigma665请继续帮忙!!

sigma665:您好
我举的例子还差点,就是好比a*x.^2+b*x+c=0中的a,b,c非常复杂,如何写成匿名函数才能运行?

     a =sin(x)+cos(x) ;
******b=sin(x)*cos(x)*a ;问题在这,因方程非常复杂,只能“嵌套”着表达

c=23;

pp=@(x)(a*x.^2+b*x+c+a*a+x/b);

[ 本帖最后由 robot2003 于 2008-6-21 14:06 编辑 ]
发表于 2008-6-21 14:08 | 显示全部楼层

回复 6楼 的帖子

如果很复杂,建议写成m函数
 楼主| 发表于 2008-6-21 14:19 | 显示全部楼层

写成m函数,我也试过,我要解决的问题是多次解非线性方程

写成m函数,我也试过,我要解决的问题是多次解非线性方程,没成功,才改用的“匿名函数”参数传递解决了,却又带来了新问题
例子如下
function q=my2deq(p)
q=zeros(2,1);
q(1)=p(1)*p(1)+p(2)*p(2)-z;
q(2)=0.75*p(1)^3-p(2)+0.9;

调用
for z=1:1:15
x=fsolve('my2deq',[1;2;z]);
end

就是这个参数“z”在fsolve里不知如何传递给函数my2deq?
发表于 2008-6-21 16:09 | 显示全部楼层

回复 8楼 的帖子

  1. function x=mysolve

  2. for z=1:15
  3. x0=[-5;5];
  4. options=optimset('Display','iter');
  5. x(:,z)=fsolve(@my2deq,x0,options);
  6. end

  7. function F = my2deq(x)
  8. F = [2*x(1) - x(2) - exp(-x(1));
  9. -x(1) + 2*x(2) - exp(-x(2))+z];
  10. end


  11. end
复制代码


在命令窗口运行x=mysolve即可



x =
  Columns 1 through 9
    0.4028    0.2659    0.1524    0.0581   -0.0209   -0.0879   -0.1454   -0.1952   -0.2390
    0.1373   -0.2348   -0.5538   -0.8273   -1.0630   -1.2677   -1.4472   -1.6061   -1.7480
  Columns 10 through 15
   -0.2778   -0.3125   -0.3438   -0.3722   -0.3981   -0.4219
   -1.8758   -1.9918   -2.0978   -2.1952   -2.2852   -2.3688

[ 本帖最后由 sigma665 于 2008-6-21 16:23 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2008-6-21 16:49 | 显示全部楼层

fsolve如何给function传递参数实现多次解非线性方程(问题没...

问题没解决,版主不要删帖,我提的问题对大家也是个提高!!我并非要重复发帖,我用这种方法没解决,才改用“匿名函数”的,两种方法发了两个帖子,只是后来为了和 sigma665讨论,才跟了一次相同的帖子,没想到他是版主

我要解决的问题是多次解非线性方程,例子如下
function q=my2deq(p)
q=zeros(2,1);
q(1)=p(1)*p(1)+p(2)*p(2)-z?;
q(2)=0.75*p(1)^3-p(2)+0.9;

调用
for z=1:1:15
x=fsolve('my2deq',[1;2],z?);
end

就是这个参数“z”在fsolve里不知如何传递给函数my2deq?

[ 本帖最后由 robot2003 于 2008-6-21 16:53 编辑 ]
发表于 2008-6-21 16:52 | 显示全部楼层
global z

评分

1

查看全部评分

 楼主| 发表于 2008-6-21 17:09 | 显示全部楼层
sogooda版主:可能成功了,谢谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 06:37 , Processed in 0.141048 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表