0

我在下面有一个简单的函数(为简洁起见,我省略了分配等),我一直在尝试针对它的 x 值绘制 N 和 T 的特定值,但我不断收到尺寸错误。我认为当我尝试绘制这个时,我正在为 x 定义一个数组,然后针对这些 x 绘制某些 N' 和 T' 的 Psum(N', x, T') ,但是 MATLAB 似乎不喜欢这样。有人可以给我一些方向吗?

function U = Psum(N, X, T)
  for m = 1:N
    A(1,m) = (1/(m*pi))*sin(m*pi*X)*T*exp(-(m^2)*(pi^2)*T);
    % array terms of partial sum
  end
  M = -sum(A); % evaluate Nth partial sum
  U = T*(1-X) + M; % output U(X,T) = T(1-X) + V(X,T)
end

当我尝试绘制以下内容时,我遇到了类似的错误,我认为我的一般方法一定有问题

 syms x;
 f = @(x)((x/(100*pi))*(exp(-(100^2)*(pi^2)*x)));
 x = 0:0.1:10000;
 plot(x,f(x),'r')
 title('PartialSum convergence');
 xlabel('T');
 ylabel('a_n');

我在这里得到的错误是:

Error using  * 
Inner matrix dimensions must agree.
4

2 回答 2

2

以下是您遇到尺寸不匹配错误的原因的分析。从这一行:

A(1,m) = (1/(m*pi))*sin(m*pi*X)*T*exp(-(m^2)*(pi^2)*T)

该元素A(1, m)应该是二维矩阵中的标量值。现在让我们看看每个被乘数的维度是多少:

  • (1/(m*pi))是一个标量(即一个 1×1 矩阵)。
  • sin(m*pi*X)具有与 相同的尺寸X。假设它的维度是 q×n。
  • exp(-(m^2)*(pi^2)*T)具有与 相同的尺寸T,并乘以T。因此T必须是一个方阵,所以我们假设它的维数是 p×p。

我们得到的是aq×n矩阵乘以一个p×p方阵,结果一定是一个标量(即1×1矩阵)。这迫使 q=1 和 n=p。

现在让我们看看这一行:

U = T*(1-X) + M

我们被迫得出p=1的结论,否则T不能X从右乘。

这意味着您的代码强制T并且X是标量的!难怪你得到一个错误:)

补救措施很简单:修改计算,Psum以便它可以为标量X和向量产生正确的结果X。一个可能的解决方法是添加另一个循环来遍历 的所有值X

function U = Psum(N, X, T)
    U = zeros(size(X));
    for k = 1:numel(X)  %// Iterate over all values of X
        for m = 1:N
            A(1,m) = (1/(m*pi))*sin(m*pi*X(k))*T*exp(-(m^2)*(pi^2)*T);
            %// array terms of partial sum
        end
        M = -sum(A); % evaluate Nth partial sum
        U(k) = T*(1-X(k)) + M; % output U(X,T) = T(1-X) + V(X,T)
    end
end

此函数的输出具有与 相同的维度X

顺便说一句,您是否验证了这Psum会为标量输入产生正确的结果?

于 2013-04-14T15:12:50.630 回答
1

我不完全理解您要完成的工作,但只是对您的观察:如果您的输入 X 是向量,则无法正确计算第 3 行

A(1,m) = (1/(m*pi))*sin(m*pi*X)*T*exp(-(m^2)*(pi^2)*T);

因为等式的右边给你一个向量,但右边A(1,m)是一个元素,而不是向量。所以你有尺寸不匹配。希望这可以帮助!

于 2013-04-14T15:05:29.493 回答