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

41次浏览(最近30天)
hothifa hasanat
hothifa hasanat 2021年9月16日
回答: Schubie2021年9月29日0:08
函数[N,V,seq] = addition1_opt(N, m,P)
这个函数的摘要在这里
这里有详细的解释
% n = str2num (n);
% m = str2num (m);
% x = str2num (x);
等待初始化所有序列组合…
L =装天花板((6 * (n - 1) + 1) / 2);
N = (! (L) / ! (L m)) ^ N;
C = nchoosek (1: L, m);
H =(阶乘(左)/ (! (m) * ! (L m)));
k = 1;
= false;
required_number_of_金宝搏官方网站solutions = 10;
i = 1: H
x_temp =烫发(C(我,:));
j = 1:阶乘(m)
x (k,:) = x_temp (j:);
k = k + 1;
结束
结束
x;
% for ro = 1:n
% mtx(ro,:) = x(
'序列总数为';k;
如果n > 4
“请输入n < = 4”
结束
如果n = = 2
v = 1;
我= 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 ~ =二氧化碳
如果Sum (rst == mtx(1,co1) + mtx(2,co2))==0
测试=“T”
Rst (s) = mtx(1,co1) + mtx(2,co2);
s = s + 1;
其他的
测试=“F”
打破
结束
结束
结束
如果测试= =“F”
打破
结束
结束
如果测试= =“T”
seq (:,:, v) = mtx;
v = v + 1;
如果v > required_number_of_金宝搏官方网站solutions
= true;
打破
结束
如果v > P
打破
结束
结束
清晰的rst
结束
如果完成;打破结束
如果v > P
打破
结束
结束
结束
如果n = = 3
v = 1;
我= 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 ~ =二氧化碳
如果Sum (rst == mtx(1,co1) + mtx(2,co2))==0
测试=“T”
Rst (s) = mtx(1,co1) + mtx(2,co2);
s = s + 1;
其他的
测试=“F”
打破
结束
结束
结束
如果完成;打破结束
如果测试= =“F”
打破
结束
结束
如果完成;打破结束
如果测试= =“F”
打破
结束
二氧化碳= 1:m
二氧化碳= 1:m
如果二氧化碳~ =二氧化碳
如果Sum (rst == mtx(2,co2) + mtx(3,co3))==0
测试=“T”
Rst (s) = mtx(2,co2) + mtx(3,co3);
s = s + 1;
其他的
测试=“F”
打破
结束
结束
结束
如果完成;打破结束
如果测试= =“F”
打破
结束
结束
如果完成;打破结束
%如果测试= = ' F '
%打破;
%结束
如果测试= =“T”
seq (:,:, v) = mtx;
v = v + 1;
如果v > required_number_of_金宝搏官方网站solutions
= true;
打破
结束
如果v > P
打破
结束
结束
清晰的rst
结束
如果完成;打破结束
如果v > P
打破
结束
结束
如果完成;打破结束
如果v > P
打破
结束
结束
结束
如果n = = 4
v = 1;
我= 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 ~ =二氧化碳
如果Sum (rst == mtx(1,co1) + mtx(2,co2))==0
测试=“T”
Rst (s) = mtx(1,co1) + mtx(2,co2);
s = s + 1;
其他的
测试=“F”
打破
结束
结束
结束
如果完成;打破结束
如果测试= =“F”
打破
结束
结束
如果完成;打破结束
如果测试= =“F”
打破
结束
二氧化碳= 1:m
二氧化碳= 1:m
如果二氧化碳~ =二氧化碳
如果Sum (rst == mtx(2,co2) + mtx(3,co3))==0
测试=“T”
Rst (s) = mtx(2,co2) + mtx(3,co3);
s = s + 1;
其他的
测试=“F”
打破
结束
结束
结束
如果完成;打破结束
如果测试= =“F”
打破
结束
结束
如果完成;打破结束
如果测试= =“F”
打破
结束
二氧化碳= 1:m
co4 = 1: m
如果二氧化碳~ = co4
如果Sum (rst == mtx(3,co3) + mtx(4,co4))==0
测试=“T”
Rst (s) = mtx(3,co3) + mtx(4,co4);
s = s + 1;
其他的
测试=“F”
打破
结束
结束
结束
如果完成;打破结束
如果测试= =“F”
打破
结束
结束
如果完成;打破结束
如果测试= =“T”
seq (:,:, v) = mtx;
v = v + 1;
如果v > required_number_of_金宝搏官方网站solutions
= true;
打破
结束
结束
如果v > P
打破
结束
清晰的rst
结束
如果完成;打破结束
如果v > P
打破
结束
结束
如果完成;打破结束
如果v > P
打破
结束
如果完成;打破结束
结束
如果v > P
打破
结束
结束
结束
'唯一的序列是:'
”!完成了!”

答案(3)

里克
里克 2021年9月16日
编辑:里克 2021年9月16日
显然,您的代码不能保证创建 seq 变量。因为它只发生在以 测试= = ' T ' ,那一定意味着 测试 不等于 “T” 在正确的时间。
因为您决定不使用任何注释,所以很难遵循您的代码并给出有意义的建议来修复这个问题。你为什么不解释你的代码在做什么呢?为什么所有内容都在一个大函数中,而不是将任务分割成更小的单元(有文档记录!)
另外,为什么不在函数的开始处设置块来检查输入是否正确呢?如果 n 仅允许为小于5的正整数,请检查并返回有意义的错误。
5个评论
hothifa hasanat
hothifa hasanat 2021年9月17日
你有一个糟糕的语言当你与我说话,你告诉我要问一下我的朋友为我写这个,你不知道我的情况,让我在这里寻求帮助,我认为这个网站是为了发出召唤我,问proffesional喜欢你给他们他们需要的帮助,但你给一个布道。无论如何,如果你能帮我,我请求你,谢谢你。

登录评论。


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

登录评论。


Schubie
Schubie 2021年9月29日0:08
如果你还在的话……
我发现你的程序有几个问题:
1.)变量"P"和"required_number_of_solutions"之间有冲突-> P来自输入参数列表,"required_number金宝搏官方网站_of_solutions"被定义为"10",在第14行。稍后在程序代码中使用这两个术语:
如果v > required_number_of_金宝搏官方网站solutions
如果v > P
这导致了一些复杂性。
2.)第28到30行是:
如果n > 4
“请输入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”解,程序就会停止金宝搏官方网站。
由于行数的变化会影响
矩阵和求值,该任务采用递归函数求解。
%亲切的问候,塞巴斯蒂安®
全球n x k v pp seq issum
如果n > 10; 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=金宝搏官方网站 'num2str (p)));
disp (' ');
disp ([“等待初始化所有组合……”]);
L =装天花板((6 * (n - 1) + 1) / 2);% % % % % % ??这个公式是从哪里来的??
N = (! (L) / ! (L m)) ^ N;
H = nchoosek(L,m);从L个元素中选择m个元素的组合数
C = nchoosek (1: L, m);% L元素中m的所有可能组合
x = [];%生成列表的所有可能的行:
我= 1:H;
x = [x;烫发(C(我,:)));
结束
k =大小(x, 1);%可能的行数
disp (['可能行的总数是:', num2str (k)]);
disp ([num2str (k ^ n),'行的组合是可能的:']);
disp (' ');
发明一个索引矩阵用于求和
(na, nb) = meshgrid (1: m);工厂=找到(na ~ = nb);
isum = [na (fab), nb (fab) + m];
x = x。';我更喜欢处理专栏
seq = [];%空矩阵的解金宝搏官方网站
v = 0;%表示解决方案的数量金宝搏官方网站
页= p;最大解数%金宝搏官方网站
nn = n;所需的行数
%以0行和空矩阵开始递归
%==============================
rec_add1opt (0 [] []);%第一行
%==============================
V = V;找到的解的百分比金宝搏官方网站
disp ([num2str (v),的解金宝搏官方网站决方案:]);
% disp (seq);
%========================================================================
这里是递归函数
函数rec_add1opt (nloc mtx, ksum)
全球n x k v pp seq issum
如果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 < nn);如果没有足够的行
%==========================================
rec_add1opt (nloc mtxloc ksum);%多一行
%==========================================
其他的%行完成,因此我们检查MTX是否是一个解决方案
如果nloc > = 2;%sum只对最少2行可用
sumlist =总和(mtxloc (ksum), 2);%清单上所有需要检查的金额
如果sum (diff(排序(sumlist)) = = 0) = = 0;%所有的总数是不同的!!!!
disp ([“解决方案nr:”num2str (v)]);%显示nr的溶液
disp (mtxloc。');%显示解决方案
v = v + 1, seq (:,:, v) = mtxloc。';%存储解决方案在seq()
结束
结束
结束
结束
%========================================================================

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!

翻译的