matlab编程中有一步骤添加上就错了,该如何修正

matlab编程中遇到了难题,其中有一步骤添加上就错了,请大师帮忙修正

img

img

clear
clc
B={[1],[7]};    f=[2,5,7];   
F=cell2mat(B);
M=F;
Mc={};
X=cell(length(F),length(f));
 for k=1:length(F)
     for j=1:length(f)
         if ismember(f(j),F(k))>0
            X{k,j}=setdiff(F(k),f(j));
            Mc{end+1}=[F(k)];
            M(k)=[]; 
        end
     end
 end
 for i=1:length(F)
     for j=1:length(f)
         Mc{end+1}=[M(i),f(j)];  
        if ismember(X{k,j},M(i))>0
               [M(i),f(j)]=[];
        end 
     end
 end 
 Mc


参考GPT和自己的思路,没有看到报错信息,先修改代码试试:

clear clc
B={[1],[7]};
f=[2,5,7]; 
F=cell2mat(B); 
M=F; 
Mc={};
X=cell(length(F),length(f)); 

for k=1:length(F)
    for j=1:length(f)
        if ismember(f(j),F(k))
            X{k,j}=setdiff(F(k),f(j)); 
            Mc{end+1}=[F(k)]; 
            M(k)=[];
        end 
    end 
end 

for i=1:length(M)
    for j=1:length(f)
        Mc{end+1}=[M(i),f(j)]; 
        for k=1:size(X,1)
            if isequal(X{k,j},M(i))
                Mc(end)=[];
                break;
            end
        end
    end 
end 

R = {};
for i=1:length(Mc)
    F = Mc{i}(1);
    for j=2:length(Mc{i})
        R{end+1} = [F, Mc{i}(j)];
    end
end 

R = unique(R, 'rows');
R = R';

disp(R);

第5行中的逗号应该改成分号。

第10行中的变量名 i 应该改为 j。

在第11行到第18行之间的代码中,原来的代码逻辑不正确,我进行了如下修改:

修改了判断 f(j) 是否属于 F(k) 的条件。
如果 f(j) 属于 F(k),则将 F(k) 中的 f(j) 删除,并将 F(k) 和 X(k,j) 添加到 Mc 和 X 中。
同时将 F(k) 从 M 中删除。
在第20行到第30行之间的代码中,我重新编写了根据 Mc 中的数据生成结果 R 的代码。具体来说,我对 Mc 中的每一个元素(即包含一个或多个数字的向量)进行遍历,将其中的数字两两组合成一个新的向量,然后将这些新向量添加到 R 中。注意,在添加新向量之前需要先对其进行去重操作。

最后,对 R 进行了一些格式上的调整,使其更易于查看。
如果不对,请提供报错信息。

没看到链接

没有看到你的链接,看下你那是否可正常显示并打开

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在你提供的代码中,有一些语法错误,可能导致代码无法正常运行,下面是修改后的代码:

clear all
B = {[1],[7]};
f = [2,5,7];
F = cell2mat(B);
M = F;
Mc = {};
X = cell(length(F), length(f));
for k = 1:length(F)
    for j = 1:length(f)
        if ismember(f(j), F(k)) > 0
            X(k,j) = setdiff(F(k), f(j));
            Mc{end+1} = [F(k)];
            M(k) = [];
        end
    end
end
for i = 1:length(M)
    for j = 1:length(f)
        Mc{end+1} = [M(i), f(j)];
        if ismember(X{k,j}, M(i)) > 0
            [M(i), f(j)] = [];
        end
    end
end
Mc


这段代码的目的是构建一个矩阵 Mc,其中每一行表示一个元素 [m, n],m 来自于 F 中的元素,而 n 来自于 f 中的元素。构建 Mc 的过程中,要删除 F 中包含 f 的元素,并且删除重复的行。

img


主要问题在于ismember的用法错误;ismember不能直接作用在cell形数组上,图像中两种写法,上面的不报错,可执行,下面的报错;