GUI设计在高等数学中的应用.docx

上传人:b****5 文档编号:3545429 上传时间:2022-11-23 格式:DOCX 页数:12 大小:292.18KB
下载 相关 举报
GUI设计在高等数学中的应用.docx_第1页
第1页 / 共12页
GUI设计在高等数学中的应用.docx_第2页
第2页 / 共12页
GUI设计在高等数学中的应用.docx_第3页
第3页 / 共12页
GUI设计在高等数学中的应用.docx_第4页
第4页 / 共12页
GUI设计在高等数学中的应用.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

GUI设计在高等数学中的应用.docx

《GUI设计在高等数学中的应用.docx》由会员分享,可在线阅读,更多相关《GUI设计在高等数学中的应用.docx(12页珍藏版)》请在冰豆网上搜索。

GUI设计在高等数学中的应用.docx

GUI设计在高等数学中的应用

GUI设计在高等数学中的应用

摘要:

在高等数学中,经常面临一些图形和计算的问题,但很多函数的表达式和计算过于抽象。

在MATLAB中GUI设计可以很好的解决这些问题,对相关的函数可以利用MATLAB强大的数值计算功能进一步的分析。

本文中利用GUI设计来解决函数极限可视化以及多项式的曲线拟合,达到图形与函数结合更直观清晰的效果。

关键字:

GUI函数极限可视化多项式的曲线拟合

1.函数极限可视化

可视化显示求函数极限的过程,可以随着自变量取值的变化来显示函数值也随之不断变化的动态可视化。

例:

绘制函数

下的曲线并观察和推断当

时,函数的变化趋势,说明单,双侧极限的关系。

通过绘制函数的动态曲线(彗星轨道)和静态曲线极限图,来推断当

时的函数变化曲线。

在布局编辑器中布置控件:

●建立2个坐标轴对象,用于显示函数的动态彗星轨迹和函数的极限图形。

●建立2个静态文本标注动态彗星轨迹和函数的极限图形。

●建立3个按钮,用于绘制图形和结束程序。

●分别设置3个按钮的标示为comet_pushbutton,用于绘制函数的动态彗星轨迹曲线。

limit_pushbutton,绘制函数的极限曲线。

close_pushbutton,用于结束程序。

界面设置如图1-1所示。

保存为gui_hanshu.fig文件。

添加菜单,添加绘制图形和关闭图形的命令,如图1_2所示。

建立一级菜单【file】,并设置3个菜单命令【comet】【limit】和【close】它们的tag属性分别设置为comet_menu调用绘制函数的动态彗星轨迹图形功能。

limit_menu,调用绘制函数的极限图像功能。

close_menu,执行关闭图形的功能。

图1_1函数极限可视化布局

图1_2添加菜单

编写代码完成程序中的变量赋值,输出(输入)及绘图等,打开gui_hanshu.m文件,系统自动生成M文件的程序代码如下:

functionvarargout=gui_hanshu(varargin)

gui_Singleton=1;

gui_State=struct('gui_Name',mfilename,...

'gui_Singleton',gui_Singleton,...

'gui_OpeningFcn',@gui_hanshu_OpeningFcn,...

'gui_OutputFcn',@gui_hanshu_OutputFcn,...

'gui_LayoutFcn',[],...

'gui_Callback',[]);

ifnargin&&ischar(varargin{1})

gui_State.gui_Callback=str2func(varargin{1});

end

ifnargout

[varargout{1:

nargout}]=gui_mainfcn(gui_State,varargin{:

});

else

gui_mainfcn(gui_State,varargin{:

});

end

functiongui_hanshu_OpeningFcn(hObject,eventdata,handles,varargin)

handles.output=hObject;

guidata(hObject,handles);

functionvarargout=gui_hanshu_OutputFcn(hObject,eventdata,handles)

varargout{1}=handles.output;

调用comet_pushbutton_Callback绘制函数

下的动态曲线(彗星轨迹)图形,代码如下:

functioncomet_pushbutton_Callback(hObject,eventdata,handles)

axes(handles.axes1);

x=-700:

0.1:

700;

boxon;

holdon;

axis([-700700-2.41.1]);

comet(x,sin(x)./x);

调用limit_pushbutton_Callback绘制函数

下的静态极限图形,代码如下:

functionlimit_pushbutton_Callback(hObject,eventdata,handles)

axes(handles.axes2);

fplot('sin(x)./x',[-100100-0.241.1]);

text(30,0.5,'sin(x)./x');

调用close函数关闭图形退出程序,代码如下:

functionclose_pushbutton_Callback(hObject,eventdata,handles)

close

菜单命令comet_menu调用函数comet_pushbutton_Callback绘制动态曲线,代码如下:

functioncomet_menu_Callback(hObject,eventdata,handles)

comet_pushbutton_Callback(hObject,eventdata,handles);

functionfile_menu_Callback(hObject,eventdata,handles)

菜单命令limit_menu调用函数limit_pushbutton_Callback绘制静态极限图形,代码如下:

functionlimit_menu_Callback(hObject,eventdata,handles)

limit_pushbutton_Callback(hObject,eventdata,handles);

菜单命令close_menu调用close函数关闭图形退出程序,代码如下:

functionclose_menu_Callback(hObject,eventdata,handles)

close

程序运行后,单击【comet】按钮或选择【comet】菜单命令后,绘制动态曲线(彗星轨迹)图形,如图1_3和图1_4所示

图1_3动态彗星轨道曲线(

图1_4动态彗星轨道曲线(

单击【limit】按钮或选择【limit】菜单命令后绘制静态极限图形,如图1_5所示

图1_5函数静态极限图形

图1_6函数极限可视化

从图1-6可以观察动态曲线图和静态曲线图,当

时,函数的变化趋势都是无限地趋近于0;即

时,函数的变化趋势都是无限地趋近于1;即

这说明双侧极限存在的充要条件是两个单侧极限存在且相等,双侧极限值等于但侧极限值。

2.多项式的曲线拟合

最佳拟合被解释为在数据点的最小误差平方和,若所用的曲线限定为多项式,那么曲线拟合是相当简捷的,称为多项式的最小二乘曲线拟合。

在MATLAB中使用函数ployfit来进行曲线拟合,调用格式如下:

P=ployfit(x,y,n)

其中x和y表示输入的原始数据,n表示阶次。

为了使用ployfit,必须给函数赋予上面的数据和希望最佳拟合数据的多项式的阶次。

如果选择n=1作为阶次,则得到最简单的线性近似,通常称为线性回归;相反,如果选择n=2作为阶次,则得到一个二阶多项式。

例:

输入原始数据,对这些数据进行多项式不同阶次得曲线拟合。

●建立一个坐标轴对象,用于显示函数和零点坐标。

●建立4个静态文本框,标注相应的控件的提示和用来显示坐标数值。

●建立2个按钮,用于求函数零点和结束程序。

设置控件的tag属性:

●分别设置两个按钮的tag为polyfit_pushbutton用于曲线拟合,close_pushbutton用于结束程序。

●设置4个可编辑文本框,显示x,y,n和拟合后的系数数据,tag依次设为x_edit,y_edit,n_edit,xishu_edit.

●Tag为x_edit,y_edit,n_edit的可编辑文本框的HorizontalAlignment都设置为left.

添加菜单,用来添加曲线拟合和关闭图形的命令。

建立一级菜单【file】,并且设置菜单命令【polyfit】和【close】.它们的tag分别设置为polyfit_menu调用曲线拟合的函数和close_menu关闭图形的功能。

系统自动生成的M文件打得程序代码如下:

functionvarargout=gui_qx(varargin)

gui_Singleton=1;

gui_State=struct('gui_Name',mfilename,...

'gui_Singleton',gui_Singleton,...

'gui_OpeningFcn',@gui_qx_OpeningFcn,...

'gui_OutputFcn',@gui_qx_OutputFcn,...

'gui_LayoutFcn',[],...

'gui_Callback',[]);

ifnargin&&ischar(varargin{1})

gui_State.gui_Callback=str2func(varargin{1});

end

ifnargout

[varargout{1:

nargout}]=gui_mainfcn(gui_State,varargin{:

});

else

gui_mainfcn(gui_State,varargin{:

});

end

在程序初始化得时候,显示默认想x,y,n的数据,代码如下:

functiongui_qx_OpeningFcn(hObject,eventdata,handles,varargin)

set(handles.x_edit,'string','00.10.20.30.40.50.60.70.80.91');

set(handles.y_edit,'string','0.461.993.276.167.087.347.569.669.459.3411.4');

set(handles.n_edit,'string','3');

handles.output=hObject;

guidata(hObject,handles);

functionvarargout=gui_qx_OutputFcn(hObject,eventdata,handles)

varargout{1}=handles.output;

按钮polyfit_pushbutton调用函数,将x,y,n的字符转化为数据,进行曲线拟合,把拟合后的系数输出在tag为xishu_eidt的编辑文本框中,代码如下:

functionpolyfit_pushbutton_Callback(hObject,eventdata,handles)

x=str2num(get(handles.x_edit,'string'));

y=str2num(get(handles.y_edit,'string'));

n=str2num(get(handles.n_edit,'string'));

plot(x,y,'m:

','Marker','o');

holdon

p=polyfit(x,y,n);

yy=polyval(p,x);

plot(x,yy,'r-');

set(handles.xishu_edit,'string',strcat('p=',num2str(p)));

按钮close_pushbutton调用close函数关闭图形结束程序,代码如下:

functionclose_pushbutton_Callback(hObject,eventdata,handles)

close

菜单polyfit_menu调用polyfit_pushbutton_Callback函数进行曲线拟合,代码如下:

functionpolyfit_menu_Callback(hObject,eventdata,handles)

polyfit_pushbutton_Callback(hObject,eventdata,handles)

按钮close_menu调用close函数关闭图形结束程序,代码如下:

functionclose_menu_Callback(hObject,eventdata,handles)

close

程序运行后,可以使用默认的x,y,n的数据,x=[00.10.20.30.40.50.60.70.80.91];y=[0.461.993.276.167.087.347.569.669.459.3411.4];阶数n=3,如图2-1所示。

图2-1初始界面

单击【polyfit】按钮和菜单命令【polyfit】后,进行曲线拟合,如图2-2所示

图2-2曲线拟合

由图2-2可知,拟合后的系数p=[11.8337-25.550124.57930.0995105],

则多项式的表达式y=11.8337x^3-25.5501x^3+24.5793x+0.0995105.

当对x,y,n分别进行改变时,拟合曲线也相应的随之变化,如图2-3所示

图2-3当n=6时的曲线拟合

多项式阶次的选择是任意的。

两点决定一直线或一阶多项式,3点决定一个二阶多项式,n+1数据点唯一的确定n阶多项式此例中的11个数据点可选一个最高为10阶的多项式。

然而,并不是多项式的阶数越高,效果越好。

需要对不同阶数的情况进行比较分析,才能得到较好的多项式拟合效果。

参考文献:

[1]李显宏.MATLAB界面设计与编译技巧.北京:

电子工业出版社,2006.

[2]刘卫国.MATLAB程序设计与应用(第二版).北京:

高等教育出版社,2006

[3]赵书兰.MATLAB图形与动画编程实例案.北京:

化学工业出版社,2009

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1