Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 将if/else语句转换为允许多个选项的代码_Matlab_If Statement_Matrix_Switch Statement_Octave - Fatal编程技术网

Matlab 将if/else语句转换为允许多个选项的代码

Matlab 将if/else语句转换为允许多个选项的代码,matlab,if-statement,matrix,switch-statement,octave,Matlab,If Statement,Matrix,Switch Statement,Octave,因此,我正在尝试转换以下代码,以便能够使用不止一个选项。(案例内部发生的情况无关紧要,我只想弄清楚如何一次使用多个案例) 我尝试使用开关/案例或条件,但无法获得不同的结果 该代码的最终目标是能够选择应力张量旋转的方向。我的代码适用于简单的情况,但我希望它能够在不重新运行代码的情况下以30度的x轴旋转和45度的y轴旋转进行计算。要回答您关于代码流的问题,最简单的if/elseif/else链替换方法是使用switch语句 switch Dir % for a single axis rot

因此,我正在尝试转换以下代码,以便能够使用不止一个选项。(案例内部发生的情况无关紧要,我只想弄清楚如何一次使用多个案例)

我尝试使用开关/案例或条件,但无法获得不同的结果


该代码的最终目标是能够选择应力张量旋转的方向。我的代码适用于简单的情况,但我希望它能够在不重新运行代码的情况下以30度的x轴旋转和45度的y轴旋转进行计算。

要回答您关于代码流的问题,最简单的
if/elseif/else
链替换方法是使用
switch
语句

switch Dir
    % for a single axis rotation
    case 'x'
        % Code for a rotation about a single axes ('X')
    case 'y'
        % Code for a rotation about a single axes ('Y')
    case 'z'
        % Code for a rotation about a single axes ('Z')
    
    %% For complex rotation about more than one axes
    case 'xy'
        % Code for a rotation about 2 axes ('X' and 'Y')
    case 'xz'
        % Code for a rotation about 2 axes ('X' and 'Z')
    case 'yz'
        % Code for a rotation about 2 axes ('Y' and 'Z')

    case 'xyz'
        % Code for a rotation about 3 axes ('X', 'Y' and 'Z')

    otherwise
        % advise user to re-input "Dir"
end
或者,您也可以使用一个标记系统,如您的问题下@Tasos papstyllanou评论中提到的标记系统。它的实现有点技术性,但也是一个非常好的解决方案



现在,我们只关心代码流。每种情况下计算的实际有效性取决于您。对于绕多个轴旋转,请记住应用旋转的顺序很重要:先绕
X
旋转,然后再绕
Y
,可以产生与先绕
Y
旋转,然后再绕
X
不同的结果,即使每个轴的旋转角度相同。

要回答您关于代码流的问题,最简单的
if/elseif/else
链替换方法是使用
开关
语句

switch Dir
    % for a single axis rotation
    case 'x'
        % Code for a rotation about a single axes ('X')
    case 'y'
        % Code for a rotation about a single axes ('Y')
    case 'z'
        % Code for a rotation about a single axes ('Z')
    
    %% For complex rotation about more than one axes
    case 'xy'
        % Code for a rotation about 2 axes ('X' and 'Y')
    case 'xz'
        % Code for a rotation about 2 axes ('X' and 'Z')
    case 'yz'
        % Code for a rotation about 2 axes ('Y' and 'Z')

    case 'xyz'
        % Code for a rotation about 3 axes ('X', 'Y' and 'Z')

    otherwise
        % advise user to re-input "Dir"
end
或者,您也可以使用一个标记系统,如您的问题下@Tasos papstyllanou评论中提到的标记系统。它的实现有点技术性,但也是一个非常好的解决方案



现在,我们只关心代码流。每种情况下计算的实际有效性取决于您。对于绕多个轴旋转,请记住应用旋转的顺序很重要:先绕
X
旋转,然后再绕
Y
,可以产生与先绕
Y
旋转,然后再绕
X
不同的结果,即使每个轴的旋转角度相同。

如果要构建任意旋转,则需要计算3个旋转矩阵并适当组合它们,或者一次性构建整个通用旋转矩阵。参见维基百科中的欧拉角。制作一个函数,获取沿3轴旋转的角度,在函数内部计算旋转矩阵,组合它们并返回矩阵。不需要开关和ifs。如果理解正确,请执行以下操作:
%B部分的旋转变换%围绕X旋转=[1 0 0;0余弦(θ)sind(θ);0-余弦(θ)cosd(θ)];%围绕Y旋转=[cosd(beta)0 sind(beta);0 1 0;-sind(beta)0 cosd(beta)];%关于Z旋转Z=[cosd(alpha)sind(alpha)0;-sind(alpha)cosd(alpha)0;0 0 1];%执行转换T=Rotx*Roty*Rotz;%计算合成矩阵R=T*S*T你的问题有点混乱,标题似乎与旋转本身没有任何关系,但你似乎更关心旋转,而不是做出多项选择。在任何情况下,如果您使用的是倍频程,请查看matgeom包()——在该页面中搜索关键字“rot”,以发现所有旋转/变换函数。(在八度音阶的基础上还有rotx、roty和rotz)好吧,我的主要问题与旋转无关,所以我理解这种混淆,我的目标是构建一个代码,在其中我可以在选项之间进行选择,并将它们应用到我的代码中。我发布的是我现在拥有的。该代码只允许我选择x、y或z选项中的一个。然而,我希望能够选择例如x和y(案例内部发生的情况对这个问题来说并不重要)@WisePotato15好的,这更有意义,但仍然很模糊,例如,若选择“x和y”,最终的
Rot
输出是什么?想必您不只是希望“y”步骤覆盖“x”步骤创建的步骤。因此,答案取决于您对“x和y”选项的具体操作。然而,假设您乐于为每种可能的结果组合创建单独的场景,那么典型的方法是创建“标志”。例如,用户选择“101”对应于“x和z,但不是y”。那么,二进制的101是十进制的5,所以在选项列表中选择选项5。如果你想构建任意旋转,你需要计算3个旋转矩阵并适当地组合它们,或者一次性构建整个通用旋转矩阵。参见维基百科中的欧拉角。制作一个函数,获取沿3轴旋转的角度,在函数内部计算旋转矩阵,组合它们并返回矩阵。不需要开关和ifs。如果理解正确,请执行以下操作:
%B部分的旋转变换%围绕X旋转=[1 0 0;0余弦(θ)sind(θ);0-余弦(θ)cosd(θ)];%围绕Y旋转=[cosd(beta)0 sind(beta);0 1 0;-sind(beta)0 cosd(beta)];%关于Z旋转Z=[cosd(alpha)sind(alpha)0;-sind(alpha)cosd(alpha)0;0 0 1];%执行转换T=Rotx*Roty*Rotz;%计算合成矩阵R=T*S*T你的问题有点混乱,标题似乎与旋转本身没有任何关系,但你似乎更关心旋转,而不是做出多项选择。在任何情况下,如果您使用的是倍频程,请查看matgeom包()——在该页面中搜索关键字“rot”,以发现所有旋转/变换函数。(在八度音阶的基础上还有rotx,roty和rotz)好的,我的主要问题与旋转无关,所以我理解孔子