Matlab:执行循环直到满足指定条件
Matlab: Execute the loop until the specified conditions are met
最近遇到一个简单的问题,自己解决不了。我有一个 Simulink 模型,它使用 matlab 函数在模型内部进行一些计算。这个想法是,在某个特定的时刻,我需要改变电力驱动器的电压。我需要改变它,直到转子的位置达到另一个指定值。例如:
If control_signal == 1; (command to start the execution);
While Angle ~= 180 \ desired angle is 180;
Control voltage = 5 - 0.1 (5V is the initial value, while the increment of
the voltage change is 0.1)
End
end
所以从技术上讲,我的想法会发生,即循环将执行直到达到 180 度角,控制电压的某个值(例如 4.6)。但是当我是运行这段代码的时候,Simulink无法执行模型。因此,在没有任何警告或错误的情况下,模拟会在某个阶段冻结(当主要条件开始时)。所以看起来它在循环执行开始时无法进一步处理。有人可以帮我处理代码吗?因为模型在仿真过程中所描述的行为肯定是由上述代码引起的。
提前致谢。
我的猜测是您将以弧度表示的角度值转换为度数,并使用三角函数预先计算角度 - 它永远不会精确到 180 度。您应该选择一些 epsilon,使得 180 - epsilon
对于您的应用程序 足够接近 到 180,并将该值用作您的循环条件。
此外,根据您对要解决的问题的描述,听起来您实际上想要检查角度是否不大于 180,而不是是否等于 180。
此外,您错误地增加了电压。每次您进入循环时,您的 control_voltage 变量等于 5 - 0.1,这意味着它是常数并且无论您 运行 该循环多少次都将等于 4.9。这是正确的方法:
control_voltage = 5; % initial value
if control_signal == 1; (command to start the execution);
while Angle ~= (180 - epsilon) % some epsilon of your choice
control_voltage = control_voltage - 0.1; % now it's smaller by 0.1 every time the loop is run
end
end
最近遇到一个简单的问题,自己解决不了。我有一个 Simulink 模型,它使用 matlab 函数在模型内部进行一些计算。这个想法是,在某个特定的时刻,我需要改变电力驱动器的电压。我需要改变它,直到转子的位置达到另一个指定值。例如:
If control_signal == 1; (command to start the execution);
While Angle ~= 180 \ desired angle is 180;
Control voltage = 5 - 0.1 (5V is the initial value, while the increment of
the voltage change is 0.1)
End
end
所以从技术上讲,我的想法会发生,即循环将执行直到达到 180 度角,控制电压的某个值(例如 4.6)。但是当我是运行这段代码的时候,Simulink无法执行模型。因此,在没有任何警告或错误的情况下,模拟会在某个阶段冻结(当主要条件开始时)。所以看起来它在循环执行开始时无法进一步处理。有人可以帮我处理代码吗?因为模型在仿真过程中所描述的行为肯定是由上述代码引起的。
提前致谢。
我的猜测是您将以弧度表示的角度值转换为度数,并使用三角函数预先计算角度 - 它永远不会精确到 180 度。您应该选择一些 epsilon,使得 180 - epsilon
对于您的应用程序 足够接近 到 180,并将该值用作您的循环条件。
此外,根据您对要解决的问题的描述,听起来您实际上想要检查角度是否不大于 180,而不是是否等于 180。
此外,您错误地增加了电压。每次您进入循环时,您的 control_voltage 变量等于 5 - 0.1,这意味着它是常数并且无论您 运行 该循环多少次都将等于 4.9。这是正确的方法:
control_voltage = 5; % initial value
if control_signal == 1; (command to start the execution);
while Angle ~= (180 - epsilon) % some epsilon of your choice
control_voltage = control_voltage - 0.1; % now it's smaller by 0.1 every time the loop is run
end
end