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