0

我编写了以下代码,以尝试根据 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{:}); 
4

1 回答 1

1

r我将根据保留的和fun(我没有选择本机函数的所有术语)向您展示一种可以继续的方式:

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
于 2013-04-30T10:46:19.600 回答