MATLAB 对于一个已完成的M文件(有输入和输出),如何创建一个GUI界面,给M文件赋值,并在界面上输出结果

大家好,我编好了一个MABLAB的M文件,能计算电机参数,只涉及纯数值计算。该程序在command window里运行时,会要求用户手动输入2个自变量,然后自动计算出相关的24个因变量。但是导师现在要求做一个GUI图形界面,要求能在界面上输入自变量,并在该界面(或另一个GUI界面)上输出计算后的因变量。
我的问题是,如何将界面上用户输入的量赋值给负责计算的M文件(不是GUI的回调M文件,是我之前编好的原文件),由它算出因变量以后再重新返回给该界面(或另一个GUI界面)呢。这段能让参数转移的代码应该怎么写才好?
小弟弄了很久不得其解,本身MATLAB功底也欠佳,所以请各位GGJJ给答案的时候尽量写详细易懂些,最好有详细的先后步骤,好的答案一定追加给分!!先谢谢啦!
PS:GUI界面的样式我已经设计好了,就是不知道怎么实现编程,见图:

你之前编写好的负责计算m文件是脚本文件还是函数文件

如果是脚本文件的话,要想办法改成函数文件
并使其能够接受两个输入参数
根据两个输入参数计算出24个输出参数
而24个输出参数的形式是固定的8x3,所以完全可以输出一个矩阵

那么你用于计算的函数大概拥有下面的形式
输出矩阵= 函数名(输入参数1,输入参数2)

省下的你只需在gui的回调函数里,调用编写好的计算函数
将gui中根据editbox输入的连个参数传递给计算函数
得到的8x3矩阵,顺序显示到gui的输出就可以了追问

谢谢,那我能否不采用把原文件编写成函数,而是从GUI中获取自变量,在独立的M脚本文件里完成计算,然后再把24个计算结果都返回到GUI输出呢?
说白了就是(输入输出)和(数值计算)独立进行

追答

理论上可以不写为函数,但是调用起来更为复杂,
想不到改为函数有什么不好的地方

首先,按你所说的原来你的m文件开始可能有input的操作
接受两个输入变量,但是改为gui之后,input的语句肯定不能再用了

第二虽然你的m文件最后输出24个因变量,
但是24个数完全可以用一个矩阵储存,返回一个矩阵就可以了
所以你只要写一个函数

第三写成一个函数,保存于m文件,调用的时候就好像调用
matlab系统自带的函数一样方便

如果你连函数文件的编写都不太熟悉的话,证明你对matlab也不是很熟悉
还要进行GUI的编写就更麻烦了

如果你还是不想写成函数,还有个办法就是
直接将原来m文件里的代码,直接写在回调函数里面

至于最后怎么利用gui得到输入的参数,怎么将参数输出在GUI中显示
那你自己还要学习gui的相关知识

追问

谢谢回答。最后一个问题:
写成函数这个思路是对的,我决定采纳,但是在定义函数的时候该怎么写才好呢?
比如传统定义:function [输出值]=(任何字母)(输入变量)
鉴于24个输出值要赋给矩阵,那这个定义语句怎么写才好?求模板

追答

你原来的m文件结构应该大致是

1输入两个数据a,b
2根据两个数句计算出24个变量 变量1,变量2,......变量24

函数文件一开始是定义函数名和输入输出变量裂变
function 输出名 = 函数名 (输入变量1,输入变量2)

为简单器件,假设函数名就是 jisuan ,输入变量是 a ,b 输出变量是 out

那么改为函数文件之后的m文件内容就是

function out=jisuan(a,b)
%可以copy原来计算的m文件代码到这里
%不过输入数据部分就不用了,用a,b代替就可以了
%当然a,b的名字可以根据你原来给这两个变量改的名字而改变
%后面根据a,b计算了24个变量
%根据你变量的规则,你完全可以写成
%out(1)=变量1;out(2)=变量2;........out(24)=变量24
%那么输出的out就是一个有24个元素的数组,你在外面可以调用

完成上边的函数文件之后,你可以在gui的回调函数里面调用个这个函数

output=jisuan(输入参数1,输入参数2);
得到的output就是利用两个输入参数,经过jisuan函数计算的24个值的数组

你可以用output(1)提取第一个值送给gui显示在第一个值应该显示的位置
output(2).....等以此类推

函数就好像把语句都封装起来了,只要你的jisuan.m写好了
你就可以像调用matlab系统定义好的函数一样去用它
只要给它两个输入参数,他就会给你输出一个由24个元素的数组

其实看你输出的24个值,最简单还是用8x3的矩阵表示
然后用table这个gui控件来显示结果
不过你对matlab还不是很熟悉,一步一步来吧

追问

大侠你好,按照你的思路我已经实现了将原文件转为函数,并将24个结果全都付给了一个3*8的矩阵,运行成功且结果都合理。现在我想将这个矩阵用你说的table控件来实现输出,而不是单独输出。控件我找到了,就是不会用,能再给我一些对此的思路提示和写法规则吗?答案一定采纳,多谢!

追答

在界面上添加一个table控件

在计算按钮的callback里,计算好数据矩阵之后
用下面语句将table的'Data'属性,设为你的数据矩阵就好了
set(table句柄,'Data',数据矩阵);

注意如果是按你原来gui的8行3列的顺序,矩阵应该是8x3的不是3x8的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-21
我没法太具体的说。。。
你以前的手动输入是怎么实现的?m文件里调?还是command window里输入?
总之就是把你的程序做成一个function函数的形势,输入就是这两个变量
Calculate按钮的回调函数指向这个function函数,
然后读取两个文本框里的数据(文本框的string属性),作为函数的输入
具体怎么读,然后怎么把字符串转化成变量,可以学习下GUI的基础资料,网上也有很多
然后把输出变成字符串,显示在界面上
很基础的东西,还是自己找资料学一下吧,主要是get语句,很简单的追问

以前手动输入是在command window里面输入两个自变量的值,然后按回车就算出所有因变量来了。
像你说的这种多个输入,多个输出的函数,在编写的时候是大概怎样的思路?因为函数不是一般都只有一个自变量么。另外鉴于输出很多,那怎么才能让每个输出都在相应的位置上呢?

相似回答