Break语句在一个if语句
114(30天)
显示旧的评论
Darragh托宾
2020年4月3日
为数= 1:Iteration_lim + 1
%的错误检查功能不收敛
如果数= = Iteration_lim + 1
错误(“迭代达到极限,函数收敛失败。”)
打破
结束
这是我的一段代码,当我把break语句我得到一个错误说”这句话(也可能是以下的)不能达到“。代码运行,并返回一个最终答案,但break语句似乎没有做任何事情。这是有问题的,因为我想返回迭代的数和等效的答案,不是最终的答案,在for循环的结束。我的教授上传相同的执行此任务的代码没有问题。任何帮助都是感激。
0评论
答案(2)
杰夫•海斯
2020年4月3日
Darragh -
错误
抛出一个错误并显示一个消息,所以
打破
永远不会被称为…和so the error message makes sense (I get the same error when using it in my code). To get around this, change the
错误
到一个
流
就像
流(“迭代达到极限,函数收敛失败。\ n”);
11日评论
Darragh托宾
2020年4月3日
编辑:杰夫•海斯
2020年4月3日
谢谢你的快速回复,break语句可能不是我的问题。函数有一个输出,一个矩阵称为angleset angleset1, angleset2 angleset3, angleset4。每个angleset是一个for循环。
为数= 1:Iteration_lim + 1
%的错误检查功能不收敛
如果数= = Iteration_lim + 1
错误(“迭代达到极限,函数收敛失败。”)
结束
%关闭方程1和2
C1 = L1 * cos (angleset1 (1)) - 2.4 * cos (angleset1(2) +(π/ 2))- 4.5 * cos (angleset1 (2)) - 2.4;
C2 = L1 * sin (angleset1(1)) - 2.4 *罪(angleset1(2) +(π/ 2))- 4.5 *罪(angleset1 (2)) + 2.1;
f1 = (C1, C2);
%的错误检查公差极限被超过
如果abs (f1(1) & & <容忍abs (f1(2) <宽容
打破
结束
% C1和C2的偏导数
derivC1 = [l1 * sin (angleset1 (1)), (4.5 * sin (angleset1 (2)) + 2.4 * cos (angleset1 (2))));
derivC2 = [L1 * cos (angleset1 (1)), (-4.5 * cos (angleset1(2)) + 2.4 *罪(angleset1 (2))));
derivf1 = [derivC1; derivC2];
%牛顿拉富生一步
angleset1 = angleset1 -(发票(derivf1)) * f1;
结束
我想做的是返回的值为每个循环计数,即迭代的总数,也相应的价值angleset在每个迭代。我试着添加
angleset1;
count1;
只是在年底前4循环,但它没有工作。的计算需要一个输出函数?谢谢。
杰夫•海斯
2020年4月3日
Darragh——使用一个数组来管理angleset数据。数组的长度将被用来确定迭代的数量:
angleset = [];
angleset (1) = angleset1;% < - - - - - - -大概这上面设置的地方
为数= 1:Iteration_lim + 1
%的错误检查功能不收敛
如果数= = Iteration_lim + 1
错误(“迭代达到极限,函数收敛失败。”)
结束
%关闭方程1和2
C1 = L1 * cos (angleset1 (1)) - 2.4 * cos (angleset1(2) +(π/ 2))- 4.5 * cos (angleset1 (2)) - 2.4;
C2 = L1 * sin (angleset1(1)) - 2.4 *罪(angleset1(2) +(π/ 2))- 4.5 *罪(angleset1 (2)) + 2.1;
f1 = (C1, C2);
%的错误检查公差极限被超过
如果abs (f1(1) & & <容忍abs (f1(2) <宽容
打破
结束
% C1和C2的偏导数
derivC1 = [l1 * sin (angleset1 (1)), (4.5 * sin (angleset1 (2)) + 2.4 * cos (angleset1 (2))));
derivC2 = [L1 * cos (angleset1 (1)), (-4.5 * cos (angleset1(2)) + 2.4 *罪(angleset1 (2))));
derivf1 = [derivC1; derivC2];
%牛顿拉富生一步
angleset(数+ 1)= angleset(计数)——(发票(derivf1)) * f1;
结束
Darragh托宾
2020年4月3日
你好杰夫抱歉不得不回到你,但是我不能让这种方法工作。下面是我的全功能之前我试图实现方法。
函数[angleset] = Backhoe_Angles (X, Y, Z)
% [angleset] = Backhoe_Angles (X, Y, Z)
%这个函数是用来计算的角度反铲
%为给定的配置。
%
%的输入:
% X(真正的标量)伸长的百分比的最小长度
%的第一个内存
% Y(真正的标量)伸长的百分比的最小长度
%的第二个内存
% Z(真正的标量)伸长的百分比的最小长度
%的第三个内存
%
%输出:
% angleset数组包含八个角度计算
%
%版本2:02/04/2020创建。作者:Darragh托宾
%确保输入是有效的百分比
如果Y (X | | | | Z) < 0) | | ((X | | Y | | Z) > 100)
错误('输入X, Y, Z的范围必须在0 - 100的)
结束
%定义三种公羊的长度,我。e estimaated L1的最小长度是2.4
%最大长度估计为2.4 + 4.8 = 7.2
L1 = 2.4 + (X / 100) * (4.8);
L2 = 8.7 + (Y / 100) * (1.8);
L3 = 11.1 + (Z / 100) * (3.1);
公差= 10 ^ 5;%设置toleranc限制
Iteration_lim = 20;%设置迭代限制
%角度1和2
angleset1 =[30 *π/ 180;40 * 180(π/];%初始θ₁和θ的估计转换为弧度
为count1 = 1: Iteration_lim + 1
%的错误检查功能不收敛
如果count1 = = Iteration_lim + 1
错误(“迭代达到极限,函数收敛失败。”)
结束
%关闭方程1和2
C1 = L1 * cos (angleset1 (1)) - 2.4 * cos (angleset1(2) +(π/ 2))- 4.5 * cos (angleset1 (2)) - 2.4;
C2 = L1 * sin (angleset1(1)) - 2.4 *罪(angleset1(2) +(π/ 2))- 4.5 *罪(angleset1 (2)) + 2.1;
f1 = (C1, C2);
%的错误检查公差极限被超过
如果abs (f1(1) & & <容忍abs (f1(2) <宽容
打破
结束
% C1和C2的偏导数
derivC1 = [l1 * sin (angleset1 (1)), (4.5 * sin (angleset1 (2)) + 2.4 * cos (angleset1 (2))));
derivC2 = [L1 * cos (angleset1 (1)), (-4.5 * cos (angleset1(2)) + 2.4 *罪(angleset1 (2))));
derivf1 = [derivC1; derivC2];
%牛顿拉富生一步
angleset1 = angleset1 -(发票(derivf1)) * f1;
结束
%角度3和4
angleset2 =[165 *π/ 180、105 * 180(π/);% 1的初步估计,theta4转换为弧度
为是从= 1:Iteration_lim + 1
%的错误检查功能不收敛
如果是从= = Iteration_lim + 1
错误(“迭代达到极限,函数收敛失败。”)
结束
%关闭方程3和4
C3 = l2 * cos (angleset2 (1)) - 0.7 * cos (angleset2(2) -(π/ 2))- 0.7 * cos (angleset2 (2)) - 9;
C4 = l2 * sin (angleset2(1)) - 0.7 *罪(angleset2(2) -(π/ 2))- 0.7 *罪(angleset2 (2)) + 2.9;
f2 = (C3、C4);
%的错误检查公差极限被超过
如果abs (f2(1) & & <容忍abs (f2(2)) <宽容
打破
结束
% C3和C4的偏导数
derivC3 = [L2 * sin (angleset2 (1)), (-0.7 * cos (angleset2(2)) + 0.7 *罪(angleset2 (2))));
derivC4 = [l2 * cos (angleset2 (1)), (-0.7 * sin (angleset2 (2)) -0.7 * cos (angleset2 (2))));
derivf2 = [derivC3; derivC4];
%牛顿拉富生一步
angleset2 = angleset2 -(发票(derivf2)) * f2;
结束
%角度5和6
angleset3 =(π,60 *π/ 180);%的初始估计theta5 theta6,转换为弧度
为count3 = 1: Iteration_lim + 1
%的错误检查功能不收敛
如果count3 = = Iteration_lim + 1
错误(“迭代达到极限,函数收敛失败。”)
结束
%关闭方程5和6
C5 = L3 * cos (angleset3 (1) + 2.1 * cos (angleset3 (2)) + 11.3;
C6 = L3 * sin (angleset3(1) + 2.1 *罪(angleset3 (2)) + 1.5;
f3 = (C5、C6);
%的错误检查公差极限被超过
如果abs (f3(1) & & <容忍abs (f3(2) <宽容
打破
结束
% C5、C6的偏导数
derivC5 = (l3 * sin (angleset3 (1)), (-2.1 * sin (angleset3 (2))));
derivC6 = (L3 * cos (angleset3 (1)), (2.1 * cos (angleset3 (2))));
derivf3 = [derivC5; derivC6];
%牛顿拉富生一步
angleset3 = angleset3 -(发票(derivf3)) * f3;
结束
%角7和8
angleset4 =[160 *π/ 180;50 * 180(π/];%初始估计theta7 theta8,转换为弧度
为count4 = 1: Iteration_lim + 1
%的错误检查功能不收敛
如果count4 = = Iteration_lim + 1
错误(“迭代达到极限,函数收敛失败。”)
结束
%关闭方程7和8
C7 = 2.9 * cos (angleset4 (1) + 3.3 * cos (angleset4 (2)) - 2.1 * cos (angleset3 (2) + 1;
C8 = 2.9 * sin (angleset4(1) + 3.3 *罪(angleset4(2)) - 2.1 *罪(angleset3 (2)) - 0.6;
f4 = (C7、C8);
%的错误检查公差极限被超过
如果abs (f4(1) & & <容忍abs (f4(2) <宽容
打破
结束
% C7、C8的偏导数
derivC7 = (-2.9 * sin (angleset4(1)), -3.3 *罪(angleset4 (2)));
derivC8 = (2.9 * cos (angleset4 (1)), 3.3 * cos (angleset4 (2)));
derivf4 = [derivC7; derivC8];
%牛顿拉富生一步
angleset4 = angleset4 -(发票(derivf4)) * f4;
结束
%输出angleset数组包含八个角度计算
angleset = [angleset1 (1); angleset1 (2); angleset2 (1); angleset2 (2); angleset3 (1); angleset3 (2); angleset4 (1); angleset4 (2)];
杰夫•海斯
2020年4月3日
Darragh -请澄清你的意思
我不能让这种方法工作。
有错误吗?如果是这样,他们是什么?看来,
angleset1
是一个2 x1数组,而不是一个标量(我以为)。我认为你可以改变的代码
angleset = [];
angleset (: 1) = angleset1;% 2 x1
为数= 1:Iteration_lim + 1
%其他代码
%牛顿拉富生一步
angleset(:,计数+ 1)= angleset(:,) -(发票(derivf1)) * f1;
结束
你需要遍历代码以确保上述作品....
Darragh托宾
2020年4月4日
它返回一个错误“无法执行任务,因为左右有不同数量的元素”
当你说
angleset = [];
你的意思是我应该包括所有八个角估计在数组的开头的代码,而不是估计两个每个循环的开头?
Darragh托宾
2020年4月6日
编辑:杰夫•海斯
2020年4月6日
%角度1和2
angleset1 =[30 *π/ 180;40 * 180(π/];%初始θ₁和θ的估计转换为弧度
angleset = [];
angleset (: 1) = angleset1;
为count1 = 1: Iteration_lim + 1
%的错误检查功能不收敛
如果count1 = = Iteration_lim + 1
错误(“迭代达到极限,函数收敛失败。”)
结束
%关闭方程1和2
C1 = L1 * cos (angleset1 (1)) - 2.4 * cos (angleset1(2) +(π/ 2))- 4.5 * cos (angleset1 (2)) - 2.4;
C2 = L1 * sin (angleset1(1)) - 2.4 *罪(angleset1(2) +(π/ 2))- 4.5 *罪(angleset1 (2)) + 2.1;
f1 = (C1, C2);
%的错误检查公差极限被超过
如果abs (f1(1) & & <容忍abs (f1(2) <宽容
打破
结束
% C1和C2的偏导数
derivC1 = [l1 * sin (angleset1 (1)), (4.5 * sin (angleset1 (2)) + 2.4 * cos (angleset1 (2))));
derivC2 = [L1 * cos (angleset1 (1)), (-4.5 * cos (angleset1(2)) + 2.4 *罪(angleset1 (2))));
derivf1 = [derivC1; derivC2];
%牛顿拉富生一步
angleset(:,计数+ 1)= angleset(:,) -(发票(derivf1)) * f1;
结束
这是我所写的第一个for循环。我得到的错误是“错误使用计数。没有足够的输入参数”
杰夫•海斯
2020年4月6日
错误消息表明,一个函数
数
存在在你的MATLAB代码搜索路径,试图调用这个函数在(可能)
angleset(:,计数+ 1)= angleset(:,) -(发票(derivf1)) * f1;
注意你正在使用
数
但是你的索引/迭代变量
count1
为count1 = 1: Iteration_lim + 1
所以只做
angleset (:, count1 + 1) = angleset (:, count1) -(发票(derivf1)) * f1;
代替。
Darragh托宾
2020年4月8日
我通过我所有的代码,可以仍然没有得到函数收敛。我的教授提供的这段代码,说这是他返回vlue计数。然而,我不认为它将如何工作的指望第二行似乎并不做任何事和他没有作为输出。后他还包括一个break语句错误消息也迷惑我。
为数= 1:Iteration_limit + 1
计数;
如果数= = Iteration_limit + 1%函数返回错误如果函数没有convergeerror(迭代限制。迭代不收敛”)
打破
结束
他声称调用变量指望第二行是充分的然而,当我尝试这样做时我得到了错误”“数”产生的值可能是未使用的。
1评论
杰夫•海斯
2020年4月8日
我怀疑“计数”产生的值可能是未使用的。是一个警告,而不是一个错误可以忽略。你是对的,有“数”;在第二行没有。收敛的问题可能与此无关,但可能与您的实现的代码。可能当你说f
困扰所有输入值的收敛
你的意思是你没有得到正确的答案,你的代码总是到达最大迭代数。这是正确的吗?
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。