将矩阵提升为幂的尺寸不正确

时间:2020-03-11 17:13:24

标签: matlab

这是我的代码:

x = 60: 95;
r11 = 0.93;
E1=13.5;
F1=0.00529;
G1=0;
H1=1;
k11=60;
k12=0;
uid = 10^-7*1.31275 * exp(0.145961 * x );
P = exp(-F1 * ((x-k11)^2) - G1*(x-k12));
fi= E1 * P + H1;
y1 = r1 * fi * uid;
plot(x,y1);

我的错误是:

使用^时出错(第51行)
将矩阵提升为幂的尺寸不正确。检查矩阵是否为正方形,幂是否为标量。要执行元素矩阵幂,请使用'.^'。

ui12中的错误(第16行)
P = exp(-F1 * ((x-k11)^2) - G1*(x-k12));

1 个答案:

答案 0 :(得分:1)

错误与代码段(x-k11)^2有关,其中您从数组(k11,1x36)中减去了标量(x)并尝试对结果求平方。问题在于,函数^是函数mpower()的快捷方式,函数x^2 == x*x x^3 == x*x*x matrix-power 函数,因此期望进行标量或矩阵计算,因为它实际上是

x*x

但是,它不知道如何处理数组,因为rand(1,36)*rand(1,36)不起作用(尝试运行.^,这实际上会引发相同的错误)。 它还提出了一种解决方案:.,它是元素级幂函数(实际上,算术运算中的.^通常表示以下操作是<元素> 进行的) em>)。正如您最初期望的那样,此power是“正常” ^2函数的快捷方式。它对数组x的每个元素执行x.^2 == power(x,2)

.

扩展旁注: 要模仿 wise 运算符arrayfun的行为,您可能需要看一下x.^2 == arrayfun(@(a)mpower(a,2),x) 函数,该函数将某个函数应用于矩阵的每个元素或数组/向量。如果您是Matlab的新用户(我从您的问题中假设),此提示可能会使您感到困惑。

{{1}}