我写了这段代码,它没有工作,它给了我“不可识别的函数或变量'seq'”错误,我能做什么来解决这个错误?

95次(最近30天)
hothifa hasanat
hothifa hasanat 2021年9月16日19:02
回答: 舒比2021年9月29日0:08
作用[N,V,seq] = addition1_opt(N, m,P)
这个函数的摘要在这里
这里有详细的解释
%n=str2num(n);
%m=str2num(m);
% x = str2num (x);
等待初始化所有序列组合…
L=ceil((6*(n-1)+1)/2);
N=(阶乘(L)/阶乘(L-m))^N;
C=nchoosek(1:L,m);
H=(阶乘(L)/(阶乘(m)*阶乘(L-m));
k = 1;
完成=错误;
required_number_of_万博 尤文图斯solutions = 10;
对于i = 1: H
x_temp=perms(C(i,:);
对于j = 1:阶乘(m)
x(k,:)=x_温度(j,:);
k=k+1;
终止
终止
x;
%对于ro=1:n
% mtx(ro,:) = x(
%
%
'序列的总数为';k;
如果n> 四,
'请输入n<=4'
终止
如果n==2
v = 1;
对于i=1:k-1
: mtx (1) = x(我:);
对于j=1:k-1
: mtx (2) = x (j:);
试验=“F”
s=1;
rst(s)=0;
对于co1=1:m
对于二氧化碳=1:m
如果co1 ~ =二氧化碳
如果总和(rst==mtx(1,co1)+mtx(2,co2))==0
试验=“不”
Rst (s) = mtx(1,co1) + mtx(2,co2);
s=s+1;
其他的
试验=“F”
打破
终止
终止
终止
如果测试= =“F”
打破
终止
终止
如果测试= =“不”
序号(:,:,v)=mtx;
v = v + 1;
如果v>所需的\u数量\u解决方案万博 尤文图斯
= true;
打破
终止
如果v > P
打破
终止
终止
清晰的rst
终止
如果完成;打破终止
如果v > P
打破
终止
终止
终止
如果n==3
v = 1;
对于i=1:k-1
: mtx (1) = x(我:);
对于j=1:k-1
: mtx (2) = x (j:);
对于l = 1: k - 1
试验=“F”
mtx(3,:)=x(l,:);
s=1;
rst = 0;
mtx;
对于co1=1:m
对于二氧化碳=1:m
如果co1 ~ =二氧化碳
如果总和(rst==mtx(1,co1)+mtx(2,co2))==0
试验=“不”
Rst (s) = mtx(1,co1) + mtx(2,co2);
s=s+1;
其他的
试验=“F”
打破
终止
终止
终止
如果完成;打破终止
如果测试= =“F”
打破
终止
终止
如果完成;打破终止
如果测试= =“F”
打破
终止
对于二氧化碳=1:m
对于co3=1:m
如果二氧化碳~ =二氧化碳
如果Sum (rst == mtx(2,co2) + mtx(3,co3))==0
试验=“不”
rst(s)=mtx(2,co2)+mtx(3,co3);
s=s+1;
其他的
试验=“F”
打破
终止
终止
终止
如果完成;打破终止
如果测试= =“F”
打破
终止
终止
如果完成;打破终止
%如果测试= = ' F '
%中断;
%结束
如果测试= =“不”
序号(:,:,v)=mtx;
v = v + 1;
如果v>所需的\u数量\u解决方案万博 尤文图斯
= true;
打破
终止
如果v > P
打破
终止
终止
清晰的rst
终止
如果完成;打破终止
如果v > P
打破
终止
终止
如果完成;打破终止
如果v > P
打破
终止
终止
终止
如果n==4
v = 1;
对于i=1:k-1
: mtx (1) = x(我:);
对于j=1:k-1
: mtx (2) = x (j:);
对于l = 1: k - 1
mtx(3,:)=x(l,:);
对于h = 1: k - 1
试验=“F”
mtx(4,:)=x(h,:);
s=1;
rst = 0;
mtx;
对于co1=1:m
对于二氧化碳=1:m
如果co1 ~ =二氧化碳
如果总和(rst==mtx(1,co1)+mtx(2,co2))==0
试验=“不”
Rst (s) = mtx(1,co1) + mtx(2,co2);
s=s+1;
其他的
试验=“F”
打破
终止
终止
终止
如果完成;打破终止
如果测试= =“F”
打破
终止
终止
如果完成;打破终止
如果测试= =“F”
打破
终止
对于二氧化碳=1:m
对于co3=1:m
如果二氧化碳~ =二氧化碳
如果Sum (rst == mtx(2,co2) + mtx(3,co3))==0
试验=“不”
rst(s)=mtx(2,co2)+mtx(3,co3);
s=s+1;
其他的
试验=“F”
打破
终止
终止
终止
如果完成;打破终止
如果测试= =“F”
打破
终止
终止
如果完成;打破终止
如果测试= =“F”
打破
终止
对于co3=1:m
对于co4=1:m
如果co3~=co4
如果Sum (rst == mtx(3,co3) + mtx(4,co4))==0
试验=“不”
Rst (s) = mtx(3,co3) + mtx(4,co4);
s=s+1;
其他的
试验=“F”
打破
终止
终止
终止
如果完成;打破终止
如果测试= =“F”
打破
终止
终止
如果完成;打破终止
如果测试= =“不”
序号(:,:,v)=mtx;
v = v + 1;
如果v>所需的\u数量\u解决方案万博 尤文图斯
= true;
打破
终止
终止
如果v > P
打破
终止
清晰的rst
终止
如果完成;打破终止
如果v > P
打破
终止
终止
如果完成;打破终止
如果v > P
打破
终止
如果完成;打破终止
终止
如果v > P
打破
终止
终止
终止
'唯一的序列是:'
'! 完了

答案(3)

Rik
Rik 2021年9月16日19:47
编辑:Rik 2021年9月16日19:52
显然,您的代码不能保证创建 序号 变量因为它只发生在以开头的块中 测试=='T' ,那一定意味着 测验 不等于 “不” 在正确的时间。
因为您决定不使用任何注释,所以很难遵循您的代码并给出有意义的建议来解决问题。为什么不确保解释代码的作用?为什么所有内容都在一个大函数中,而不是将任务拆分为更小的(有文档记录的!)单元?
另外,为什么不在函数的开始处设置块来检查输入是否正确呢?如果 N 仅允许为小于5的正整数,请检查并返回有意义的错误。
5个评论
hothifa hasanat
hothifa hasanat 2021年9月17日8时42分
当你和我交谈时,你的语言很糟糕,你告诉我去问我的朋友谁为我写了这篇文章,你不知道我的情况是什么,让我到这里来寻求帮助,我想这个网站是为像我这样的乞丐而设的,他们要求像你这样的专业人士给他们所需要的帮助,但是你给了他们一个布道。不管怎样,只要你能,我请你帮助我,谢谢你。

登录评论。


图像分析
图像分析 2021年9月16日19:52
我同意Rik的说法,这是一堆乱七八糟的未注释字母表代码
作用[N, V, seq] = addition1_opt(N, m, P)
%创建输出变量,这样即使出现问题,我们至少也会有一些东西。
N=[];
V=[];
seq=[];
%其余代码如下所示。
现在seq就被定义了。它是空的,但它仍然是被定义的你不会得到关于它没有被定义的错误,尽管你可能会得到其他类型的错误。
如果您需要更多帮助,请注释您的代码,并告诉我们您为n、m和P发送了什么。
10条评论
图像分析
图像分析 2021年9月17日13:57
很抱歉,未注释的代码需要更长的时间才能理解我允许回答论坛问题。但我会告诉你如何自己解决这个问题:
另一种方法是加入注释。我经常发现,当人们加入注释时,他们会发现代码/逻辑中的错误。所以试试。否则,你就只能用调试器一行一行地进行调试了。但里克和我给你捐的工作量太大了,抱歉。

登录评论。


舒比
舒比 2021年9月29日0:08
如果你还在的话……
我发现你的程序有几个问题:
1.)变量"P"和"required_number_of_solutions"之间有冲突-> P来自输入参数列表,"required_number万博 尤文图斯_of_solutions"被定义为"10",在第14行。稍后在程序代码中使用这两个术语:
如果v>所需的\u数量\u解决方案万博 尤文图斯
如果v > P
这导致了一些并发症。
2.)第28到30行是:
如果n> 四,
'请输入n<=4'
终止
它什么也不做,但在代码中有三个单独的循环,用于“n==2”,“n==3”和“n==4”。因此,如果您为“n”输入的数字不是2、3或4,则不会发生任何事情。特别是,不会计算“seq”。
3.)在输出参数列表中有一个大写字母“V”,但在代码中只使用小写字母“V”。
4)。行:
'序列的总数为';k;
什么都不做->写
disp (['序列总数为:',num2str(k)];
相反,如果你想在屏幕上有任何反馈。
5.)无法保证该计划会找到解决方案。在这种情况下,没有定义“seq”,这就是产生错误消息的原因。您从“Image Analyst”获得了一个版本,他在其中添加了“seq=[]”——这显然抑制了错误消息,然而,这表明程序存在更深层次的问题。
n + 1)。我不确定这个清单是否完整。
然而,作为一个个人的脑筋急用,我从提交的程序中扣除了原始任务,并创建了一个工作版本(至少它在我的MATLAB版本7.1.0.246 (R14)上工作)……
原始程序代码已所剩无几,因为我发现单独处理“n”的不同值很难。我采用递归方法。所以我不知道它是否对你有帮助?
向你问好,塞巴斯蒂安
作用[N, V, seq] = addition3_opt (N, p)
%该程序解决了用户Hothifa Hasanat在
%“MATLAB答案”论坛。
%
%任务本身是从有故障的原始程序推导出来的:
%
%我们的活动范围是有n行和m列的矩阵
我们正在寻找每两个数字的所有和的安排
%在连续的行和不同的列中是不同的。
%
%这些解决方案万博 尤文图斯存储在“seq”中。
%一旦找到“p”解,程序就会停止万博 尤文图斯。
%
由于行数的变化会影响
矩阵和求值,该任务采用递归函数求解。
%
%亲切的问候,塞巴斯蒂安®
全球nn x k v pp序列号
如果n> 十,;disp(“请输入n < = 10”);回来终止
如果n<2;disp('请输入n>=2');回来终止
如果m<2;disp(“请输入m > = 2”);回来终止
%if n<=4; / /输入n<=4
disp (['行数n= ',num2str(n)];
disp (['列数m= ', num2str (m)));
disp (['解决方案数量:p='万博 尤文图斯0.01num2str (p)));
disp (' ');
disp (['等待初始化所有组合…']);
L=ceil((6*(n-1)+1)/2);% % % % % % ??? 这个公式是从哪里来的???
N=(阶乘(L)/阶乘(L-m))^N;
H=nchoosek(L,m);从L个元素中选择m个元素的组合数
C=nchoosek(1:L,m);%L元素中的m元素的所有可能组合
x = [];%生成列表的所有可能的行:
对于i=1:H;
x = [x;烫发(C(我,:)));
终止
k=尺寸(x,1);%可能的行数
disp (['可能的行总数为:',num2str(k)];
disp ([num2str (k ^ n),'行的组合是可能的:']);
disp (' ');
%发明一个求和的索引矩阵
[na,nb]=网格(1:m);fab=find(na~=nb);
isum = [na (fab), nb (fab) + m];
x = x。';我更喜欢处理专栏
seq = [];%空矩阵的解万博 尤文图斯
v = 0;%计算解决方案的数量万博 尤文图斯
页= p;最大解数%万博 尤文图斯
nn = n;%所需行数
%以0行和空矩阵开始递归
%==============================
记录添加1部分(0,[],[]);%第一行
%==============================
V = V;%找到的解决方案数万博 尤文图斯
显示([num2str(v),的解万博 尤文图斯决方案:]);
% disp (seq);
%========================================================================
%下面是递归函数
作用rec_add1opt (nloc mtx, ksum)
全球nn x k v pp序列号
如果v > =页;回来终止
nloc = nloc + 1;%现在在“nloc”行工作
%disp(['now working in row: ',num2str(nloc)]);
如果nloc > = 2;
ksum = [ksum; isum + (nloc-2) *大小(x, 1)];%追加下一行的和索引
终止
%------------------------------------------------------------------------
对于我= 1:k;添加并尝试所有可能的行
mtxloc =(简称mtx, x (:, i));
如果v > =页;回来终止
如果(nloc%如果没有足够的行
%==========================================
rec_add1opt (nloc mtxloc ksum);%多一行
%==========================================
其他的%行完成,因此我们检查MTX是否是一个解决方案
如果nloc > = 2;%总和仅适用于至少2行
sumlist =总和(mtxloc (ksum), 2);%清单上所有需要检查的金额
如果和(差(排序(sumlist))==0)==0;%所有的总数是不同的!!!!
disp ([“解决方案nr:”,num2str(v)];%显示溶液的数量
disp(mtxloc.);%显示解决方案
v = v + 1, seq (:,:, v) = mtxloc。';%将解决方案存储在seq()中
终止
终止
终止
终止
%========================================================================

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!

翻译人