[已解决] 求助while循环进入死循环

[复制链接]
caicaicon 发表于 2021-9-6 22:40:25
求问各位大佬,写了个函数,目的是为了找到电流不超过5A时候,V1的最大电压。用了while循环,每循环一次加0.1V电压。但是运行的时候进入死循环停不下来,求大佬们帮忙看看,为啥break不了呀。谢谢!

function [V1] = MaxV1(circuitparameters)
% finds maximum voltage V1 before the maximum current
% flowing through any of the wires exceeds 5A.
% Author: M
% Input:
% an array of circuit parameters [V1 R2 V3 R4 R5] in this order.
% Output:
% the maximum voltage V1.

% Set first value of V1

V1 = circuitparameters(1);


while V1 ~= 0

% Calculate currents, call function

    currents = ElectricalCircuitCurrent(circuitparameters) (电流计算是用的已经有了的函数。)

    if (abs(currents(1))<=5) & (abs(currents(2))<=5) & (abs(currents(3))<=5) & (abs(currents(4))<=5) & (abs(currents(5))<=5)

     V1 = V1 + 0.1;

    else
        break

    end

end

end

最佳答案


TouAkira 发表于 2021-9-6 22:57:40
本帖最后由 TouAkira 于 2021-9-6 11:05 编辑

这种精度导致的问题基本每个月都有人来问,稍微查查旧帖都有
关于数组逻辑运算的一个疑问

简而言之,尽量避免 甲 ~= 乙 这样的判断,改用 abs( 甲 - 乙) < 容差 这样的形式

因为对浮点数值 甲 乙 而言,即使它们俩是同一个数值通过不同方法计算对应的数值,也可能会有微小偏差,这是浮点精度导致的误差,并不是本应相等的甲乙两者真的不同。

还有,写代码前最好先绘制一个流程框图,把诸如哪些量是已知的,哪一步要进行逻辑判断,采用何种循环语句,最后得到什么样的输出结果,等等,都清楚地列出来。

你这个代码的循环控制就有一堆在外人看来难以理解的地方,判断条件 V1 ~= 0 是否可能达成“否”并停机,这条上面已经讲过了;另外就是你的循环更新,你对V1进行了更新,但是这个currents 还是沿用的老数值啊(至少目前看不出本次与上次计算之间会有什么差异,除非你这个V1是全局变量能跨过当前函数、影响到其他函数中的计算),如果第一次能够落在满足if条件的分支中,则后面每次都继续落在这个条件中,根本达不成break那个分支啊。
回复此楼

2 条回复


TouAkira 发表于 2021-9-6 22:57:40
本帖最后由 TouAkira 于 2021-9-6 11:05 编辑

这种精度导致的问题基本每个月都有人来问,稍微查查旧帖都有
关于数组逻辑运算的一个疑问

简而言之,尽量避免 甲 ~= 乙 这样的判断,改用 abs( 甲 - 乙) < 容差 这样的形式

因为对浮点数值 甲 乙 而言,即使它们俩是同一个数值通过不同方法计算对应的数值,也可能会有微小偏差,这是浮点精度导致的误差,并不是本应相等的甲乙两者真的不同。

还有,写代码前最好先绘制一个流程框图,把诸如哪些量是已知的,哪一步要进行逻辑判断,采用何种循环语句,最后得到什么样的输出结果,等等,都清楚地列出来。

你这个代码的循环控制就有一堆在外人看来难以理解的地方,判断条件 V1 ~= 0 是否可能达成“否”并停机,这条上面已经讲过了;另外就是你的循环更新,你对V1进行了更新,但是这个currents 还是沿用的老数值啊(至少目前看不出本次与上次计算之间会有什么差异,除非你这个V1是全局变量能跨过当前函数、影响到其他函数中的计算),如果第一次能够落在满足if条件的分支中,则后面每次都继续落在这个条件中,根本达不成break那个分支啊。
回复此楼

caicaicon 发表于 2021-9-7 06:38:57
TouAkira 发表于 2021-9-6 22:57
这种精度导致的问题基本每个月都有人来问,稍微查查旧帖都有
《关于数组逻辑运算的一个疑问》

谢谢回答,简直一下理清了我混乱的逻辑,太谢谢了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表