V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dragonszy
V2EX  ›  问与答

遇到“极其坑爹”的程序代码(Matlab)怎么改?

  •  
  •   dragonszy · 2013-10-22 22:03:49 +08:00 · 2861 次点击
    这是一个创建于 4042 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不得不说,这坨代码就是一坨shit。

    各种A,a,I,i,Z,z,B,Trace,trace等等,变量名完全是随便取,完全分不清啥是啥。

    各种复制粘贴,该写成函数的不写函数。不该写成函数的写成函数。

    load RLC.txt load RLC1.txt load RLC2.txt load RLC3.txt 随便取名至少0123吧?

    各种全局变量滥用,各种重复变量k=size(RLC),A=size(RLC)。真是信手拈来。

    函数名也是随意取,什么F(Z),里面画了8个图。也是复制粘贴。写个函数传个参数画图能跪?

    有些变量名还和Matlab自带的函数名重叠,比如前面的trace。(虽然赋值后不影响)

    其间还用了一个“遗传算法”拟合。感觉就是完全不懂就在用,即使用其他的数据总能拟合对。

    更别说矩阵的优化了,感觉程序里面写的“最有效率”的就是直接下载的遗传算法工具包。

    还有缩进,简直无情。Sublime Text的Reindent也无能为力。

    -------------分割线-------------

    导师要求我和某同学辅助某研究生学长完成这个任务,属于外面在职读博的人的博士论文的一部分。只不过真心没办法改这程序,学长说这程序也是上届流传下来的,很多地方看不懂。我只能说这坨代码真是朽木不可雕。

    让我想起了《人月神话》,不同的是人月还有成功的可能性,这坨shit丝毫没有。

    但是导师很急,因为外面的那个博士很急。虽然本身不是我的任务(从其他项目上调过来)。

    但没有意义啊,即使重新写一遍把程序搞定了,但其实还是错的(拟合)。

    感觉在浪费生命,而且是别人的责任。Fck!还不如去打LOL。

    明天还要汇报,怎么说。

    有点准备今天晚上熬夜重写一遍了。
    7 条回复    1970-01-01 08:00:00 +08:00
    9hills
        1
    9hills  
       2013-10-22 22:19:08 +08:00
    不要尝试重写,你会后悔的<_<
    Golevka
        2
    Golevka  
       2013-10-22 23:31:50 +08:00
    我大三时也遇见了类似的情况, 卧槽数学专业的学长写的代码简直没法看啊.

    于是我花了一个寒假的时间把代码全推翻重写, 然后把未完成的部分也实现了.
    sinxccc
        3
    sinxccc  
       2013-10-22 23:55:48 +08:00
    千万不要重写,除非你保证下面一段时间能有充足的时间和精力投进去。

    首先你得让它跑起来,然后再想办法让它跑出正确的结果。这个过程中可以适度的重命名一些变量,手工调整缩进(别用自动工具),分割文件,提取小的函数,但千万不要动到代码逻辑,一点都不要,Matlab 这种糙快猛的语言里有无数的坑。

    最后记得改代码之前先建个 git repo,改一点 commit 一点…虽然麻烦但保险。
    bcxx
        4
    bcxx  
       2013-10-23 00:03:00 +08:00
    把已有的加一层 wrapper 好好保护吧! 23333
    dragonszy
        5
    dragonszy  
    OP
       2013-10-23 08:52:15 +08:00
    谢谢楼上们的建议,我昨晚直接睡了,睡了一觉也想通了,Matlab这种程序,能用就行,管他内部多混乱,反正别人论文又不需要附带程序。有时间的话再增个函数什么的,变量名已经真心改不了了。
    dragonszy
        6
    dragonszy  
    OP
       2013-11-13 19:27:45 +08:00
    LZ已经重写完毕了,从算法结构命名函数注释文档等各方面提升。发现Matlab其实90%情况可以不用for循环。

    可惜就是曲线拟合太慢。
    dragonszy
        7
    dragonszy  
    OP
       2013-12-07 22:50:41 +08:00
    LZ找出了瓶颈,修改了目标函数的一些算法,把拟合速度提升了50倍左右(5m->30s),增加了一系列其他功能。

    至此,正式完结。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1166 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 18:42 · PVG 02:42 · LAX 10:42 · JFK 13:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.