Matlab 版 (精华区)
发信人: zjliu (Robusting), 信区: Matlab
标 题: 数学工具FAQ[smth]--第二节:Matlab常见问题6
发信站: 哈工大紫丁香 (Tue Dec 17 15:02:09 2002) , 转信
===================================
36).如何在Matlab GUI中使用图形背景?
:#FangQ(Qianqian.Fang@dartmouth.edu), 2002/5/29.BigGreen/en_Matlab#
这是一个简单的例子:
[A,map]=imread('yourimg.gif');
imagesc(A)
colormap(map)
set(gca,'position',[0 0 1 1])
axis off
ax2=axes('position',[0.2,0.2,0.6,0.6]);
plot(rand(1,10),'parent',ax2);
set(ax2,'color','none')
===================================
37).大量数据点Matlab绘图为什么很慢?
:#FangQ(Qianqian.Fang@dartmouth.edu), 2002/6/22.BigGreen/en_Matlab#
1.首先看能否用已有函数对整个矩阵绘图,比
如mesh/plot3/trimesh等
2.如果必须一点一点/或者一条线一条线的添加,最好作如下
设置:
doublebuffer=on
erasemode=none
backingstore=off
renderer=opengl
以及参考MathWorks对于高速绘图的tips:
http://www.mathworks.com/support/tech-notes/v5/1200/1203.shtml,
===================================
38).Matlab中如何求解广义积分?即积分限到有无穷的或者有奇异点的积分(瑕积分)?
:#FangQ(Qianqian.Fang@dartmouth.edu), 2002/6/22. BigGreen/en_Matlab#
Matlab的quad/quad8只能作定积分,广义积分需要自己来写程序逼近,
流程大概如下:
1.设定收敛限epsi
2.把为inf/-inf或者歧义点的积分限设置为一个初始值,k=1
3.计算定积分Q(k)
4.然后朝着inf/-inf或者歧义点移动一个步长,然后计算定积分
Q(k+1)
5.判断(abs(Q(k+1)-Q(k))
Mathematica中可以使用NIntegrate[],对于无穷振荡的函数,可以使用Method-
>
QuasiMonteCarlo或者Oscillatory]
===================================
39).为什么我的Matlab程序这么慢?
:#FangQ(Qianqian.Fang@dartmouth.edu), 2002/6/22. BigGreen/en_Matlab#
我们工学院的收发室的门上贴着一张小纸条,写的是
"Our policy is always blaming the computer"
大多数的人在遇到问题的时候,总是责备计算机如何如何,别人如何
如何,其实,最最主要的因素是在于自己。
一个程序运行快慢,有很多因素决定,最主要的是算法,简炼而优美
的的数学公式胜过100遍的优化。能从算法上改进,才能比别人有根
本的优势。计算机也很重要,以前我总把自己用的PC看成万能的加
以崇拜,对UNIX嗤之以鼻,结果当自己真正开始算起来,才知道差
别有多大。搞大型数值计算的,没有好的工作站或者并行系统,就输
在了起跑线上了。然后是程序的优化,看看变量是否占用太多内存,
看看是否有功能重复的模块或者计算,经常的是用牺牲内存来换取速
度,具体取舍,具体需要来决定。用profile看看哪些语句占用时间最
多,然后把核心部分进行优化。
如果是使用Matlab,使用vectorization和矩阵整体操作的代码要比大量
的for循环快很多,eval/inline函数如果出现在核心循环,也会让速度下
降几时倍的。
===================================
40)..Matlab中如何作非线性回归?
:#FangQ(Qianqian.Fang@dartmouth.edu), 2002/6/22. BigGreen/en_Matlab#
请参考
http://www.mathworks.com/support/solutions/data/10652.shtml
matlab默认只提供了多项式拟合的函数polyfit,对于其他稍微简单
一点的拟合,如标准的指数、对数、高阶多项式拟合,都有解析公式,参见:
http://mathworld.wolfram.com/LeastSquaresFitting.html
对于更加复杂的非线性函数,建议使用Mathematica或者DataFit
Mathematica中提供了Fit[],以及
<< Statistics`NonlinearFit`
NonlinearFit[],NonlinearRegress[]
可以拟合任意复杂的表达式。
DataFit可以自定义拟合模型,适用于复杂系统的拟合。
===================================
41)..Matlab中为什么我对m文件、simulink模块,mat文件的修改不起作用呢?
:hyphone,2002/7/6,SMTH/MathTools#
检查Matlab路径中是否有与你的m文件、mdl文件或者mat文件同名的m文件、
mdl文件或者mat文件。Matlab执行搜索到的第一个文件。
===================================
42).Matlab中,函数里面怎样使用基本工作空间中的变量?
为什么inline函数不能使用外面的变量?
:hyphone,2002/7/6,SMTH/MathTools#
函数只能存取它自己的工作空间中的变量。要在函数之间,或者函数与基本
工作空间之间传递数值,尝试以下方法:
1、使用全局变量,用global定义全局变量
2、使用evalin:
evalin('base','v=1;'); %在基本工作空间中执行命令:v=1;
evalin('caller','v=1;');%在调用该函数的函数的工作空间中
执行命令:v=1;
3、参数传递
4、使用assignin:
assignin('base','v',v); %将v赋给基本工作空间中的变量v;
assignin('caller','v',v); %将v赋给调用者工作空间中的变量v;
inline函数里面只能出现函数和参数,要传递一个可变系数,需要用evalin。
如:fzero('f(evalin(''base'',''x1(i)''),x3)',求解区间)
===================================
43).怎样在Simulink中调用m文件?
:hyphone,2002/7/6,SMTH/MathTools#
函数m文件可以使用Function & Tables中的Fcn模块。如果有多个输入,
用Mux组合成一个向量,然后在Fcn模块的Expression填
MyFunction(u(1),u(2))"。如果有多个输出,用Demux分解成多个标量。
===================================
44).Matlab中怎样进行数制转换?
:hyphone,2002/7/6,SMTH/MathTools#
参见:hex2dec,oct2dec,bin2dec,dec2bin,dec2oct,dec2hex.
===================================
45).matlab中的*.p是什么文件?怎么用?
:#David Martin(dg.martin@home.deleteme.com), 2000/07/07,comp.soft-sys.matlab#
p文件是pre-parsed的缩写,即matlab在第一次运行某m文件时,matlab把该
文件先编译成一种matlab的pseudo-code,当你再次运行该m文件时,节省了
parse的时间。
p文件可以离开m文件单独运行
:#Mike Robbins (michael.robbins@us.cibc.com),2001/04/20,comp.soft-sys.matlab#
在matlab中用pcode('yourfilename')来生成p文件
--
※ 来源:.哈工大紫丁香 http://bbs.hit.edu.cn [FROM: 202.118.229.86]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.583毫秒