我在下面有一个简单的函数(为了简洁我省略了分配等),我已经尝试用它来绘制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.
答案 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
。
这意味着您的代码强制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
为标量输入产生了正确的结果?
答案 1 :(得分:1)
我不完全明白你想要完成什么,但只是观察你:如果你的输入X是一个向量,第3行无法正确计算
A(1,m) = (1/(m*pi))*sin(m*pi*X)*T*exp(-(m^2)*(pi^2)*T);
因为等式的右边给你一个向量,但是右边的A(1,m)
是一个元素,而不是向量。所以你有尺寸不匹配。
希望这有帮助!