Any problem in computer science can be solved with another layer of indirection

Any problem in computer science can be solved with another layer of indirection.  --by a predecessor of computer science.

中文译文:“任何计算机科学领域的问题都能通过增加一个间接的应用层来解决。”(不要吐槽俺的翻译能力 吐舌头
        相信有几年编程经历的朋友都听说过这句话,原文出处已经无法核实。所以我用了“一位计算机科学领域的前辈”这样的称呼来给这句话找一位作者。
这句话很久以前就听说过,当时我刚接触计算机相关学科,还在学习《计算机组成原理》、《C语言程序设计》、《汇编语言》这些基础课程。当时对这句话的理解很浅(大家不要误以为我现在理解的多深似的 大笑 ),也没太多的认真思考说这句话的前辈的良苦用心。
        就这样过了几年,学了不少计算机软硬件方面的知识。特别是学习了《计算机体系结构》这门课,使我对这句话的理解又进一步加深了许多。前几天刚好一个朋友来找我,这位朋友是做闪存(flash)的,聊到一个问题的时候我随机一口不算流利的英语把这位朋友给惊醒了。他说:可不是嘛!在CPU和硬盘中间何止是一个应用层呀。他的理解很正确,像Cache、RAM都是这样的一个间接的中间层。这个观念最近对我理解计算机学科越来越有益处。
   再举个例子:熟悉RTOS的朋友应该知道一个概念"板级支持包"(Board support Package, BSP )。 板级支持包 是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的 驱动程序 提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板。就是这么一个承上启下的中间层,好处多多。它可以实现OS对底层的一个封装,让用户在不同的MCU平台下使用时不用花精力去关注不同的处理器对寄存器的实现方式。有一款RTOS叫做eCos,是用C++实现的。这可不多见,据我了解的大多数的RTOS都是使用C语言编写。eCos的BSP就做的非常好,它针对市面上的多种架构的MCU设计了不同的BSP(基于ARM、MIPS、PowerPC、x86、DSP等)。这样就极大的方便了用户,因为RTOS的用户经常面对的最头疼的一件事情就是平台移植,往往在第一步就把不少用户挡在门槛以外。这就是许多的RTOS使用者太少的最直接原因。
   在计算机硬件领域还有一个非常有名的定律:摩尔定律。多年来对计算机硬件的发展同样起到了极大的推动作用。
牛顿曾经说过自己只不过是站在了前人们的肩膀上,所以才能看的更远一些。那么让我们也站在前人们的肩膀上登高而呼吧。
向各行各业的前辈们致敬!
                                                                                                                                                                                        2015.3.25
        
### 解决 `dtppmsm` 模型无状态变量和输入导致无法求解的问题 对于 `dtppmsm` 模型而言,当遇到因缺乏状态变量和输入而导致无法求解的情况时,可以采取一系列措施来修正这一问题。 #### 定义必要的状态变量 为了使模型能够正常工作,定义适当的状态变量至关重要。这些状态变量通常代表系统的内部动态特性。例如,在电机控制系统中,转子位置、速度以及电流都是常见的状态变量[^1]。 ```matlab % MATLAB代码示例:初始化状态向量x states = struct('position', 0, 'velocity', 0, 'current', 0); x = [states.position; states.velocity; states.current]; ``` #### 提供有效的输入信号 除了状态变量外,还需要给定合理的外部激励作为输入到系统里去。这可能涉及到电压指令或者其他形式的能量供给机制等。通过设定合适的输入函数u(t),可以让仿真过程更加贴近实际运行状况[^2]。 ```matlab % MATLAB代码示例:创建时间序列并设置输入电压命令 timeSpan = linspace(0, T_final, N); % 时间范围从0至T_final共N个点 inputVoltageCommand = sin(omega * timeSpan); % 正弦波形的输入电压命令 u = inputVoltageCommand'; ``` #### 验证初始条件合理性 确保所选初值满足物理意义上的约束,并且与后续演化的轨迹相吻合。如果存在不一致之处,则可能导致数值不稳定甚至发散等问题发生。因此,在开始计算之前仔细检查各个参数之间的关系是非常重要的一步操作[^3]。 ```matlab % MATLAB代码示例:验证并调整初始条件 if isnan(x0) || isinf(x0) warning('Initial condition contains NaN or Inf values.'); x0(find(isnan(x0))) = eps; end ``` #### 使用更精确的积分算法 有时简单的欧拉法不足以捕捉快速变化的动力学行为;此时可考虑采用更高阶的方法如龙格库塔族来进行离散化处理。这类方法能够在保持较高精度的同时减少误差累积效应的影响[^4]。 ```matlab % MATLAB代码示例:应用四阶Runge-Kutta方法实现ODE求解器 function dxdt = dstate_dt(~, x, u, params) B = params.B; R = params.R; v = u - R*x(3); % 计算端口处的实际电势差 J = ... ; % 转矩常数 Ld = ... ; Lq = ... ; omega_mechanical = x(2)/params.poles/2/pi; dxdt = [ x(2), ... (J*omega_mechanical - B*x(2))/Lq,... v/Ld - omega_mechanical*(Lq-Ld)*x(3)/(R*Ld)]; end [t,x] = ode45(@(t,x)dstate_dt(t,x,u,params), tspan , x0); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值