一个电路想法

暂时只是一个不成熟的想法,不知道是否能够实现:通过一个开关完成电路的翻转,以下是当前初步的电路想法: 上面的电路看上去有些混乱,经过整理之后,重新绘制出来的电路如下:

最近电脑又出问题(蓝屏死机)

一、起因 近些年使用Windows10系统,感觉几乎没有再如早期的Windows系统那么频繁的遇到过蓝屏故障,甚至一度以为“蓝屏”已经不存在了。但就在最近两周,我的台式电脑却频繁发生蓝屏、无故崩溃。 蓝屏宕机,会在硬盘上留下一个当时的内存dump文件,经过对这个文件读取分析,给出了A1故障代码,这个代码意味着导致蓝屏的大概率是内存问题。 而通过内存检查工具,却并不能发现具体的问题,甚至检查结果是内存表现正常。无奈只好将当前台式机中的2条内存,拆卸下来一条、只保留一条16GB的使用。从昨天拆卸到此刻,感觉还好、没有再遇到蓝屏现象。 手中的这两条内存,都是新品,分别于2024年8月28日、2024年8月31日,网上购买。考虑到家中老婆电脑上只有8GB的内存、而且还是一条二手内存,如果我自己这台电脑在单条16GB运行顺利的话,就将现在拆卸下来这条拿回家用吧。 二、购买了一块新的主板 Update 20250410:昨天晚上即便只有单条内存,电脑依然又一次蓝屏崩溃了。正当我想将拆下来的另外一条装上去测试时,发现电脑已经彻底报废、无论如何也无法开机了。之后就是大费周折的一个晚上:放电之后能够开机、但是一直自动进入BIOS而不启动系统。改了CSM之后不进BIOS、能够进系统,但是再次启动之后又黑屏无法启动…… 经过反复的尝试,我最终放弃,并且将问题归罪于主板故障。所以趁着睡觉之前网购了一块新的主板。此刻已经将新的主板装上,并且顺利开机。 但是经过上面这来来回回反复的“折腾”,我此刻的电脑中只有8GB内存了,原因是之前我一直怀疑是自己的内存条问题,所以昨天晚上将两条内存拿回家、与老婆电脑中的内存进行了替换。所以总的来说:此刻我电脑中有了一块新主板、但是只剩下一条8GB内存可供使用。 三、最终还是将怀疑对象落在内存上 Update 20250412:本来以为购买了新的主板,问题就解决了。但是在单位我毕竟已经改成了8GB的内存条,所以单位使用着新的主板+8GB内存;而就在我以为一切风波过去时,家中的电脑又蓝屏了! 这就说明问题一定是出在那两条16GB的内存上,我的新主板算是花了冤枉钱。虽然新购买的主板还在7日无条件退货服务期内,但是这个主板实际上我去年购买、退货过一次。上一次就是纠结要不要买个新的主板,这次既然又买了回来,便决定不再退换了。 转过头再说那两条“问题内存”,虽然已经购买并使用了7个月,但是经过与客服沟通,知道他们允许返场修理,于是我就将两条可能的“问题内存”做了返厂处理,期望过一段时间能够有个比较满意的结果。 至此,我现在家中电脑没有内存可用,所以这两天还要再想想怎么能让家中电脑先临时运行起来。 另外,就是单位中经过这个事情,多了一块主板,也要想想怎么办才好。

螺纹、螺杆、螺母相关规格数据计算的网站

这个网站:https://www.threadspecification.com/m/ 可以对M螺纹或梯形螺杆,公母件儿的规格进行计算,从而得到准确的细节参数。这个网站对于正在学习3D模型制作的我而言,非常有价值、可以方便的得到想要设计的螺纹参数,从而进行建模。 根据上面网站提供的参数完成的M6x1外螺纹建模、内螺母建模。以前没有具体的参数,所以花了半天只能是“凭借感觉”瞎画,完成的模型只能说看着好像是个螺纹,并不具备真实的制造价值。而今这些模型理论上是可以与成品配合、或彼此正确进行配合的了。

几个有趣的电路

暂时还没有时间整理,先把电路截图放在这里吧。 上面的第三张实际上是将两颗PN管用一颗PNP代替,不过是否能真的应用到真实电路中,还没有验证过。最为常用的是左边两张图,所以将左边两张图单独整理如下:

水仙花

这几天不想写程序,相对写程序而言,画画是更有趣的。

好困、好累、好烦躁!

十分的烦躁!一晚上都在想办法拯救该死的网络环境! 晚上9点时,完成了新增线段时的端点新增的正确逻辑,以前的增加逻辑不好,现在的增加方式是正确的。然后顺带着进行了删除线段逻辑的改变。本来想着删除线段的逻辑改成正确的之后,自然而然地、水到渠成的可以完成“删除”功能。 但是服务器崩溃了,然后我就折腾了整整一个晚上,现在已经是凌晨5点——折腾了6个小时!浪费时间! Update: 2024.12.31,接下来是两个阶段的目标设定: 目标1:完成对当前代码中的四类代码review code优化调整; 目标2:完成电流计算;

矩阵求解问题备忘(2)

经过2天的完善,已经将MathMatrix类封装的比较适合阅读。其中可能还存在着大量的需要优化的地方,不过这些并不重要,即便不进行优化,也是可以正常运行的。 优化意味着能够让程序更快的运行,尤其是: 1、本身就是一个无需分块的矩阵,当前的做法是:依然会进行分块。这样做的好处是令程序的逻辑完全统一,坏处自然就是内存资源的浪费和CPU算力的浪费; 2、对于巨大的矩阵,分块、判断奇异性等都将是耗时的,需要更高级的方法去进行这些操作才好; 还有几个问题: 1、现在矩阵分块之后的子块是否完全正确? 2、奇异性判断里面用到的小数,是否合理? 3、当遇到奇异矩阵之后,会尝试一次“解奇异”,这个操作还没有实现,因而还无法真正完成电路求解计算。 Update 2024.12.23 今天又对 MathMatrixClass 进行了一遍重构,上面提到的若干问题并没有解决。今天重构的目的是:在外部构建出矩阵之后,传递进入 MathMatrixClass 之后,便都是以指针形式存储的,而进入 MathMatrixClass 之后又会被分解成多个小问题,依然是以指针传递。 这样在任何一个小问题内,方程得到解答的时候,只需要小问题内部自己对自身的变量进行更新,外部就可以得到更新了——因为内外用到的是一个相同的内存空间。 对于今天的这个重构,也还留有一些“尾巴”没有完成: 1、对于 递归 调用那里,我还是额外的创建了临时变量,这个地方其实也无需额外创建临时变量。 2、另外就是对于LU求解完成之后的结果写回,现在是在一个方法中;还有一个大问题分解后的小问题调用,也是在一个方法中。这两个地方其实应该写的啰嗦一些,分成两个方法依次调用,才能令程序的可读性更好一些。

矩阵问题备忘

今天把矩阵求解的相关代码抽取、封装到了独立的类中,并且基于昨天的求解算法已经基本实现了一个粗糙的矩阵求解过程。 接下来考虑的是对这个矩阵求解类进行扩充、完善,完成以下若干功能: 1、能够对已经给定的问题(矩阵)进行分块:如果能够实现分块操作,就相当于将图中不同的整体彼此分隔开了; 2、完成矩阵分割之后,相当于是一个大的线性方程组被重新切分成了多个小的线性方程组,这若干个线性方程组彼此之间没有任何关联,即便其中任何方程组是有问题的,也不会影响其他方程组的求解过程; 3、分割出来的若干小问题(小矩阵、小线性方程组),依次遍历,分别对每一个问题进行判断,检查矩阵是否是奇异矩阵。如果是奇异矩阵,就进入单元求解过程(寻找此网络中的地); 4、如果找到一个地,就将已知解带回矩阵,再次判断是否是奇异矩阵,循环这一过程; 5、直到:矩阵不再是奇异矩阵,就可以对这个小问题求解;如果最终判定为奇异矩阵,这个小问题就出现奇异网络、抛弃; 6、依次完成上述每一个小问题的求解,最终将每一个小问题的解,拼接会原始大矩阵中,最终得到整个当前网络的解。 以上问题中比较棘手的,是如何对一个矩阵进行分块。

C++ 中的 size_t 引发的一个小问题

代码在后面,因为 size_t 是无符号型的,所以在 for 循环中如果疏忽了它的这个符号问题,就会产生比较严重的后果。现在用了一个“临时解决方案”,但是感觉还是不稳妥,暂且记录、稍后再慢慢推敲。

开发备忘

电路图中所有的网络是被netlistManager统一管理的,在netlistManager中有一个list用于存放netlistNode,当电路图中有多少网络节点,就相当于有多少个netlistNode被存放进list中。 注:上面只是临时写的“list”,至于具体使用的容器应该是list还是vector,还有待进一步推敲。(2024.12.24) 每一个netlistNode相当于是一个网络节点,其内部又有一个list,用于记录着连接到了这一网络节点上的所有“引脚”,也就是接入到这一网络节点上的所有freePin,icPin,线段等等。 当需要生成矩阵(A)和向量(b)时,生成工作由netlistManager进行,它首先根据自身拥有的netlistNode数量决定矩阵和向量的大小,然后开辟内存空间:例如有8个netlistNode、也就是有8个网络节点,那么netlistManager将会创建一个8×8的矩阵A、长度为8的向量b、长度为8的向量solution、长度为8的……若干用到的params。 注:上面这里后面提及的若干个向量,感觉应该封装一下,以更方便使用;2024.12.24 注:上面提到的netlistManager创建的矩阵A,现在总是隐约感觉应该用指针,每一行具体的内容应该由各个netlistNode内部持有;2024.12.24 但是这里不能直接使用遍历netlistNode、不能借助for(key=>value)中的key作为行列依据。原因后面会说明。先说一下需要的做法:在准备生成矩阵和向量之前,要先对当前所有的netlistNode进行一次“编号分配”,这个编号分配出来的并不是netlistNode部分的“名称编号”,而是一个矩阵操作编号。 有了这个矩阵操作编号之后,每一个netlistNode内部的createMatrix()方法,便可以根据自己刚刚被赋予的矩阵操作编号,知道自己计算出来的系数放在矩阵的哪一行、或者哪一列中。 当netlistNode含有一个孤立IC时,自己的分配编号就对应到了行、列上。 当netlistNode含有电源或IC时,无论是基于电源的电压方程、还是基于IC的KCL方程,都可以生成出一个方程,这个方程的系数就是矩阵的行系数。 因为行是netlistNode自己已经知道的(分配编号),所以系数放在哪一行是明确的。 但是这个系数方程是通过各个电源或IC桥接其他网络计算出来的,而其他网络计算出来的结果就是系数中的列属性,这个时候就要知道所有的“桥”的另外一侧的网络是哪个列上的,因而回到最初的问题:要在createMatrix之前,先为所有的网络分配编号。