robot2003 发表于 2008-6-21 10:43

求助,创建复杂的匿名函数

我举个例子,就是好比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 编辑 ]

sigma665 发表于 2008-6-21 11:37

help subs

robot2003 发表于 2008-6-21 11:49

楼上的是什么意思?能帮忙吗?非常感谢呀

sigma665 发表于 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 编辑 ]

wwbeyond 发表于 2008-6-21 13:32

学到点东西,嘿嘿        

robot2003 发表于 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 编辑 ]

sigma665 发表于 2008-6-21 14:08

回复 6楼 的帖子

如果很复杂,建议写成m函数

robot2003 发表于 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',);
end

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

sigma665 发表于 2008-6-21 16:09

回复 8楼 的帖子

function x=mysolve

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

function F = my2deq(x)
F = [2*x(1) - x(2) - exp(-x(1));
-x(1) + 2*x(2) - exp(-x(2))+z];
end


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 编辑 ]

robot2003 发表于 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',,z?);
end

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

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

sogooda 发表于 2008-6-21 16:52

global z

robot2003 发表于 2008-6-21 17:09

sogooda版主:可能成功了,谢谢
页: [1]
查看完整版本: 求助,创建复杂的匿名函数