DataType: 1
题名: 数学建模教学模式的研究与实践
作者: 乐励华,戴立辉,刘龙章
单位: 东华理工学院,东华理工学院,东华理工学院 江西抚州344000 ,江西抚州344000 ,江西抚州344000
年: 2002
期: 06
页码: 9-12
关键词: 数学建模课;;教学模式;;教学改革
摘要: 探讨工科数学教学中数学建模课的多个层次和开设数学建模课的几种方式 ,并且介绍我们的一些具体做法
DataType: 1
题名: MATLAB用于《高等数学》的教学
作者: 朱汉敏
单位: 苏州经贸职业技术学院 苏州,215000
年: 2004
期: 02
页码: 77-80
关键词: MATLAB;;高等数学
摘要: MATLAB 已经成为国际上最流行的科学与工程计算的软件工具,它在国内外高校和研究部门正扮演着重要的角色。本人在《高等数学》教学中,利用MATLAB的图形生成功能,使数学知识直观生动,增强了学生对数学的兴趣,并为学生日后数学建模、科学与工程计算开启了一扇大门。
DataType: 1
题名: 用MATLAB解决高等数学中的图形问题
作者: 周德亮,白岩
单位: 吉林大学数学科学学院,吉林大学数学科学学院 长春130012 ,长春130012
年: 2002
期: 01
页码: 122-124
关键词: MATLAB;;高等数学;;Mathematica
摘要: 本文通过实例将 MATLAB与 Mathematica的图形功能做了比较 ,指出了 MATLAB在解决高等数学图形问题时的优势 .
DataType: 1
题名: MATLAB在高等数学教学中的几种应用
作者: 唐世星;张红玉;柯凤琴;
单位: 承德石油高等专科学校数理系,承德石油高等专科学校数理系,承德石油高等专科学校汽车工程系 河北承德067000,河北承德067000,河北承德067000
年: 2007
期: 03
页码: 50-53
关键词: 高等数学;;MATLAB;;计算机辅助教学;;教学改革
摘要: 以提高高等数学的教学质量、进行教学改革为目的,充分利用MATLAB软件在作图和数值计算上的优势,结合高等数学和MATLAB语言的特点,以高等数学教学中的几个具体问题为例,阐明了MATLAB语言在高等数学教学中的三种应用。
DataType: 1
题名: MATLAB在高等数学CAI中的应用
作者: 何双
单位: 阳江职业技术学院 广东阳江529500
年: 2005
期: 10
页码: 125-128
关键词: MatLab;;梯度场;;绘图;;CAI教学
摘要: 文章结合高等数学CAI教学,通过以梯度场为例,给出了课件的源代码,建立图形用户界面,实现了函数绘图的过程,来介绍Matlab的图形处理功能及优化高等数学CAI教学的制作问题。
DataType: 1
题名: 基于MATLAB动画设计辅助高等数学教学
作者: 刘璟忠;莫明琪;
单位: 湖南工学院,湖南公安高等专科学校 湖南衡阳421101,湖南长沙410008
年: 2006
期: 05
页码: 269-271
关键词: MATLAB;;动画设计;;高等数学;;辅助教学
摘要: 高等数学相对于初等数学,在学习方法和思维方法等多方面都有很大的差异,许多学生对其望而生畏。随着计算机科学的发展以及软件技术的不断提高,生动、直观的教学成为可能。MATLAB软件是一款功能强大的应用型软件,它在动画制作方面也有明显的优势,本文就具体事例制作基于MATLAB的动画,辅助高等数学教学,取得了很好的效果。
DataType: 1
题名: 基于MATLAB的高等数学立体化教学
作者: 钟建新;谢虹;
单位: 赣南师范学院,赣州市第四中学 师范专科部数学系,江西赣州341000
年: 2007
期: 03
页码: 60-61
关键词: MATLAB;;数值计算;;图形处理;;数据分析
摘要: 介绍了MATLAB软件在数值计算、图形处理、数据分析等方面的应用,为高等数学的立体化教学提供了平台,值得在数学教学中应用和推广。
DataType: 1
题名: 提高高等数学教学质量的对策研究
作者: 刘罗华,汤琼
单位: 株洲工学院信息与计算科学系,株洲工学院信息与计算科学系 株洲,412008 ,株洲,412008
年: 2003
期: 04
页码: 83-86
关键词: 教学内容;;教学方法;;教学手段
摘要: 本文阐述了当今工科院校中高等数学教学内容、教学方法、教学手段的一些急需解决的问题 ,并对这些问题作了详细的分析 ,提出相应的处理对策
[1]毛纲源. 一类特殊分块矩阵为循环矩阵的循环分块矩阵的几个性质[J]. 应用数学,1995,(3).
[2]游兆永,姜宗乾,. 分块矩阵的对角占优性[J]. 西安交通大学学报,1984,(3).
[3]曹重光. 体上分块矩阵群逆的某些结果[J]. 黑龙江大学自然科学学报,2001,(3).
[4]庄瓦金. 非交换主理想整环上分块矩阵的秩[J]. 数学研究与评论,1994,(2).
[5]曹礼廉,李芳芸,柴跃廷. 一种用于MRP的分块矩阵方法[J]. 高技术通讯,1997,(7).
[6]逄明贤. 分块矩阵的Cassini型谱包含域[J]. 数学学报,2000,(3).
[7]杨月婷. 一类分块矩阵的谱包含域[J]. 数学研究,1998,(4).
[8]何承源. R-循环分块矩阵求逆的快速傅里叶算法[J]. 数值计算与计算机应用,2000,(1).
[9]马元婧,曹重光. 分块矩阵的群逆[J]. 哈尔滨师范大学自然科学学报,2005,(4).
[10]游兆永,黄廷祝. 两类分块矩阵的性质与矩阵正稳定和亚正定判定[J]. 工程数学学报,1995,(2).
相关论文:
Vc++下如何利用Matlab工具箱进行数字信号处理
摘要: 本文详述了在Vc环境下如何利用Matlab工具箱进行数字信号处理,全文以Matlab工具箱中功率谱密度分析函数为例,介绍了通过Matlab自带的引擎、Matlab自身的编译器以及利用MathTools公司的Matcom进行对工具箱函数的调用。
关键词:Matlab M-文件 引擎 编译器 Matcom Vc++
Matlab的信号处理工具箱是信号算法文件的集合,它处理的基本对象是信号与系统,信号处理工具箱位于目录、Toolbox\Signal下,利用工具箱中的文件可以实现信号的变换、滤波、谱估计、滤波器设计等。在其它的环境如Vc下如果能调用Matlab工具箱中的文件,会大大地加快一些算法的实现,同时其可靠性也很高。
利用Matlab引擎
Matlab引擎采用客户和服务器计算方式,在运用中,Vc的C语言或C++语言的程序作为前端客户机,它向Matlab引擎传递命令和数据信息,并从Matlab引擎接收数据信息,它提供了下列几个函数: engOpen, engGetArray, engPutArray, engEvaString,
engOutputBuffer ,engClose与客户机进行交互。
下面例程是在Vc下建一个基于对话框的应用程序,在对话框中设置一个Button控件OnMatlabEngine.,在对话框 .cpp文件中加入”engine.h” 和“math.h” 头文件,下面给出部分程序清单。
Void CtestmatlabDlg::OnMatlabEngine(){
Engine *ep;
mxArray* T=NULL,*result=NULL,*mFs=NULL,*mnfft= NULL;
double datax[1024];
char buffer[1024];
for(int j=0;j<1024;j++)//注:如通过采集卡采集数据可将采集的数据放在datax[]数组中,此循环就不需要
{
double samt=(double)(1.0/1024);
datax[j]=sin(2.0*63.0*samt*3.1415926+1.15*3.1415926);
}
double *pPxx,*pFxx;
if(!(ep=engOpen(" \0"))){//打开Matlab引擎,建立与本地Matlab的连接
fprintf(stderr,"\n Can't start MATLAB engine\n");
exit(-1);
}
double Fs[1]={1024};//因为Matlab所有参与运算的参数都是矩阵的形式,因而下列几行将参数转变
double nfft[1]={1024};//成Matlab可接受的矩阵形式。
T=mxCreateDoubleMatrix(1,1024,mxREAL);
mnfft=mxCreateDoubleMatrix(1,1,mxREAL);
mFs=mxCreateDoubleMatrix(1,1,mxREAL);
mxSetName(T,"T");
mxSetName(mnfft,"mnfft");
mxSetName(mFs,"mFs");
memcpy((char*)mxGetPr(T),(char*)datax, 1024*sizeof(double));
memcpy((char*)mxGetPr(mnfft),(char*)nfft, sizeof(double));
memcpy((char*)mxGetPr(mFs),(char*)Fs,1*sizeof(double));
engPutArray(ep,T); //将转化的参数放入引擎中,此时可在Matlab command窗口下查看此参数
engPutArray(ep,mnfft);
engPutArray(ep,mFs);
engEvalString(ep,"[pxx,fo]=psd(T,mnfft,mFs);"); //利用引擎执行工具箱中文件
engOutputBuffer(ep,buffer,512); //如只想看显示图形,可将返回参数去掉,psd无返回参数缺省情况下会自动画图形
result=engGetArray(ep,"pxx");//取出引擎中的数据放在所指的区域中供后续处理
pPxx=mxGetPr(result);
result=engGetArray(ep,"fo");
pFxx=mxGetPr(result);
engEvalString(ep,"plot(fo,10*log10(pxx));");//利用引擎画图
engEvalString(ep,"title('功率谱分析');");
engEvalString(ep,"xlabel('Hz');");
engEvalString(ep,"ylable('db');");
mxDestroyArray(T); //释放内存
mxDestroyArray(mFs);
mxDestroyArray(mnfft);
mxDestroyArray(result);
engEvalString(ep,"close;");
engClose(ep);
}
上述程序在Vc下编译需要将 libeng.dll和libmx.dll两个动态库利用以下的命令:
lib/def:<自己的Matlab的安装路径,下同>e:\ Matlab\extern\include\*.def /machine:ix86 /out:*.lib来生成程序所需的静态连接库libeng.lib和libmx.lib,将libeng.lib和libmx.lib所在的目录加入Vc++ project/link/object/library modules下即可。
利用Matlab自身的编译器调用工具箱中的函数
Matlab的编译器可将Matlab的M文件转换为为C或C++的源代码以产生完全脱离Matlab运行环境的独立的运用程序,但Matlab本身的资料说明编译器如用来建立独立的运用程序,不能调用Matlab工具箱中的函数,这非常不利于搞一些特殊的算法。本人研究了一段时间发现,工具箱中的函数既然是M文件就一定可以用编译器来编译,以提供如Vc的调用函数,但是编译器只能编译一个独立的M文件,即这个 M文件不依赖于其他的M文件。如果M文件中又调用了其他的M文件,可将被调用的M文件拷贝到调用M文件的相应位置,作适当的改动就可以用于编译器编译。编译器不支持图形函数,所以M文件中如有图形函数需注释掉。
当Matlab的编译器mcc加入适当的参数-e(mcc –e *.*)或-p(mcc –p *.*)就可生成将输入的M文件转换为适用于特定运用的C或C++源代码。这样如果要在Vc下编译通过,还需连入以下几个库libmmfile.dll, libmatlb.dll, libmcc.dll, libmat.dll. libmx.dll. mibut.dll 以及Matlab C MATH库,建议采用前述的方法将动态连接改为静态连接。对于C/C++编译环境的设置,在Matlab command窗口下运行mex –setup 然后依提示操作,而对于C/C++连接环境的设置,运行mbuild –setup依提示操作即可。
下面给出利用编译器将Matlab工具箱中psd.m文件生成可供Vc调用的函数。
将psd.m文件拷贝一份至Matlab\bin目录下,改写相应调用的M文件如nargchk.m, hanning.m等。为生成的代码简洁,对于采集数据处理输入参数很明了的情况下可作大量的删减,最终使psd.m成为一个不依赖于其他M文件的独立的M文件,注意千万注释掉作图代码,最终改成如下形式,限于篇幅给出关键的几步:
function [Pxx,f]=psd(Fs,nfft,noverlap,x)
window=o,5*(1-cos(2*pi*(1:nfft)’/(nffft+1)));//hanning 窗
dflag=’none’;
window=window(;)
………………………………….
以上只要稍懂Matlab语言和信号处理知识就可完成这项工作。
假设上述代码重新存为testwin.m,在Matlab command 窗口下设置好环境参数运行mcc –e testwin,则可在Matlab\bin下生成testwin.c ,如运行mcc –p testwin 则生成testwin.cpp.
Vc下建立一个基于对话框的文件,然后在对话框里加一个Button控件OnButtonPsd
将上述生成的.c文件的头文件加入到工程的.cpp中,且将#ifdef_cplusplus
extern “c”{
#end if
c代码声明加入Vc的包含文件和生成的.C的包含文件之间
将#ifdef_cplusplus
}
#end if加入.cpp文件未尾
为了简洁且便于处理将生成的c函数稍改动,给出部分代码如下:
void CTestpsdwinDlg::OnButtonPsd(){
mxArray* x_rhs_;//指向采集数据存放区
Fs=23510;//数据采集的频率 nfft=1024;//1024点的fft
double datax[1024]//采集的数据
x_rhs_mxCreateDoubleMatrix(1,1024,mxReal);
memcpy(mxGetPr(x_rhs_),datax,1024*sizeof(double));
noverlap=512;
……………….
……………….
mccCopy(&Pxx,&Spec);
mccCopy(&f,&frevgg_vector);
for(int j=0;j<(int)(nfft/2+1);j++)
{
datap[j]=mccGetRealVectorElement(&Pxx, (j+1));//功率谱密度存于datap[]数组
dataf[j]=mccGetRealVectorElement(&f, (j+1));//相应频率存于数组dataf[]中
}
mccFreeMatrix(&Pxx);
……………….
SendMessageBox(WM_PAINT,0,0);//利用Vc下的图形函数画图
Return;
}
如上生成的程序可读性不太好,而生成的c++代码则可读性较好,但千万注意只能用 Matlab的MATH库,不可用c++的MATH库,否则编译会出错,限于篇幅在此不述。
3)利用Matcom调用工具箱中的函数
Matcom编译M文件,先将M文件按照与Matcom的cpp库的对应关系翻译为cpp源代码,然后用对应版本的c编译器将cpp文件编译成相应的exe或dll文件,所以第一次运行要指定c编译器的路径,否则无法编译,指定好的编译信息就写在Matcom\bin\matcom.ini文件中,不过这一步按装matcom时,它自动寻找编译器并将其写入matcom.ini文件中,matcom4.5版中使用TeeChart3.0 OCX控件,因而它支持图形操作。
我们依然用上述的testwin.m文件,不要将图形函数注释掉,利用Mideva来生成可被Vc调用的信号处理程序。
运行Mideva在主界面上直打开M文件,在菜单中选择compile to dll,输入testwin..在Matcom debug目录下可以找到这样的几个文件,testwin.c ,testwin.h,testwin.cpp,testwin.lib,testwin.dll,testwin.exp等。
将上述testwin.cpp和testwin.h加入工程中,project/add to project/files并且在相应的文件中加入”stdafx.h”
加连接库:Tools\option\directory\ , 选include选项,加入e:\matcom45\lib (包含matcom.h)
library选项,加入e:\matcom45\lib
4) project\add to project\files 文件类型选项选(.lib)将e:\matcom45\lib\v4501.lib加入工程中编译运行。相应代码如下:
void CtestmatcomDlg::OnpsdButton(){
double datap[512],dataf[512];
initM(MATCOM_VERSION);//初始化matcom库
Mm Fs,nfft,noverlap;//创建矩阵
Mm x=zeros(1,1024);
Fs=1024;nfft=1024;noverlap=128;
dMm(Pxx_o);dMm(f_o);//创建并命名矩阵
datax[];//数据采集的数据存于此数组中
for(int i=1;i<=1024;i++)
{
x.r(1,i)=datax[i+1];//给x阵赋值
}
testwin(Fs,nfft,noverlap,x,i_o,Pxx,f_o);//matcom生成的函数
for(i=0;i<513;i++){//取出功率谱密度分析结果
dataf[i]=f_o.r(i+1,1);
datap[i]=Pxx_o.r(i+1,1);}
exitM();
return;
}
可见利用Matcom进行M文件转换非常的容易,生成的代码可读性很好,以上的转换同时生成了可供Vc调用的动态连接库,其使用和一般的动态库一样使用。同时需指明Matcom不仅可转换独立的不依赖于其它M文件的M文件,同时可转换调用其它M文件的M文件嵌套。条件是这此M文件在同一个目录下面,如前所述的psd.m可直接用上述方法转换,生成了多个重载形式的psd函数
结论: 利用Mtlab引擎调用工具箱中的函数可节省大量的系统资源,应用程序整体性能较好,但不可脱离Matlab 的环境运行。用Matlab编译器进行工具箱函数的调用,须转换相应的M文件使其成为独立的M文件,且不支持图形函数,转换的代码可读性不太好。用Matcom 进行转换非常方便,生成的代码可读性很好,支持图形函数,且代码执行的速度比不转换平均要快1.5倍以上。以上程序在Vc++ 6.0,Matlab5.2,Matcom4.5中调试通过,以上方法在工程实践中已得到很好的运用。
仅供参考,请自借鉴
希望对您有帮助
我帮你编了三个程序(我老师给我的练习题目),你拿去用吧,我花了两个小时才编好的,分要给我哦。
第一题:
某数据文件’aa.dat’的格式为:
student number
1 2 3 4 5 6 7 8 9 10
Chinese score
80 85 70 79 98 90 73 83 86 90
English score
80 85 70 79 98 90 73 83 86 90
Math score
80 85 70 79 98 90 73 83 86 90
Physics score
80 85 70 79 98 90 73 83 86 90
设计一matlab程序,实现下面的功能:
根据输入的学号和课程名,查询该学生该门功课的成绩。
根据输入的学号,查询该学生各门功课的成绩,输出该信息(学号、功课名、成绩)。
在同一张图中绘制学号—各门功课成绩分布图,并保存图形。
按列(学号、功课1、功课2、…)输出信息保存到文件中。
第二题:
编写Matlab程序,构造以下的图形(图在最下面)
第三题
编写Matlab程序,实现以下功能:
1、 从外部文件中读入10个学生5门课的成绩;
2、 用独立的函数分别求:
a) 每个学生的平均分;
b) 每门课的平均分;
c) 找出最高的分数所对应的学生和课程;
d) 求平均分方差。
对应的程序:第一题:
function firstone
clear all
fin=fopen('firstone.txt','r');
global chengji
str=fgetl(fin);
[str1 str2 num1 num2 num3 num4 num5 num6 num7 num8 num9 num10]...
=strread(str,'%s %s %d %d %d %d %d %d %d %d %d %d','delimiter',' ');
num=[num1 num2 num3 num4 num5 num6 num7 num8 num9 num10];
chengji=zeros(4,10);
contor=1;
while feof(fin)==0
str=fgetl(fin);
[str1 str2 fenshu1 fenshu2 fenshu3 fenshu4 fenshu5 fenshu6 fenshu7 fenshu8 fenshu9 fenshu10]...
=strread(str,'%s %s %d %d %d %d %d %d %d %d %d %d','delimiter',' ');
fenshu=[fenshu1 fenshu2 fenshu3 fenshu4 fenshu5 fenshu6 fenshu7 fenshu8 fenshu9 fenshu10];
str3{contor}=str1;
if fenshu
chengji(contor,:)=fenshu;
end
contor=contor+1;
end
%根据学号和课程名称查询该生此课程的成绩
function f1(kecheng,xuehao)
for i=1:4
str=str3{i};
if strcmp(kecheng,str)
break
end
end
fprintf('%d号学生的%s的成绩是%d;\n',xuehao,kecheng,chengji(i,xuehao));
end
%输入的学号,查询该学生各门功课的成绩
function f2(xuehao)
s={'Physics' 'English' 'Math' 'Chinese'};
for i=1:4
fprintf('%d号学生%s的成绩是%d;\n',xuehao,s{i},chengji(i,xuehao));
end
end
%在同一张图中绘制学号—各门功课成绩分布图,并保存图形
rou=zeros(4,5);
% 统计分学科各分数段的人数,将其保存在rou数组中
for i=1:4
for j=1:10
if chengji(i,j)<60
rou(i,1)=rou(i,1)+1;
elseif chengji(i,j)<70
rou(i,2)=rou(i,2)+1;
elseif chengji(i,j)<80
rou(i,3)=rou(i,3)+1;
elseif chengji(i,j)<90
rou(i,4)=rou(i,4)+1;
else
rou(i,5)=rou(i,5)+1;
end
end
end
subplot(1,4,1);
for i=1:4
a=rou(i,:);
str=str3{i};
label={'<60','60~70','70~80','80~90','>90'};
for j=1:5
if a(j)<0
a(j)=[];
label{j}=[];
end
end
subplot(1,4,i);
pie(a,label);
title(str);
end
%按列(学号、功课1、功课2、…)输出信息保存到文件中
fenshu=zeros(5,10);
for i=1:10
for j=1:4
fenshu(1,i)=num(i);
fenshu(j+1,i)=chengji(j,i);
end
end
dlmwrite('tongji.txt',fenshu, 'delimiter',' ');
%示例查询课程分数
f1('Math',3);
f2(3);
end
运行结果:
3号学生的Math的成绩是70;
3号学生Physics的成绩是70;
3号学生English的成绩是70;
3号学生Math的成绩是70;
3号学生Chinese的成绩是70;
第二题:
function secendone
figure(1)
axis([0 25 -20 5]);
box('on');
xlabel('X(m)');
ylabel('Z(m)');
title('Model No.1 of DC resistivity');
X1=[0 25];
Y1=[0 0];
Y2=[-5 -5];
line(X1,Y1);
line(X1,Y2);
X2=[5 10];
Y3=[-5 0];
line(X2,Y3);
X3=[10,20];
Y4=[-10 -10];
Y5=[-15 -15];
line(X3,Y4);
line(X3,Y5);
X4=[10 10];
X5=[20 20];
Y6=[-15 -10];
line(X4,Y6);
line(X5,Y6);
text(2.5,-2.5,'p1');
text(12.5,-2.5,'p2');
text(5,-12.5,'p3');
text(12.5,-12.5,'p4');
Y7=[-10,0];
line(X4,Y7,'linestyle',':','color','linewidth',1,[0.5 0.6 1]);
line(X5,Y7,'linestyle',':','color',[0.5 0.6 1]);
end
运行结果:
第三题:
function disanti
fn=input('file name is:','s');
fin=fopen(fn,'r');
global str1
str=fgetl(fin);
[str1]=strread(str,'%s','delimiter',' ');
global chengji
chengji=zeros(10,5);
contor=1;
while feof(fin)==0
str=fgetl(fin);
[num math english chinese physics chemistry]=strread(str,'%d %d %d %d %d %d','delimiter',' ');
fenshu=[math english chinese physics chemistry];
if fenshu
chengji(contor,:)=fenshu;
end
contor=contor+1;
end
fclose(fin);
function f1
for i=1:10
sum=0;
for j=1:5
sum=chengji(i,j)+sum;
aver=sum/5;
end
fprintf('%d号学生的平均分是%d;\n',i,aver);
end
end
%每门课的平均分的函数
function f2
for i=1:5
sum=0;
for j=1:10
sum=sum+chengji(j,i);
aver=sum/10;
end
fprintf('%s的平均分是%d;\n',str1{i+1},aver);
end
end
%寻找各学科分数最高的学生
function f3
for i=1:5
fenshu=chengji(:,i);
for j=1:10
m=max(fenshu);
if m==fenshu(j)
fprintf('%s的最高分是%d及其最高分学生号是%d;\n',str1{i+1},fenshu(j),j);
end
end
end
end
%求平均分差
function f4
for i=1:5
sum1=0;
sum2=0;
for j=1:10
sum1=sum1+chengji(j,i)*chengji(j,i);
sum2=sum2+chengji(j,i)
end
aver1=sum1/10;
aver2=(sum2/10)^2;
thida=aver1-aver2;
fprintf('%s的成绩方差是%d;\n',str1{i+1},thida);
end
end
f1;
f2;
f3;
f4;
end