基于MATLAB科学计算器

基于MATLAB科学计算器
基于MATLAB科学计算器

目录

计算器得效果图 ........................................................................... 错误!未定义书签。

一、GUI设计界面: (3)

1。打开GUI (3)

2。添加按钮 (3)

3。根据按钮得作用及视觉效果做一定得修改: (4)

4。保存、添加功能函数 (4)

(1)数字键编写 (4)

(2)符号键得编写 (4)

(3)运算符“=”得编写 (5)

(4)按键“←back"得编写 (5)

(5)按键“清空”得编写 (5)

(6)按键“退出”得编写 (5)

(7)按键“二进制数转十进制数"得编写 (5)

(8)按键“十进制数转二进制数”得编写 (5)

二、计算器得使用 (5)

除法运算(÷) (5)

平方运算(^2) (6)

函数cos (∏/3)得计算 (6)

函数arctan (∏/3)得计算 (7)

以2为底得对数得计算(log 2) (7)

十进制数转二进制数得计算(调用dec2bin函数) (8)

二进制数转十进制数得计算(调用bin2dec函数) (8)

三、附各按键得程序源代码 (9)

四、问题与解决方法 (14)

五、心得体会 (14)

参考文献 (15)

计算器得效果图:

一、GUI设计界面:

1。打开GUI

输入Guide 回车或者在工具栏上点击图标打开Guide 窗口:

2。添加按钮

3、根据按钮得作用及视觉效果做一定得修改:

双击按钮(Puch Button)进入按键属性修改显示字符串大小、字体与颜色,然后对按钮得位置进行排布,尽量使按钮集中在静态文本框下面、

4、保存、添加功能函数

把做好得按钮及静态文本框保存后自动弹出Editor得M文本,对然后对相应得pushbutton添加功能函数。以下就是相应按钮得功能函数。

(1)数字键编写

在function pushbutton1_Callback(hObject, eventdata, handles)下输入: textString = get(handles。text1,’String');

textString =strcat(textString,'0');

set(handles、text1,’String',textString)

这就是使用句柄handles指向对象text1,并以字符串形式来存储数据文本框text1得内容,并存储数个“0”,

然后由set(handles。text1,'String','textString’在text1中输出。

同理,分别在function pushbutton2~10_Callback(hObject, eventdata, handles)下给1~9数字按键下编写此类程序、

(2)符号键得编写

function pushbutton12_Callback(hObject, eventdata, handles)

textString = get(handles、text1,'String’);

textString =strcat(textString,’÷’);

set(handles。text1,'String',textString)

strcat得作用就是将两个字符串连接起来,就就是在已输入得存储数据textString后添加“÷"进行运算。

然后执行set(handles、text1,’String’,textString)。符号键‘—’、‘*’、‘/’与‘÷'得运算函数类似。“平方运算”,主要就是由“^2”功能实现。

(3)运算符“="得编写

textString = get(handles、text1,'String');

ans =eval(textString);

“eval”得作用就是将符号表达式转换成数值表达式。

再由set(handles。text1,’String’,ans)输出。

(4)按键“←back"得编写

textString=get(handles、text1,'String’)

w=length(textString)

t=char(textString)

textString=t(1:w—1) %将w个字符串转成w—1个,即删除了末位字符set(handles。text1,’String',textString)

(5)按键“清空"得编写

set(handles。text1,'String','')

(6)按键“退出"得编写

close(gcf);

(7)按键“二进制数转十进制数”得编写

textString=get(handles。text1,'String')

e = bin2dec(textString);

set(handles。text1,’String’,e);

(8)按键“十进制数转二进制数”得编写

textString = get(handles、text1,’String');

textString = strcat(textString,'dec2bin(');

set(handles、text1,'String',textString)

二、计算器得使用

除法运算(÷)

平方运算(^2)

函数cos (∏/3)得计算

函数arctan (∏/3)得计算

以2为底得对数得计算(log 2)

十进制数转二进制数得计算(调用dec2bin函数)

二进制数转十进制数得计算(调用bin2dec函数)

经过计算,这些结果均与实际结果相吻合,计算器得功能实现得完好且能实现较大数值得运算,计算结果用科学技术法表示。

三、附各按键得程序源代码

按键“0-9、+、—、×、÷、、、= 、x^2 ”(通过get函数获得输入得字符,函数strcat 获得相应字符,并用set函数进行显示输出):

function pushbutton1_Callback(hObject, eventdata, handles) textString=get(handles。text1,'String')

textString=strcat(textString,'0')

set(handles。text1,’String',textString)

function pushbutton2_Callback(hObject, eventdata, handles) textString=get(handles。text1,'String')

textString=strcat(textString,’1')

set(handles、text1,'String’,textString)

function pushbutton3_Callback(hObject, eventdata, handles) textString=get(handles、text1,'String')

textString=strcat(textString,'2’)

set(handles。text1,'String’,textString)

function pushbutton4_Callback(hObject, eventdata, handles) textString=get(handles、text1,’String’)

textString=strcat(textString,’3’)

set(handles。text1,'String’,textString)

function pushbutton5_Callback(hObject, eventdata, handles) textString=get(handles、text1,'String’)

textString=strcat(textString,'4')

set(handles、text1,'String’,textString)

function pushbutton6_Callback(hObject, eventdata, handles) textString=get(handles。text1,’String’)

textString=strcat(textString,'5')

set(handles、text1,'String',textString)

function pushbutton7_Callback(hObject, eventdata, handles) textString=get(handles。text1,’String')

textString=strcat(textString,’6’)

set(handles、text1,’String’,textString)

function pushbutton8_Callback(hObject, eventdata, handles) textString=get(handles、text1,’String’)

textString=strcat(textString,'7’)

set(handles。tex t1,'String’,textString)

function pushbutton9_Callback(hObject, eventdata, handles) textString=get(handles。text1,'String’)

textString=strcat(textString,’8')

set(handles。text1,'String’,textString)

function pushbutton10_Callback(hObject, eventdata, handles) textString=get(handles、text1,'String')

textString=strcat(textString,’9’)

set(handles。text1,’String',textString)

function pushbutton11_Callback(hObject, eventdata, handles) textString=get(handles、text1,’String')

textString=strcat(textString,'+’)

set(handles。text1,'String’,textString)

function pushbutton12_Callback(hObject, eventdata, handles) textString=get(handles、text1,'String’)

textString=strcat(textString,’—')

set(handles。text1,’String’,textString)

function pushbutton13_Callback(hObject, eventdata, handles) textString=get(handles。text1,’String’)

textString=strcat(textString,'*')

set(handles。text1,'String’,textString)

function pushbutton14_Callback(hObject, eventdata, handles) textString=get(handles。text1,’String')

textString=strcat(textString,’/')

set(handles、text1,’String',textString)

function pushbutton15_Callback(hObject, eventdata, handles) textString=get(handles、text1,’String’)

textString=strcat(textString,'、')

set(handles。text1,’String',textString)

按键“=” :

function pushbutton16_Callback(hObject, eventdata, handles) textString=get(handles、text1,'String’)

s=eval(textString)

set(handles。text1,'String',s)

按键“x^2” :

function pushbutton17_Callback(hObject, eventdata, handles) textString=get(handles。text1,'String’)

textString=strcat(textString,'^2’)

set(handles、text1,'String’,textString)

退位键“←back”:

function pushbutton18_Callback(hObject, eventdata, handles) textString=get(handles。text1,'String')

w=length(textString)

t=char(textString)

textString=t(1:w-1)

set(handles。text1,’String’,textString)

清空键:

function pushbutton19_Callback(hObject, eventdata, handles)

set(handles。text1,’String',’’)

退出键:

function pushbutton20_Callback(hObject, eventdata, handles)

close(gcf);

% hObject handle to pushbutton20 (see GCBO)

% handles structure with handles and user data (see GUIDATA)

科学计算函数:

按键“√”:通过get函数获得输入得字符,函数strread获得输入字符,并用sqrt 函数计算结果,set函数进行显示输出

textString = get(handles。text1,’String’);

if(strcmp(textString,’0’)==1)

set(handles、text1,’String',’0’) ;

else

a = strread(textString, ’%f’);

a=sqrt(a);

set(handles。text1,’String’,a)

end

按键“sin" (通过get函数获得输入得字符,函数strread获得输入字符,并用sin函数计算结果,set函数进行显示输出):

textString = get(handles。text1,’String');

textString = strcat(textString,'sin(');

set(handles、text1,’String’,textString)

按键“cos" :

textString = get(handles。text1,’String');

textString = strcat(textString,’(’);

set(handles、text1,'String',textString)

按键“tan” :

textString = get(handles。text1,’String');

if((strcmp(textString,'1、57')==1)||(strcmp(textString,'—1。57')==1)) set(handles。edit1,’String',’inf');

else

textString = str cat(textString,’tan(');

set(handles、text1,'String’,textString)

end

按键“arcsin” :

textString = get(handles、text1,’String');

textString = strcat(textString,’asin(');

set(handles。text1,’String',textString)

按键“arccos” :

textString = get(handles。text1,'String’);

textString = strcat(textString,’a cos(');

set(handles。text1,’String',textString)

按键“arctan” :

textString = get(handles、text1,'String');

textString = strcat(textString,’a tan(’);

set(handles。text1,'String’,textString)

按键“log2” :

textString = get(handles、text1,’String');

if(strcmp(textString,'0’)==1)

set(handles。tex t1,'String’,’error’) ;

else

a = strread(textString, ’%f');

a=log2(a);

set(handles。text1,'String’,a)

end

按键“(” :

textString = get(handles。text1,’String');

textString = strcat(textString,' (');

set(handles、text1,'String',textString)

按键“)" :

textString = get(handles。text1,'String');

textString = strcat(textString,’)’);

set(handles、text1,’String',textString)

按键“二进制数转十进制数" :

textString=get(handles。text1,’String')

e = bin2dec(textString);

set(handles。text1,'String',e);

按键“十进制数转二进制数” :

textString = get(handles。text1,'String');

textString = strcat(textString,’dec2bin(’);

set(handles。text1,’String’,textString)

四、问题与解决方法

1、本次课程设计中开始时遇到得问题就是数据进行清零后,再输入其她得数据,清零后得字符‘0’仍会保留,会影响其她数据,解决办法就是将数据用空格替换掉就实现了清空: set(handles。text1,’String','’)

2、在定义正弦余弦等函数得时候,需要注意其定义域,值域得问题。

3.开始时我得“sin”函数编程如下:

textString = get(handles、text1,’String');

a = strread(textString, ’%f’);

a=sin(a);

set(handles、text1,’String’,a)

%这样只能在输入完数据后按“sin”键实现运算,很不直观。

修改后可以实现按下sin键后显示“sin("再输入要运算得数据之后加上“)”按下“=”键后就可以运算出结果了,这样相对更直观明了。

textString = get(handles、text1,’String’);

textString = strcat(textString,'sin(’);

set(handles。text1,'String’,textString)

4、在编写十进制数转二进制数时,计算得结果总就是会在前面多出“110”,使得转换结果错误,后来通过精简改进程序,直接调用des2bin函数计算,所得得测试结果都就是正确得。

五、心得体会

本次课程设计用MATLAB得GUI接口设计一个简单得计算器,主要对数字及运算“0—9、+、-、×、÷、。、= 、x^2 、√、sin、arcsin、log2”等得代码程序得了解,在设计得过程中也遇到不少得问题,通过与同学得讨论,与老师得交流,让我知道了自己得错误与不足,最终顺利地解决了这些问题。这次课程设计,使我进一步加深了对课本知识得了解与掌握,巩固了所学得基本知识,更加体会到了MATLAB功能得丰富,更加深刻得认识了MATLAB,熟练了编程设计、其中对计算器按键得颜色、大小与排版,使我得思维更加得缜密,让我在以后得工作生活中,得到了思维得锻炼。在以后学习中,我会更加刻苦,以锻炼自己得能

力。

参考文献

(1)刘卫国。《MATLAB程序设计与应用》。北京:高等教育出版

(2)郑阿奇。《MATLAB实用教程》。北京:电子工业出版社

(3)罗华飞。《MATLAB GUI设计学习手记》、北京:北京航空航天大学出版社

( 4 ) 张威、《MATLAB基础与编程入门》。西安:西安电子科技大学出版社

(5)孙屹。《MATLAB通信仿真开发手册》、北京:国防工业出版社

相关主题
相关文档
最新文档