如何在MATLAB中绘制此函数?

时间:2013-04-14 14:13:28

标签: matlab

我在下面有一个简单的函数(为了简洁我省略了分配等),我已经尝试用它来绘制N和T的特定值的x值,但我不断得到尺寸误差。我认为当我尝试绘制这个时,我正在为x定义一个数组,然后将Psum(N',x,T')绘制为针对这些x的某些N'和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.

2 个答案:

答案 0 :(得分: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。

我们得到的是q×n矩阵乘以平方p×p矩阵,结果必须是标量(即1×1矩阵)。这迫使q = 1且n = p。

现在让我们来看看这一行:

U = T*(1-X) + M

我们不得不断定p = 1,否则T不能从右边乘以X

这意味着您的代码强制TX为标量!难怪你得到一个错误:)

补救措施很简单:修改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为标量输入产生了正确的结果?

答案 1 :(得分:1)

我不完全明白你想要完成什么,但只是观察你:如果你的输入X是一个向量,第3行无法正确计算

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

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