8lu 发表于 2009-6-11 19:22

符号矩阵 数值积分 函数句柄

高了好几天,真的是到了瓶颈了,所以把我写的些码拿出来大家一起讨论讨论,互相学习,不多说了看看这段码,
......
      fstr=Kstr(zeile,spalte); Kstr是一个符号矩阵,
         fstr = char(fstr);         变为字符
      fstr=strrep(fstr,'*','.*');变点×
      fstr=strrep(fstr,'/','./');。。。
      fstr=strrep(fstr,'^','.^');。。。。
      %myfhandle = @(phi)myfunchandle(fstr,phi);
      myfhandle = @(phi)fstr;
      %myfhandle=inline(char(fstr));
      %myfhandle=myfunchandle(fstr,phi)
      %elestr=str2func(char(fstr));
      %myfhandle=matlabFunction(fstr,'vars',)
      q1=quad(@myhandle,0,phi_limit,0.1);
      K(zeile,spalte)=q1;

在这里我简单吧那个fstr,就是Kstr中的一项给大家,以便讨论,不过很长
fstr =
(2*3100000000*sin(conj(2)*conj(phi))*log(6/5)*sin(2*phi))/25+(2*6700000000*2*cos(conj(2)*conj(phi))*log(5/6)*cos(2*phi)*conj(2))/(25*((6700000000*0.04^2)/2780000000+(890000000*0.17^2)/6700000000+(890000000*0.08^2)/2780000000+(890000000*0.04*0.17*0.08)/2780000000+(890000000^2*0.04*0.17*0.08)/2780000000^2-1))+(2*6700000000^2*2780000000*890000000*2*0.08^2*cos(conj(2)*conj(phi))*log(6/5)*cos(2*phi)*conj(2))/(25*(6700000000*(2780000000*890000000*0.08^2-2780000000^2+0.04*0.17*2780000000*890000000*0.08+0.04*0.17*890000000^2*0.08)+6700000000^2*2780000000*0.04^2+2780000000^2*890000000*0.17^2))



ok,问题就是,我用了几种不同的方法得到函数句柄,进行积分,最后却得到两种不同结果,数值差很大,用inline和matlabfunction得到一样的结果,而且结果貌似是对的,但是速度慢,如果用@隐函数和内敛函数就是另外一个,他两是一样的,跟另外一个答案差了,1e8数量级,但是速度很快,我搞不清楚的是为什么会在相同的句柄的情况下会积分出不同的结果,希望大家一起讨论,交流
页: [1]
查看完整版本: 符号矩阵 数值积分 函数句柄