本文章就 MWORKS Syslab 2026a 的 M 语言编程环境的更新发表看法。对于科研过程中需要研究 M 语言项目的学生来说,MWORKS Syslab 不得不说解决了我的燃眉之急,而在这一年的使用过程中,它的 M 语言编程环境不断更新优化,今年的新版本又上升了新的高度。我将从两个方面我的使用感受。
M 函数
在这一年中 M 函数的更新速度令人惊讶,从我开始使用 Syslab 时 M 函数才有一千多,而在这个版本中 M 函数已经达到 2033 个。

最重要的是,在之前使用的一年多的版本中没有 table 函数,我的整个项目的运行不得不终止,虽然在询问同元的老师后得到了可能使用 struct 暂时手动替代的答案,但无疑工作量是巨大的。在整个项目中必须使用 table 的类函数、table 与 array 的互相转化、table 数据写入 Excel 文件等等。在这个版本中终于的到了解决!!由于项目代码的保密性,我将简单展示我在 Syslab 中使用 table 的测试代码。在解决了 table 函数后我的项目已经可以成功运行了(感动。
-
创建 Table
%% ==================== 1. 创建 Table ==================== % 1.1 从数组创建 studentID = [101; 102; 103; 104]; % 学生ID name = ["Zhang San"; "Li Si"; "Wang Wu"; "Zhao Liu"]; % 姓名 score_math = [85; 92; 78; 90]; % 数学成绩 score_english = [88; 85; 80; 95]; % 英语成绩 is_pass = [true; true; false; true]; % 是否及格 disp('=== 初始创建的Table ==='); disp(student_table);
-
访问 Table 数据
%% ==================== 2. 访问 Table 数据 ==================== % 2.1 按列名访 math_scores = student_table.Math; % 获取数学成绩列(返回数值数组) disp(' === 数学成绩列 ==='); disp(math_scores); % 2.2 按索引访问 second_student = student_table(2, :); % 获取第2行所有列 disp(' === 第二个学生的所有信息 ==='); disp(second_student); % 2.3 按行名访问 stu3_info = student_table('Stu3', :); % 获取行名为Stu3的行 disp(' === 第三个学生的所有信息 ==='); disp(stu3_info); % 2.4 同时按行和列筛选 english_102 = student_table(student_table.ID == 102, 'English'); disp(' === ID=102的学生的英语成绩 ==='); disp(english_102);
-
修改 Table 数据
%% ==================== 3. 修改 Table 数据 ==================== % 添加新列:总分(数学+英语) student_table.Total = student_table.Math + student_table.English; % 删除列:删除IsPass列 student_table.IsPass = []; disp(' === 修改后的Table(加总分+删及格列) ==='); disp(student_table);
-
筛选 Table 数据
%% ==================== 4. 筛选 Table 数据 ==================== % 筛选总分≥170的学生 high_score_stu = student_table(student_table.Total >= 170, :); disp(' === 总分≥170的学生 ==='); disp(high_score_stu); % 筛选姓名包含"Li"的学生(字符串匹配) li_stu = student_table(contains(student_table.Name, "Li"), :); disp(' === 姓名包含"Li"的学生 ==='); disp(li_stu);
-
合并 Table 数据
%% ==================== 5. 合并 Table 数据 ==================== % 创建第二个table(班级信息) class_info = table(["Class1"; "Class1"; "Class2"; "Class1"], ... 'VariableNames', {'Class'}, ... 'RowNames', {'Stu1', 'Stu2', 'Stu3', 'Stu4'}); % 横向合并(按行名匹配) student_table_complete = [student_table, class_info]; disp(' === 合并班级信息后的完整Table ==='); disp(student_table_complete);
-
导出为 excel 表格
writetable(student_table_complete,"mytable.xlsx")
M 语言 IDE 代码编辑
M 语言 IDE 代码编辑新版本中新增了延长我寿命的功能——代码格式化与代码定位。
-
代码格式化
那些从其他地方复制过来的 m 代码,终于能够一键从这样:
变成这样:

-
代码定位
在我的 M 项目中,最常见的代码无非就是for循环以及if判断,这样的一个代码段有时候可以长达十多行。而 Syslab 新版本终于支持从end定位到对应的for或if语句。
例如这样一个代码段:
当我想找到某个 end所对应的for或if时,只需要在end上右击,再选择转到定义即可:

随即,光标就会指向对应的for或end的定义:

总之,MWORKS Syslab 2026a 版本的更新对我的项目推进有着实质性的帮助,能感觉到它越来越好用,越来越强。在这一年以来,我向同元的老师反映过 M 函数问题,交流过 Syslab M 语言计算环境的前景,提出的问题在不断被解决,我也真心希望 Syslab 这款国产软件不仅走向全国,也走向世界。

883

被折叠的 条评论
为什么被折叠?



