MATLAB | 怎么让MATLAB自己生成代码?

这篇具有很好参考价值的文章主要介绍了MATLAB | 怎么让MATLAB自己生成代码?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

国赛就是明天了,写了个很有意思的东西,虽然目前只是个雏形但是,这玩意真的挺有意思的,很多人写完基础代码绘图后不咋修饰就点开属性编辑器一顿点点点,但这样画出的图毕竟只有图没有相关代码,有没有啥办法能够把点点点的过程转化为代码,能把论文写的更长一点?于是就有了下面这个小工具,首先介绍用法,最后给出工具函数完整代码(初代懒得写注释ing):

基本使用

写完绘图函数后在代码最后加入一行codeprinter

t=0.01:0.2:3*pi;
hold on
plot(t,cos(t)./(1+t),'LineWidth',2)
plot(t,sin(t)./(1+t),'LineWidth',2)
plot(t,cos(t+pi/2)./(1+t+pi/2),'LineWidth',2)
plot(t,cos(t+pi)./(1+t+pi),'LineWidth',2)
legend

codeprinter

matlab自动生成代码,# MATLAB 笔记,matlab,代码生成,数学建模国赛

点击:查看->属性编辑器

matlab自动生成代码,# MATLAB 笔记,matlab,代码生成,数学建模国赛

进行一通编辑:

matlab自动生成代码,# MATLAB 笔记,matlab,代码生成,数学建模国赛

关闭窗口后就能自动在命令行窗口生成一系列代码:

matlab自动生成代码,# MATLAB 笔记,matlab,代码生成,数学建模国赛

删掉代码末尾的codeprinter,把命令行的代码加载最后,能获取之前全部修饰效果,美滋滋:

t=0.01:0.2:3*pi;
hold on
plot(t,cos(t)./(1+t),'LineWidth',2)
plot(t,sin(t)./(1+t),'LineWidth',2)
plot(t,cos(t+pi/2)./(1+t+pi/2),'LineWidth',2)
plot(t,cos(t+pi)./(1+t+pi),'LineWidth',2)
legend

fig=gcf;
fig.Children(1).FontName='Cambria';
fig.Children(1).FontSize=11;
fig.Children(1).LineWidth=2;
fig.Children(1).Location='southeast';
fig.Children(1).NumColumns=4;
fig.Children(1).Orientation='horizontal';
fig.Children(1).Position=[0.4103, 0.12433, 0.48022, 0.028419];
fig.Children(1).Title.FontName='Cambria';
fig.Children(1).Title.FontSize=11;
fig.Children(2).XColor=[1, 0, 0];
fig.Children(2).XTick=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
fig.Children(2).XTickLabel={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'};
fig.Children(2).YColor=[1, 0, 0];
fig.Children(2).ZColor=[1, 0, 0];
fig.Children(2).LineWidth=2;
fig.Children(2).XGrid='on';
fig.Children(2).YGrid='on';
fig.Children(2).Box='on';
fig.Children(2).Title.Position=[5, 1.0061, -1.4211e-14];
fig.Children(2).Title.String='demo of codeprinter';
fig.Children(2).Title.FontName='Cambria';
fig.Children(2).Title.FontSize=16;
fig.Children(2).Subtitle.Position=[5, 1.0042, -1.4211e-14];
fig.Children(2).XLabel.Color=[1, 0, 0];
fig.Children(2).XLabel.Position=[5, -0.4549, -1];
fig.Children(2).YLabel.Color=[1, 0, 0];
fig.Children(2).YLabel.Position=[-0.58126, 0.3, -1];
fig.Children(2).ZLabel.Color=[1, 0, 0];
fig.Children(2).Children(4).LineWidth=4;
fig.Children(2).Children(4).Marker='<';
fig.Children(2).Children(4).MarkerSize=8;

matlab自动生成代码,# MATLAB 笔记,matlab,代码生成,数学建模国赛文章来源地址https://www.toymoban.com/news/detail-540111.html


工具函数完整代码

function codeprinter(fig)
% @author : slandarer
% 公众号  : slandarer随笔
% 知乎    : hikari

if nargin<1
    fig=gcf;
end

objCoeList={'ContextMenu','Title','Subtitle','Toolbar',...
    'XLabel','YLabel','ZLabel'};% 'XAxis','YAxis','ZAxis'
coeList={'CurrentPoint','BeingDeleted','TightInset','NextSeriesIndex',...
    'Type','Parent','Children','ContextMenu','Toolbar','Extent','Title','Subtitle',...
    'XAxis','YAxis','ZAxis','XLabel','YLabel','ZLabel','Legend','Interactions',...
    'ButtonDownFcn','CreateFcn','DeleteFcn','ItemHitFcn','Selected','Layout',...
    'FontSizeMode','XTickMode','TickMode','ZTickMode','XTickLabelMode',...
    'YTickLabelMode','ZTickLabelMode','TickDirMode','XLimMode','YLimMode','ZLimMode',...
    'XLimitMethod','YLimitMethod','ZLimitMethod','XColorMode','YColorMode','ZColorMode',...
    'GridColorMode','GridAlphaMode','MinorGridColorMode','MinorGridAlphaMode',...
    'ALimMode','CLimMode','DataAspectRatioMode','PlotBoxAspectRatio','CameraPositionMode',...
    'CameraTargetMode','CameraUpVectorMode','CameraViewAngleMode','NumColumnsMode',...
    'PickableParts','PositionConstraint','MarkerMode','ContextMenuOpeningFcn',...
    'XData','YData','ZData','CData','VertexNormals','VertexNormalsMode',...
    'FaceNormals','FaceNormalsMode'};
for i=1:length(fig.Children)
    FCStruct=get(fig.Children(i));
    fNames=fieldnames(FCStruct);
    for n=1:length(coeList)
        coePos=strcmp(fNames,coeList{n});
        fNames(coePos)=[];
    end
    for n=1:length(fNames)
        oriFig.Children(i).(fNames{n})=fig.Children(i).(fNames{n});
    end
    oriFig.Children(i).FNames=fNames;

% -------------------------------------------------------------------------
    for j=1:length(fig.Children(i).Children)
        FCCStruct=get(fig.Children(i).Children(j));
        fNames=fieldnames(FCCStruct);
        for n=1:length(coeList)
            coePos=strcmp(fNames,coeList{n});
            fNames(coePos)=[];
        end
        for n=1:length(fNames)
            oriFig.Children(i).Children(j).(fNames{n})=fig.Children(i).Children(j).(fNames{n});
        end
        oriFig.Children(i).Children(j).FNames=fNames;
    end
% -------------------------------------------------------------------------
    FCStruct=get(fig.Children(i));
    fsNames=fieldnames(FCStruct);
    for j=1:length(objCoeList) 
        if any(strcmpi(fsNames,objCoeList{j}))
            if ~isempty(fig.Children(i).(objCoeList{j}))
                FCOStruct=get(fig.Children(i).(objCoeList{j}));
                fNames=fieldnames(FCOStruct);
                for n=1:length(coeList)
                    coePos=strcmp(fNames,coeList{n});
                    fNames(coePos)=[];
                end
                oriFig.Children(i).(objCoeList{j})=[];
                for n=1:length(fNames)
                    oriFig.Children(i).(objCoeList{j}).(fNames{n})=fig.Children(i).(objCoeList{j}).(fNames{n});
                end
                oriFig.Children(i).(objCoeList{j}).FNames=fNames;
            else
                oriFig.Children(i).(objCoeList{j})=[];
            end
        end
    end
end
% =========================================================================
set(fig,'CloseRequestFcn',@my_closereq)
% =========================================================================
function my_closereq(~,~)
    disp('fig=gcf;')
    for ri=1:length(oriFig.Children)
        for rn=1:length(oriFig.Children(ri).FNames)
            outprint(['fig.Children(',num2str(ri),').',oriFig.Children(ri).FNames{rn},'='],...
                oriFig.Children(ri).(oriFig.Children(ri).FNames{rn}),fig.Children(ri).(oriFig.Children(ri).FNames{rn}))
        end

        rFCStruct=get(fig.Children(ri));
        rfsNames=fieldnames(rFCStruct);
        for rj=1:length(objCoeList)
            if any(strcmp(rfsNames,objCoeList{rj}))
                if ~isempty(oriFig.Children(ri).(objCoeList{rj}))
                    for rn=1:length(oriFig.Children(ri).(objCoeList{rj}).FNames)
                        outprint(['fig.Children(',num2str(ri),').',objCoeList{rj},'.',oriFig.Children(ri).(objCoeList{rj}).FNames{rn},'='],...
                            oriFig.Children(ri).(objCoeList{rj}).(oriFig.Children(ri).(objCoeList{rj}).FNames{rn}),...
                            fig.Children(ri).(objCoeList{rj}).(oriFig.Children(ri).(objCoeList{rj}).FNames{rn}))
                    end
                else
                end
            end
        end


        for rj=1:1:length(fig.Children(ri).Children)
            for rn=1:length(oriFig.Children(ri).Children(rj).FNames)
                outprint(['fig.Children(',num2str(ri),').Children(',num2str(rj),').',oriFig.Children(ri).Children(rj).FNames{rn},'='],...
                    oriFig.Children(ri).Children(rj).(oriFig.Children(ri).Children(rj).FNames{rn}),...
                    fig.Children(ri).Children(rj).(oriFig.Children(ri).Children(rj).FNames{rn}))
            end
        end
    end
    delete(fig)
    fprintf('\n')
end
% =========================================================================
    function outprint(baseStr,obj1,obj2)
        changed=false;
        if ~isa(obj2,'cell')
            if isa(obj2,'table')
            else
                if length(obj1)~=length(obj2)
                    changed=true;
                elseif ~all(all(all(obj1==obj2)))
                    changed=true;
                end
            end
        else
            if length(obj1)~=length(obj2)
                changed=true;
            elseif ~all(all(all(strcmp(obj1,obj2))))
                changed=true;
            end
        end
        if changed
            fprintf('%s',baseStr)
            switch true
                case isa(obj2,'double')
                    tdouble=obj2;
                    if size(tdouble,1)==0
                        fprintf('%s\n','[];');
                    elseif numel(tdouble)==1
                        fprintf('%s\n',[slnum2str(tdouble),';']);
                    elseif size(tdouble,1)==1
                        fprintf('%s\n',['[',slnum2str(tdouble),'];']);
                    else
                        fprintf('%s','[')
                        for k=1:size(tdouble,1)-1
                            fprintf('%s\n',[slnum2str(tdouble(k,:)),';']);
                        end
                        fprintf('%s\n',[slnum2str(tdouble(size(tdouble,1),:)),'];']);
                    end
                case isa(obj2,'cell')
                    fprintf('%s','{');
                    for k=1:length(obj2)-1
                        fprintf('%s',["'",obj2{k},"', "]);
                    end
                    fprintf('%s',["'",obj2{length(obj2)},"'};"]);
                    fprintf('\n');
                case isa(obj2,'matlab.lang.OnOffSwitchState')||isa(obj2,'char')
                    fprintf('%s',["'",obj2,"';"]);
                    fprintf('\n');
            end
        end 
    end
% =========================================================================
    function str=slnum2str(num)
        tstr=num2str(num);
        tstr=split(tstr);

        str=tstr{1};
        for k=2:length(tstr)
            str=[str,', ',tstr{k}];
        end
    end
end

到了这里,关于MATLAB | 怎么让MATLAB自己生成代码?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 源生成器:根据需要自动生成机械重复代码

    本文概述了利用.NET Compiler Platform(“Roslyn”)SDK 附带的 源生成器 (Source Generator)自动生成机械重复的代码。关于这部分的基础入门知识可以在MSDN [1] 学到。 本文 默认 已经有一个解决方案,包含两个项目。一个是普通C#项目,依赖于另一个源生成器项目。 此处以 Dependenc

    2024年02月01日
    浏览(73)
  • AI自动生成代码工具

    AI自动生成代码工具是一种利用人工智能技术来辅助或自动化软件开发过程中的编码任务的工具。这些工具使用机器学习和自然语言处理等技术,根据开发者的需求生成相应的源代码。以下是一些常见的AI自动生成代码工具,希望对大家有所帮助。北京木奇移动技术有限公司,

    2024年02月04日
    浏览(42)
  • 生成订单30分钟未支付,则自动取消,该怎么实现?

    今天给大家上一盘硬菜,并且是支付中非常重要的一个技术解决方案,有这块业务的同学注意自己试一把了哈! 在开发中,往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来

    2024年02月09日
    浏览(43)
  • AIGC for code(text-to-codeAIGC/AI生成代码/生成式AI之代码生成/AI编程工具/自动编程/自动生成代码/智能编程工具/智能编程系统)

    AIGC,Artificial Intelligence Generated Content,人工智能生成内容 AIGC for code,AI生成代码 Copilot是由微软的子公司Github与openAI共同开发的人工智能(AI)驱动的编程助手。它能够直接在你的编辑器中,为你提供代码片段或者整个函数的建议,以帮助你更快地编写和完成代码。这个工具

    2024年02月15日
    浏览(58)
  • 13.若依代码自动生成功能详解

    基于若依的目录结构,若依本身提供了代码生成功能,可以根据数据库表的内容,生成一些基本的CRUD的前后端的功能。本文将生成过程中的一些注意事项,进行了整理和说明 注意:在使用代码生成功能之前,一定要注意数据库字段,不能是,要不使用的时候,一堆问

    2024年01月25日
    浏览(47)
  • 代码自动生成工具——TableGo(实例演示)

            在SpringBoot项目开发中,为了提高开发效率,我们经常需要使用代码自动生成工具来生成一些重复性的代码,比如实体类、DAO、Service、Controller等等。下面介绍几个常用的代码自动生成工具: ①、MyBatis Generator         MyBatis Generator是由MyBatis官方提供的一个代码

    2024年02月07日
    浏览(44)
  • 工具—IDEA代码自动生成插件EasyCode

    官网简介 基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)。 只要是与数据库相关的代码都可以通过自定义模板来生成。支持数据库类型与java类型映射关系配置。 支持同时生成生成多张表的代码。每张表有独立的配置信息。完全的个性化定义,

    2024年02月09日
    浏览(43)
  • ai绘画壁纸怎么弄?下面分享三个ai自动生成图片的方法

    其实每个创作者在创作过程中难免都会遇到灵感缺失的情况,这个时候其实可以借助一些ai绘画软件! 它可以自动生成风格各异的高质量作品,能有效的激发创作者们的创作灵感,更好的帮助他们突破创作瓶颈。 什么?你问我ai绘画软件是不是只适合有绘画基础的人使用?

    2024年02月16日
    浏览(43)
  • 帝国CMS自动生成缩略图和自动分页功能代码

    自动生成缩略图代码 \\\'; 无论你手工发布,还是采集而来,免不了要进行手工操作弄缩略图,不然标题图片没有,挺烦人的 只需一次设定,就可以在文章编辑框里自动勾选上分页和生成缩略图,免除你次次进行操作的麻烦,好了,废话不多说,上菜“ 先到 系统管理数据表 后

    2024年02月03日
    浏览(61)
  • 深入拆解Simulink自动生成代码(三)——循环结构

    前言 一、Simulink实现循环结构 二、自动生成C代码 三、变式1 四、变式2 五、变式3 六、变式4 总结         《深入拆解Simulink自动生成代码(一)——数据流处理》         《深入拆解Simulink自动生成代码(二)——选择结构》          用Simulink实现循环结构的一个

    2024年02月12日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包