这个函数处理的时间太长,无法集成MATLAB吗?

时间:2013-04-30 10:09:03

标签: matlab

我编写了下面的代码,试图将下面的积分与r的值进行对比,但是MATLAB给了我一个错误 - 好玩太久了?我在其他地方出错了吗?

 figure(1); %f_1
  r = 0:0.001:50;
  q = zeros(1, size(r));
  for m = 1:numel(r)
       fun = @(t) ((-3*(r(m).^3)*sin(3*t) + 2*(r(m)^2)*cos(2*t) + 7*r(m)*cos(t) -2*sin(t))*(-6*(r(m)^3)*sin(3*t) + 2*(r(m)^3)*cos(3*t) - 3*(r(m)^4)*cos(4*t) - 2*(r(m)^3)*sin(3*t) + 2*(r(m)^2)*cos(2*t) + 7*(r(m)^2)*sin(2*t))) - ((3*(r(m).^3).*cos(3*t) + 2*(r(m).^2).*sin(2*t) + 7*r(m).*sin(t) - 2*r(m).*cos(t))*(-6*(r(m).^3).*cos(3*t) + 2*(r(m).^3).*sin(3*t) + 3*(r(m).^4).*sin(4*t) - 2* (r(m).^3).*cos(3*t) - 2*(r(m).^2).*sin(2*t) + 7*(r(m).^2).*cos(2*t)))./((-3*(r(m).^3).*sin(3.*t) + 2*(r(m).^2)*cos(2.*t) + 7*r(m).*cos(t) - 2*sin(t)).^2 + (3*(r(m).^3).*cos(3*t) + 2*(r(m).^2).*sin(2*t) + 7*r(m).*sin(t) - 2*r(m).*cos(t)).^2);
       q(m) = quad(fun, 0, 2*pi);
 end

我得到的错误是

        Error using  *  Inner matrix dimensions must agree. 

Error in @(t)......


Error in quad (line 76) y = f(x, varargin{:}); 

1 个答案:

答案 0 :(得分:1)

我会根据保留的rfun(我没有选择原生函数的所有术语)向您显示可以继续的方式:

r = 0:0.1:50;
q = zeros(size(r));

for ii = 1:numel(r)
    fun = @(t) (-3.*(r(ii).^3).*sin(3.*t) + 2.*(r(ii).^2).*cos(2.*t) + 7.*r(ii).*cos(t) -2.*sin(t));
    q(ii) = quad(fun,0,2.*pi);
end

由于您的r非常庞大(如果我没记错的话,会有50001个元素),我也会选择parfor简单的for循环。

修改

作为替代解决方案,您可以通过以下方式获得相同的结果,而无需任何anonymous function

r = 0:.01:50;
fun1 = zeros(size(r));
t = 0:.001:(2*pi);
for ii = 1:numel(r)
    fun1(ii) = trapz(t,(-3.*(r(ii).^3).*sin(3.*t) + 2.*(r(ii).^2).*cos(2.*t) + 7.*r(ii).*cos(t) -2.*sin(t)));
end