我正在寻找有关如何构建中型到大型MATLAB项目的资源,特别是那些涉及多个独立模块的项目.如何管理全局配置变量,如何将项目构建到文件夹中,如何管理模块之间的耦合等.
关于这个主题是否有某种标准文本?看起来大多数MATLAB教科书都是由科学家或工程师编写的.我想,我正在寻找的是由软件工程师编写的任何MATLAB教科书.:-)
GNU Make手册的4.13节描述了所谓的双冒号规则:
双冒号规则是在目标名称后面用'::'而不是':'编写的规则.当同一目标出现在多个规则中时,它们的处理方式与普通规则不同.
当目标出现在多个规则中时,所有规则必须是相同的类型:所有规则或所有双冒号.如果它们是双冒号,则每个都是独立的.如果目标比该规则的任何先决条件更旧,则执行每个双冒号规则的命令.如果该规则没有先决条件,则始终执行其命令(即使目标已存在).这可能导致执行任何,任何或所有双冒号规则.
具有相同目标的双冒号规则实际上彼此完全分离.每个双冒号规则都是单独处理的,就像处理具有不同目标的规则一样.
目标的双冒号规则按它们在makefile中出现的顺序执行.但是,双冒号规则确实有意义的情况是执行命令的顺序无关紧要的情况.
双冒号规则有点模糊,通常不太有用; 它们为用于更新目标的方法根据导致更新的先决条件文件而不同的情况提供了一种机制,这种情况很少见.
每个双冒号规则应指定命令; 如果没有,则使用隐式规则(如果适用).请参阅使用隐式规则部分.
我有点单独理解本节每个句子的含义,但我仍然不清楚双冒号规则是什么.至于是罕见的,我还没有看到任何的开源项目,其Makefile文件并没有开头
all::
Run Code Online (Sandbox Code Playgroud)
因此:Makefile中双冒号规则的目的是什么?
我有一个月份的清单:
val days = List(31, 28, 31, ...)
Run Code Online (Sandbox Code Playgroud)
我需要返回一个累积天数的List:
val cumDays = List(31, 59, 90)
Run Code Online (Sandbox Code Playgroud)
我想过使用fold运算符:
(0 /: days)(_ + _)
Run Code Online (Sandbox Code Playgroud)
但这只会返回最终结果(365),而我需要中间结果列表.
无论如何,我可以优雅地做到这一点?
平面文件和关系数据库为我们提供了一种序列化结构化数据的机制.XML非常适合序列化非结构化树状数据.
但是很多问题最好用图表来表示.例如,热模拟程序将通过电阻边缘与彼此连接的温度节点一起工作.
那么序列化图形结构的最佳方法是什么?我知道XML在某种程度上可以做到这一点 - 就像关系数据库可以序列化复杂的对象网络一样:它通常可以工作,但很容易变得丑陋.
我知道graphviz程序使用的点语言,但我不确定这是最好的方法.这个问题可能是学术界可能正在研究的问题,我很乐意参考讨论这个问题的任何论文.
MATLAB的单元测试框架有哪些,它们如何比较?我该如何为我们的项目选择一个?它们的优缺点是什么?
我相信我已经仔细阅读了整个printf()文档,但是找不到任何方法可以将它打印出来,例如,10元素数组的元素float(s).
例如,如果我有
float[] foo = {1., 2., 3., ..., 10.};
Run Code Online (Sandbox Code Playgroud)
然后我想要一个单一的陈述,如
printf("what_do_I_put_here\n", foo);
Run Code Online (Sandbox Code Playgroud)
哪个会打印出以下内容:
1. 2. 3. .... 10.
Run Code Online (Sandbox Code Playgroud)
有没有办法在香草C中做到这一点?
可能重复:
为什么必须在C中链接数学库?
当我编写一个使用math.h库中函数的程序时,为什么我必须明确链接到它,libm即使它们是C标准库的一部分?
例如,当我想使用sin()我需要的功能#include <math.h>但我也需要传递-lm给GCC.但对于标准库中的任何其他库,我不必这样做.为什么不同?
假设我有一个非常小的float a(例如a=0.5)输入以下表达式:
6000.f * a * a;
Run Code Online (Sandbox Code Playgroud)
操作数的顺序是否有所不同?写作更好吗?
6000.f * (a*a);
Run Code Online (Sandbox Code Playgroud)
甚至
float result = a*a;
result *= 6000.f;
Run Code Online (Sandbox Code Playgroud)
我已经检查过每个计算机科学家应该知道的关于浮点运算的经典之作,但找不到任何东西.
是否有一种在浮点运算中对操作数进行排序的最佳方法?
好书指出:
类及其伴随对象可以访问彼此的私有成员.
也许是天真的,我认为这意味着一个类不需要从其伴随对象中显式地导入成员.即,以下将起作用:
object Foo {
def bar = 4
}
class Foo {
def foo = bar
}
Run Code Online (Sandbox Code Playgroud)
那么,你读这个的原因是它没有.所以我真的需要声明这样的东西:
class Foo {
import Foo._
def foo = bar
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个物理模拟软件的想法,其中每个物理元素都将在自己的线程中进行模拟.
这种方法有几个优点.它在概念上非常接近现实世界的运作方式.将系统扩展到多台机器要容易得多.
但是,为了实现这一点,我需要确保所有线程以相同的速度运行,并对"相同"进行相当自由的解释.比如说在彼此的1%之内.
这就是为什么我不一定需要Thread.join()之类的解决方案.我不想要一些超级控制的学校情妇,确保所有线程定期与彼此同步.我只需要能够以大致相同的速度运行线程运行时(无论是Java,Erlang还是其他最适合此问题的运行时).
任何建议都将非常感激.
更新2009-03-16
我要感谢所有回答这个问题的人,特别是那些回答基本上都是"不要这样做"的人.由于每个人的评论,我现在更了解我的问题,而且我不太确定我应该像我原先计划的那样继续.尽管如此,我觉得彼得的答案是问题本身的最佳答案,这也是我接受它的原因.
c ×3
matlab ×2
scala ×2
erlang ×1
gcc ×1
gnu-make ×1
graph-theory ×1
java ×1
join ×1
makefile ×1
printf ×1
simulation ×1
singleton ×1
unit-testing ×1