这是我的代码:
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));
答案 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}}