求助,创建复杂的匿名函数
我举个例子,就是好比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 编辑 ] help subs 楼上的是什么意思?能帮忙吗?非常感谢呀 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 编辑 ] 学到点东西,嘿嘿
离成功还差一步,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 编辑 ]
回复 6楼 的帖子
如果很复杂,建议写成m函数写成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?
回复 8楼 的帖子
function x=mysolvefor 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 编辑 ]
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 编辑 ] global z sogooda版主:可能成功了,谢谢
页:
[1]