wl2020mxxb 2023-03-08 17:21 采纳率: 55.6%
浏览 47
已结题

循环相乘,依次点乘起来

有一列表
w1.表
w2.表
w3.表
w4.表
请问如何生成新的一列表
new_w1.表(等于w1.表)
new_w2.表(等于原来的w1 矩阵 .乘原来的w2 矩阵)
new_w3.表(等于原来的w1 .乘 w2 .乘w3)
new_w4.表(等于原来的w1 乘 w2 .乘 w3 点乘 w4)
上面是列举了一部分,有很多,要先读取excel中的矩阵,再 点乘,这样的循环如何写

  • 写回答

8条回答 默认 最新

  • 「已注销」 2023-03-08 17:29
    关注

    “Devil组”引证GPT后的撰写:
    用循环和递归方法实现这个任务。以下是使用循环的代码:

    % 假设w1、w2、w3和w4是已经定义好的矩阵
    
    % 初始化new_w1等于w1
    new_w1 = w1;
    
    % 初始化一个临时变量为w1
    temp = w1;
    
    % 循环遍历w2到w4
    for i = 2:4
        % 点乘临时变量和当前矩阵
        temp = temp * eval(['w', num2str(i)]);
        % 将结果赋值给new_w
        eval(['new_w', num2str(i), ' = temp;']);
    end
    
    
    

    先初始化了new_w1为w1。然后使用一个临时变量temp来保存当前矩阵的乘积,从w2开始循环遍历,每次将temp和当前矩阵相乘并赋值给temp,最后将结果赋值给相应的new_w。

    使用递归的方法实现如下:

    % 假设w1、w2、w3和w4是已经定义好的矩阵
    
    % 定义递归函数
    function result = multiply_matrices(matrices, index)
        if index == 1
            % 如果是第一个矩阵,直接返回
            result = matrices{index};
        else
            % 否则递归调用函数
            temp = multiply_matrices(matrices, index - 1);
            result = temp * matrices{index};
        end
    end
    
    % 调用递归函数生成new_w1到new_w4
    new_w1 = w1;
    new_w2 = multiply_matrices({w1, w2}, 2);
    new_w3 = multiply_matrices({w1, w2, w3}, 3);
    new_w4 = multiply_matrices({w1, w2, w3, w4}, 4);
    
    
    

    定义了一个递归函数multiply_matrices,该函数接受一个矩阵列表和当前矩阵的索引。如果是第一个矩阵,直接返回;否则递归调用函数,将结果与当前矩阵相乘并返回。最后调用递归函数生成new_w1到new_w4。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月9日
  • 修改了问题 3月8日
  • 修改了问题 3月8日
  • 创建了问题 3月8日