数学建模社区-数学中国

标题: [原创] [原创]自己总结收集的Matlab疑问和解答(每日更新) [打印本页]

作者: helen    时间: 2005-11-3 00:04
标题: [原创] [原创]自己总结收集的Matlab疑问和解答(每日更新)
首先,本人学习Matlab有一段时间,对与Matlab编程还算比较熟悉!
这些都是我个人在学习过程中遇到的一些疑问,最后自己寻找到了解决的方法!
期待和大家一起分享!!!我会定期地发一些这样的问答!!!!!!
(自己夸一下,其中的一些解决方法还是瞒有意思和创新的))
对与在Matlab学习中所遇到的疑问都可以在这里发布,大家一起讨论!!!!

问: Matlab仿真中怎样编辑Scope中的图象???
答: 实现的方法有以下的几种:
1)PrintScreen,然后粘贴到Windows位图编辑器,选择图像点击右键,选择“反色”即可;
2)在Scope中,它的参数设置的第二页,有一个Save Data to Workplace,将它选中,然后在下面的方框
中指定变量名,然后用plot命令画出;
3)直接在模型上再加一个,to Workplace模块,也用plot画出;
4) 等scope显示出来图像以后,在matlab上运行
set(0,'ShowHiddenHandles','On')
set(gcf,'menubar','figure')
这时候你会发现scope的工具栏的上面多了一行,点击insert-axes,鼠标会变成十字形状,然后再图像的任意一处双击左键出现一个对话框PropertyEditor,选中style在窗口的右便会出现color,这时你就可以任意修改背景颜色了。
[此贴子已经被作者于2005-11-3 0:10:50编辑过]

作者: helen    时间: 2005-11-3 00:05
问: 怎样进行S-function的编程和使用???
答: S-function也就是System-function的缩写。说得简单,S-function就是用MATLAB所提供的模型不能完全满足用户,而提供给用户自己编写程序来满足自己要求模型的接口。要了解 S-function,必须了解以下知识:
(1)direct feedthrough
(2)dynamically sized inputs
(3)setting sample times and offsets
一.Direct feedthrough
direct feedthrough意思是说系统的输出或可变采样时间是否受到输入的控制。大家清楚有的系统是受到输入控制如:
y=k*u (u是输入,k是放大因子,y是输出)
而有的系统输出是不受到输入影响,如:
输出:y=x
dx=u ,x表示状态
二.Dynamically sized inputs
主要是给出:输入连续状态数目(size.NumContStates),离散状态数目(size.NumDiscStates)
,输出数目(size.NumOutputs),输入数目(size.NumInputs),Direct Feedthrough(size.Dir Feedthrough)。
三.Setting sample times and offsets
Setting smaple times and offsets主要设置采样时间

作者: helen    时间: 2005-11-3 00:06
问: 在同一个M文件中,怎样实现参数的传递???
答: 在同一个M文件中传递参数的几种方式:
1): assignin(‘base’,’para’,para);
在后面的程序中,就可以直接调用了:
Para=evalin(‘base’,’para’) ;
2) :在当前的对象中;set(h0bject,’userdata’,[]) ;
Set(h0bject,’userdata’,para) ;
在后面的程序中就可以直接调用了:
Para=get(h0bject,’userdata’) ;
这里h0bject为某一对象的句柄
3);直接使用句柄,该方法最为简便而且安全性最高;
Handles.xxx=?????;
Guidata(h0bject,handles);
在后面的程序中,就可以直接调用
Handles.xxx=????

作者: helen    时间: 2005-11-3 00:07
问: 怎么把Matlab中数组元素写入到文本文档中???

答: 下面是几个常用的函数:
(1)matGetNextMatrix:读取MAT文件中的下一个矩阵,调用格式如下:
integer*4 function matGetNextMatrix(mfp)
integer*4 mfp
说明:函数读取mfp所指向的MAT文件的下一个矩阵的数据并返回一个mxArray类型的指针。
(2)matGetDir:获得MAT文件中的所有矩阵目录,调用格式如下:
integer*4 function matGetDir(mfp,num)
integer*4 mfp,num
说明:函数从mfp指向的MAT文件中获取所有矩阵的目录。如果执行成功,将返回一个字符串指针数组,数组每个元素均为字符串指针,指向的字符串表示MAT文件中矩阵的目录。若函数执行失败,num返回为-1,并连接一个空指针。如果num为0,则表示MAT文件没有矩阵。
(3)mexErrMsgTxt:用于输出错误信息,并返回到MATLAB命令提示符下,调用格式如下:
subroutine mexErrMsgTxt(error_smg)
character*(*)error_msg
说明:error_smg为字符串常量,当程序执行后,在MATLAB窗口中显示错误信息error_smg,并终止程序运行。
(4)mxGetM、mxGetN:分别用来获取矩阵的行数和列数,调用格式相同,格式如下:
integer*4 function mxGetN(pm)
integer*4 pm
说明:pm为形式参数,指定一个矩阵,返回整数。
(5)mxIsNumeric:判断矩阵是否为数值类型矩阵,调用格式如下:
integer*4 function mxIsNumeric(pm)
integer*4 pm
(6)mxCreateFull:创建一个二维的未赋值的满矩阵,调用格式如下:
integer*4 function mxCreateFull(m,n,ComplexFlag)
integer*4 m,n,ComplexFlag
说明:m,n分别为创建矩阵的行数和列数。ComplexFlag为0表示创建实数类型矩阵,ComplexFlag为1表示创建复数类型矩阵。
(7)mxGetPr、mxGetPi:获得矩阵的实数或虚数部分,调用格式相同,如下:
integer*4 function mxGetPr(pm)
integer*4 pm
说明:如果函数执行成功则获得一个指向pm第一个实数部分的指针。
(8)mxCopyPtrToReal8、mxCopyReal8ToPtr:将某个矩阵的实数或虚数部分的数据复制到一个实数组中,后一个正好相反,调用格式如下:
subroutine mxCopyPtrToReal8(px,y,n)
integer*4 px,n
real*8 y(n)
subroutine mxCopyReal8ToPtr(y,px,n)
integer*4 px,n
real*8 y(n)
说明:px为指向某个矩阵的实数或虚数部分的指针,n为需要复制单元的个数,y为实数类型的数组。
作者: helen    时间: 2005-11-3 00:08

今天暂时就发这么多!以后会定期来更新!!

期待有更多好地问题和大家分享!


作者: helen    时间: 2005-11-3 00:20
问: 在Matlab/Work文件夹中存在以后缀为.asv结尾的文件,起什么作用?

答: 没有任何作用,只是像Word一样备分文件,可以不保存这样的文件。操作如下:
在Matlab工作主窗口中,
file->preferences->editor/debugger-->auto save,uncheck "autosave on" checkbox

作者: helen    时间: 2005-11-3 00:21
前一阵子同学装上的Matlab打开后的字都是模糊的!后来在水木清华的BBS中找到了解决的方法,帮助同学彻底解决了问题! 为什么会出现这样的情况呢???

引起matlab6.5字迹不清的原因有:
1、升级显卡。
2、安装的时候选择了matlab web server

解决的方法如下:

1、在控制面板-管理工具-服务 中取消 matlab server 的服务

2、安装的时候不选择 matlab web server, 其实matlab6.5干扰opengl是主要原因!只有采取上述方法,才可以做出三维图形,否则作不出!! 或者在画图的时候用opengl neverselect.

3. matlab6.5安装好,运行matlab后,会提示<matlabboot>\toolbox\rtw\targets\osek\osek的info.xml的<name>should end with <\name>,以及另外一个地方,也是这个工具箱下的,好像是demo中的那个info.xml文件中的<name>与<\name>没有匹配,也可能导致 command窗口中出现一大堆的警告什么的解决办法就是根据提示,用记事本打开那个info.xml文件,将<name>与<\name>匹配起来,保存这个info.xml文件,以后打开就不会再出现警告信息了。

4. 另外,好像没有选择恰当在字体也可能导致显示模糊 解决办法是在matalb是运行主界面的file菜单下的reference菜单项,在弹出的 窗口中进行适当的设置即可.

作者: helen    时间: 2005-11-3 12:39
问: 在Matlab图形中怎样输入特殊符号???

答: 上标用 ^(指数) 下标用 _(下划线)

调用方式为:
^{任意字符}, _{任意字符}, 注意{}的使用!
希腊字母等特殊字符用 \加拼音 如:

α \alpha, β \beta , γ \gamma θ \theta Θ \Theta
Г \Gamma δ \delta Δ \Delta ξ \xi Ξ \Xi
η \elta ε \epsilong ζ \zeta μ \miu υ \nu τ \tau
λ \lamda Λ \Lamda π \pi Π \Pi σ \sigma Σ \Sigma
φ \phi Φ \Phi ψ \psi Ψ \Psi χ \chi ω \ommiga Ω \Ommiga
< \leq > \geq 不等于 \neq << \ll >> \gg
正负 \pm 左箭头 \leftarrow 右箭头 \rightarrow 上箭头 \uparrow

体会以下两例:
figure, title('\zeta^{-t}sint');
figure, title('x~{\chi}_{\alpha}^{2}(3)');

作者: helen    时间: 2005-11-3 12:41
问: matlab里有关于集合运算和二进制数的运算的函数吗?

答: 进行集合运算的函数有如下的一些:
intersect:集合交集
ismember :是否集合中元素
setdiff :集合差集
setxor :集合异或(不在交集中的元素)
union :两个集合的并
unique :返回向量作为一个集合所有元素(去掉相同元素)

对于二进制数的处理运算函数有如下:

dec2bin(x) 是把十进制整数x变换为二进制
bin2dec(y) 是把二进制数y变换为十进制数
base2dec('x',a) 是把a进制数x变化为十进制数
dec2base(y,a) 是把十进制数y变化为a进制数

移位,循环,与,反等操作函数:
BITAND——对二进制数进行与操作;
BITOR——对二进制数进行或操作;
BITXOR——对二进制数进行异或操作;
BITSHIFT——对二进制数进行移位操作。

详细使用方法和其他函数可以参看help!!!!!

作者: bluefirer25    时间: 2005-11-8 02:44

很有用的,谢了,以后有什么matlab的问题,肯定来请教你!

楼主真是好人啊!


作者: CQUWTZ    时间: 2005-11-14 19:21

投资的风险和收益

市场上有10种股票 I=12,。。。,10)供投资者选择,某公司有100万的一笔资金可作为一个时期的投资,公司财务分析人员对这10种资产进行了评估,估计出在这一时期内购买 的平均收益率为 。并预测出购买 的风险损失率为 。考虑到投资越分散,总的风险越小,公司确定,当用这笔资金购买若干资产时,用总体的风险损失率来衡量。当然,不投资的部分可以用来银行存款,风险为0,收益假定为5%

在购买股票时需要支付手续费,费率为

要求:对问题进行分析,列出多目标规划的数学模型,然后:

(1) 利用线性加权和法进行求解,并计算在不同的权值下的收益和风险,给出多目标问题的全部有效解的曲线图。(同时给出关键点处的坐标)

(2) 研究在理想点法和分层规划下的意义下的解,讨论这种方法下对应的解和方法(1)下对于的全系数的值。

(3) 研究在给定权系数下的投资方案是否唯一,举例进行说明。

请问该怎么做!

谢谢!


作者: zheng_xh826    时间: 2005-11-20 11:23
楼主真牛![em23]
作者: arong1025    时间: 2006-4-22 11:23

非常好,谢谢总结


作者: babyaisa    时间: 2006-8-8 05:46
精辟
作者: jinfly4997    时间: 2006-8-31 22:03

问:求助:最近编程序时遇到for循环次数太多(比如for i=1:10000000 语句;end此类的问题),由于循环量太大,而无法完成程序的运行,而且此循环语句并不能简单的改写成矩阵运算的形式加快其运行速度,请教斑竹是否有其他办法能够解决这个问题,以提高速度?


作者: madio    时间: 2006-8-31 22:14
QUOTE:
以下是引用jinfly4997在2006-8-31 22:03:32的发言:

问:求助:最近编程序时遇到for循环次数太多(比如for i=1:10000000 语句;end此类的问题),由于循环量太大,而无法完成程序的运行,而且此循环语句并不能简单的改写成矩阵运算的形式加快其运行速度,请教斑竹是否有其他办法能够解决这个问题,以提高速度?

我想对于这样的情况,最好是要重新考虑问题,看看是不是有可以减少循环的算法,特别是考虑是否有并行算法或者能够在某些情况下产生循环跳出,如果不能解决可以考虑是不是可以将循环拆成几个阶段进行,分别将循环分阶段插在其他语句中,最后可能就是要看能不能将循环结构改成分支嵌套循环的结构,这样可以使得循环次数大量减少!


作者: echo5183    时间: 2006-11-29 11:27
是啊,受教了!
作者: liwenhui    时间: 2007-11-18 22:21
很好啊
作者: hill_how    时间: 2007-12-28 17:54
支持!!!
作者: ddaizhuren    时间: 2008-2-15 07:57
[em01]
作者: gdmojifei    时间: 2009-4-3 19:44
先顶后看,谢谢分享
作者: gdmojifei    时间: 2009-4-3 19:45
我晕倒,竟然没有给我加分啊
作者: w000002    时间: 2009-7-14 15:16
都是很好的东西,用空向你讨教下
作者: tandemzd2008    时间: 2009-8-5 20:45
谢谢楼主   非常感谢
作者: zyp0807523220    时间: 2010-6-26 00:07
好·······································
作者: 斌11斌    时间: 2013-4-26 23:22
很好!thx  LZ加油哈
作者: 斌11斌    时间: 2013-4-26 23:24
好!很不错!
作者: w841208450k    时间: 2013-4-28 13:09
function y=fun2(x)
%fun判断水仙花数
y=fun_1(x);
if 99<x<1000
     if y==1
        disp('yes');
     else
         disp('no');
     end
else
    return;
end

    function fun_1(x)
   
    a=fix(x/100);
    b=fix(rem(x,100)/10);
    c=rem(x,10);
       if x==(a^3+b^3+c^3)
          y=1;
       else y=0;
       end
    end
end
哪里出错了呢???
作者: asdhjs    时间: 2016-1-26 21:49
赞赞赞赞赞赞

作者: asdhjs    时间: 2016-1-26 23:21
赞赞赞赞赞赞





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5