numel(yyi) % 返回矩阵 的元素数目为2000,那怎么和sigmac = [0.5, 1, 1.5];相乘呢?矩阵维度必须一致。 出错 Raylei (line 49) yyi=sigmac.*yyi; %使瑞利分布杂波具有指定的标准差
时间: 2024-03-13 07:43:36 浏览: 77
如果你要将 `yyi` 视为一个 $2000 \times 1$ 的列向量,那么你需要将 `sigmac` 视为一个 $1 \times 3$ 的行向量。然后,你需要使用 `diag` 函数将 `sigmac` 转换为一个 $3 \times 3$ 的对角矩阵,其中对角线元素为 `sigmac` 中的元素,非对角线元素为 0。最后,你可以将 `yyi` 与这个对角矩阵相乘,得到一个 $2000 \times 3$ 的矩阵,每一列都是 `yyi` 乘以相应的 `sigmac` 元素。具体来说,你可以这样做:
```
sigmac = [0.5, 1, 1.5];
yyi = randn(2000, 1); % 假设这是你的瑞利分布杂波
S = diag(sigmac); % 将 sigmac 转换为对角矩阵
yyi_sigmac = yyi * S; % 将 yyi 与对角矩阵相乘
```
这样就可以得到一个 $2000 \times 3$ 的矩阵 `yyi_sigmac`,每一列都是 `yyi` 乘以相应的 `sigmac` 元素。注意,在这种情况下,你不能使用 `.*` 运算符,因为 `sigmac` 的维度与 `yyi` 不一致。
相关问题
numel(yyi) % 返回矩阵 的元素数目为2000,那怎么和sigmac = [0.5, 1, 1.5];相乘呢
如果 `yyi` 是一个 $2000 \times 1$ 的列向量,则当使用 `sigmac = [0.5, 1, 1.5];` 时,你可以将 `sigmac` 视为一个 $1 \times 3$ 的行向量,然后使用点乘运算符 `.*` 将 `yyi` 和 `sigmac` 相乘,得到一个 $2000 \times 3$ 的矩阵。具体来说,你可以这样做:`yyi_sigmac = yyi * sigmac;` 或者 `yyi_sigmac = bsxfun(@times, yyi, sigmac);`(推荐使用后一种方法,因为它更快)。
% 模拟交易 inicash = 10^7; SI = TOHLCV(:,5) / TOHLCV(1,5); N1 = 10:10:60; % 进场信号探测窗口周期 N2 = 0.5:0.05:1.2; % 出场信号探测窗口周期 b_a = 1; % 信号探测使用高低点 (取值1)或收盘价 (取值2) AR = nan( numel(N1) , numel(N2) ); % 年化回报率矩阵 Sharpe = nan( numel(N1) , numel(N2) ); % 夏普比矩阵 Calmar = nan( numel(N1) , numel(N2) ); % 卡玛比矩阵 for i = 1 : numel(N1) for j = 1 : numel(N2) paramcell = { [N1(i) N2(j) b_a] [N1(i) N2(j) b_a] }; [ Capital , H ] = feval( [ 'Strategy_' strategyname ] , TOHLCV , paramcell , inicash ); Eqty = Capital / inicash; % 净值曲线 equitypfm = performmetrics( Eqty , 1 , SI' ); AR(i,j) = equitypfm(1); Sharpe(i,j) = equitypfm(1) / equitypfm(5); Calmar(i,j) = equitypfm(1) / equitypfm(2); end end [ X , Y ] = meshgrid( N1 , N2 ) ; Z = AR; % Z = (AR+Sharpe+Calmar) / 3; surf(X',Y',Z) xlabel('N1') ylabel('N2')这这段代码参数改为function ema = calcema(S, N) alpha = 2/(N+1); ema = zeros(size(S)); ema(1) = S(1); for i = 2:length(S) ema(i) = alpha*S(i) + (1-alpha)*ema(i-1); end end中的参数
这段代码和你之前提供的代码没有关系,但是根据你给出的代码,我猜测你想知道`calcema`函数的参数是什么意思。
这个函数的输入参数包括:
- S:待计算的价格序列,是一个向量。
- N:EMA的计算周期,即需要计算多少个价格数据的平均值。通常情况下,N是一个整数。
函数的输出是一个与输入序列S等长的向量,表示对应的EMA序列。
具体来说,这个函数实现了以下步骤:
- 计算EMA的平滑系数alpha,其中alpha的常用取值为2/(N+1)。
- 初始化EMA序列,将第一个价格作为初始值。
- 使用循环遍历输入序列S中的每一个价格,根据EMA的递推公式计算对应的EMA值。递推公式为:EMA(i) = alpha * S(i) + (1-alpha) * EMA(i-1),其中i表示当前的时间点,i-1表示前一个时间点的EMA值。
需要注意的是,这个函数的输出变量名是`ema`,表示计算得到的EMA序列。
阅读全文