找回密码
 注册
Simdroid-非首页
查看: 2248|回复: 2

看别的论坛,抄下来一些有用的东西,供大家看!!

  [复制链接]
发表于 2003-1-14 21:11:52 | 显示全部楼层 |阅读模式 来自 北京
Q:如何将训练好的神经网络用于我的应用中?....
A:   sim 或者 gensim........  
  
answer:在m文件中使用sim,使用help network/sim察看使用方法。
  
如果供simulink模型中仿真用,请使用gensim生成网络模型,然后放入任何系统仿真模型中使用,并且还能够生成代码用于实时仿真。见下面的例子,使用gensim将神经网络变成Simulink模型。
net = newff([0 1],[5 1]);
gensim(net);
然后可以使用RTW生成S-function目标。
  
q:能不能在Simulink的环境下,从PC 机的串口收发数据
  我编写了一段C51单片机程序用于对电机进行控制,而一些控制参数我希望能够从 Simulink 通过 RS232 口发给 C51单片机,并通过 RS232 口得到 C51 的反馈信息。但XPC 的 RS232 模块好像不能用,是不是我对 XPC 的工作方式理解有误?请各位老师指导,谢谢!
  
步骤是这样的:
1.编写一个串口读写的m程序(可以参看帮助中的External Interfaces/API的部分,相当简单)
2.用S-fuctiion进行封装
3.加入到自己的simulink模型中去。
  
note:这样用m函数写的模块不能转化成C代码,要能转换
成C要用C-Sfunction写。
  
Q:再次请教崔老师,对于fopen语句如何读取多个文件,非常感谢,十万火急
  
k=menu('choose a file','E:\tu石混填1\1\bbb2-10-1.RTN','E:\tu石混填1\1\bbb2-10-1.RTN')
switch k
case 1,kname='E:\tu石混填1\1\bbb2-10-1.RTN'
case 2,kname='E:\tu石混填1\1\bbb2-10-2.RTN,'  
otherwise disp('Error!')
end  
kname
fid=fopen('kname','rt');
但发现fid值为-1,读取失败,但如果
fid=fopen(''E:\tu石混填1\1\bbb2-10-1则成功,薛老师如何用fopen语句实现读取多个文件,谢谢
  
A:假设打开3个文件分别是1、.txt 2、.txt 3、.txt
for i=1:20
fid=feval('fopen',[num2str(i),'.txt'],'rt')
end
close(fid)
  
Q:请教崔老师和其他各位老师对于fopen语句如何读取多个文件,非常感谢,十万火急
我编了一个菜单读入多个文件
k=menu('choose a file','E:\tu石混填1\1\bbb2-10-1.RTN','E:\tu石混填1\1\bbb2-10-1.RTN')
switch k
case 1,kname='E:\tu石混填1\1\bbb2-10-1.RTN'
case 2,kname='E:\tu石混填1\1\bbb2-10-2.RTN,'  
otherwise disp('Error!')
end  
kname
fid=fopen('kname','rt');
但发现fid值为-1,读取失败,但如果
fid=fopen(''E:\tu石混填1\1\bbb2-10-,薛老师如何用fopen语句实现读取多个文件,谢谢
  
A:fid=fopen('kname','rt')是否应为fid=fopen(kname,'rt')
  
因为kname已经是字符串变量了,就不需要加引号了。
  
Q:关于常微分方程组的求解
如何用数值解法求解如下方程组:
Dx1=-0.8*x1+0.3*x1*x2,Dx2=1.2*x1-0.6*x1*x2
初始解:x1(0)=2,x2(0)=1.
各位大虾,帮帮忙吧!!!
先谢谢了!
  
A;首先生成一个包含下列代码的文件myfun.m:
function dx = myfun(t,x)
dx=[-0.8*x(1)+0.3*x(1)*x(2);
1.2*x(1)-0.6*x(1)*x(2)];
  
然后在MATLAB命令窗口输入命令(假定计算从0秒到50秒,[2 1]为初值):
[t,x]=ode45(@myfun,[0 50],[2 1]);
就可以了。
  
Q:小波工具箱中waverec函数的问题
我有个问题想要请教各位,我对其中的多尺度一维小波重构函数waverec一直不太理解,用这个函数重构的小波系数,不管是哪个尺度上的低频或高频系数,得到的都是和采样信号相同的个数,比如采样信号是2000个,进行3尺度分解,则重构的第3尺度上的低频系数也是2000个,我试过了,不论哪个尺度的系数重构,都和原始采样信号一样的长度。而我用appcoef提取的第3尺度上的低频系数却是250个(因为进行了2抽取),为什么重构的系数却体现不出二抽取?而mallat算法重构系数是逐级2插补,我想知道重构的系数与分解的系数区别到底在什么地方?重构后的系数与分解的系数不相等,那还是小波变换系数吗?
A:小波重构时可以通过两种途径:一种就是书上常见的采用小波系数插值后滤波实现。然后在一级一级的插值,滤波最后实现重构。而另外一种这是在不同的尺度上直接恢复成和原始信号一样的长度,然后直接相加就行了(这个步骤你可以看看matlab pdf文档中的Wavelets: A New Tool for Signal Analysis部分)
  
Q:对一个64*64的矩阵中值滤波
对一个64*64的矩阵进行3*3的中值滤波
A:图象处理工具箱中有直接可以使用的函数:medfilt2
  
Q:如何将n*m矩阵转换成数组
如何将一个n*m的矩阵按照行数转换为数组,如
A=[1 2;3 4]转换成B=[1 2 3 4]?
A:A=A'
B=[A(:)]'
  
Q:请问nargin,nargout,varargout这些函数的作用??
A:这些内容是属于函数输入输出的参数类型,可以算是宏,其含义为输入输出参数的个数和可变输入参数数组,用于灵活的定制输入输出参数个数;nargin,nargout是对m文件的输入输出的变量个数进行检查,而varnargout是m文件的输出行参。
  
Q:请教如何将mdl文件转化为C mex 的S-fuction文件
A:使用RTW
  
Q:请问编程时,什么时候用eval函数?调用的字符串什么情况下加单(双)引号?
什么时候用eval函数?什么时候直接执行字符串命令?调用的字符串什么情况下加单(双)引号?
A:当把函数名或变量名作为字符串方式处理时有用。由于单引号已经作为字符串的分界符,当在字符串使用单引号时,需要再加一个单引号以示区分。双引号与一般字符一样对待。
  
Q:神经网络训练完毕之后,如何讲权值、域值保存?
A:应用命令gensim(net)就可以生成,保存下来以备下次使用。权重和域值都在里面,可以点击开并修改。
  
Q:请教能否将.m文件转变为.exe可执行文件?
A:使用mcc就可以,例如mcc -P *.m
具体的使用参阅Matlab的帮助文档
  
Q:函数load的问题
我用uigetfile得到了一个路径和文件名,文件是一个.mat文件,
然后我想用load 文件名的形式,把它装入工作空间,但是matlab显然不支持这种操作。load 好象一定得是具体的文件名,而不是变量。
请问,我怎么样编写程序可以避免或者解决这个问题?
我想可能跟符号变量有关系,但是试了以后,发现我还是解决不了。
A:load data.mat;

load('data.mat');
效果是一样的。
或者使用eval也可以,比如
eval('load data.mat');
  
所以,如果你的文件名已经存储在字符串filename中,
那么可以使用
load(filename)
或者
eval(['load ' filename]);
打开文件。
  
Q:两个关于界面设计的问题
我还有两个问题.我花了一天都没能解决.
  
1.我在主窗口A中用[data,a]=fscnaf(fid,'%s',[m n ])打开了一个文件,但是我想用另一个定义好的窗口B(用matlab6.0l里的guide定义)里的listbox或者edit显示出来.但是我发现我怎么也没有办法把data传递到listbox或者edit,请问我应该怎么样才能实现上述功能?
  
2.我用纯粹的语句行产生窗口B,用这个办法打开文本文件后,它显示的东西的格式跟实际的格式不一致,没有空格和回车,这是怎么回事?
  
A:1.你是否使用了global来定义全局变量,以用于传递,在matlab中,设置uicontrol(控件)的属性,都是用到set命令,不止你是否用到,在这里应该是设置edit的String属性吧!
2.在A中打开B,只要在A对应的事件下,写B 就可以了!(好像没看懂你的第二个问题)
% get handle of listbox or edit of figure B ,
% and :
set(ListboxHandle, 'String', Data ) ;
  
Q:simulink中的模块参数seed是什么意思???许多模块中都要求输入seed值,有何含义?应如何确定该值?
A:可以输入任意整数。由于实际上的随机数生成大多为伪随机序列,如果输入同样的seed将产生相同的随机序列,需要输入不同的seed以产生不同的随机序列。
Q:谢谢指点!
我用指令的方式写如下语句:
rand('seed',12345);
a=rand(1,10);
b=rand(1,10);
发现a,b仍然不同,可重复的噪声的含义是什么?上述产生噪声的方法是否正确?如否,该如何利用seed通过指令来产生可重复的噪声。
A:MATLAB中,随机数是递进生成的。
也就是说:
rand('seed',12345);
a=rand(1,10);
b=rand(1,10);

rand('seed',12345);
tmp=rand(1,20);
a=tmp(1:10);
b=tmp(11:20);
效果是一样的。
  
如果想要生成重复的随机序列,那么就重新设定种子,比如
rand('seed',12345);
a=rand(1,10);
rand('seed',12345);
b=rand(1,10);
  
Q:能否实时采集外界信号
simulink能够实时采集wave device的信号,但是不知道能不能实时采集其他设备(比如A/D采样板)的信号,还是需要写上一段程序将采样板的信号读入。如果能,该怎么处理,实时性如何?希望各位大侠指点。
A:Simulink提供的S-function功能应当能够满足你与外界硬件接口的需要。关键是写出与硬件相关的驱动,由于S-function 是通过C编写的,可以调用操作系统以及硬件的相关编程资源,技术上应当不成问题。
关于实时性无法保证,因为Simulink环境以及相应的PC都不是一个实时环境。确保实时性,必须采用具备实时内核的实时操作系统,或实时仿真系统。MathWorks提供了两个应用于实时的产品,一个是xpc,另外一个是Real-Time Window Target. 这两个产品都带有相当部分的硬件驱动部分,支持一些主要的硬件借口卡。如果你使用的板卡不在支持之列的话,你依旧需要自己去编写相应的驱动部分。
  
Q:我用simulink的power system blockset仿真一个小系统,需要产生一个频率和相角都是变量的正弦信号。不知那位高手能指点在下一下,我所需要的频率和相角都是由另外的模块输入。频率是由Power System Blockset的Machines Measurement Delux 输出的。相角也是测量到的,由Fourier模块输出。我想利用这两个输出量做成一个正弦电压源,不知道能不能做?
谢谢您的帮助。
A:如果你需要做一个交流电压源的话,有一个办法。你把Simulink/PowerSystem中的AC Voltage Source用Look Under Mask方式打开,就会发现驱动源是一个正弦信号发生器。用一个可调频率相位的C-Mex S-function替换掉这一部分就可以了
  
Q: Vc中如何调用Matlab的绘图函数?
A:通常MATLAB不赞成直接在外部环境中调用MATLAB API函数,特别是绘图函数。如果你确实想这么做,不妨读一下libsgl.h 这个头文件,图形API都在这里面。函数调用之前,要初始化一下图形引擎。
  
Q:请问如何产生动态时间间隔的脉冲?在simulink中,pulse generator的参数periods一旦确定,那么
脉冲的时间间隔就固定下来了。怎么样才能动态的修改periods参数呢?
或者有没有其他的模块能实现动态时间间隔的脉冲?请高手指点!
A:先是采用三角函数块生成变频率的正弦信号,然后再用逻辑运算符(信号大于零时输出1,小于零时输出0)生成变间隔的脉冲。
这只是作为一个提示。
  
Q:曲面拟和的问题
matlab里可用一个二维矩阵表示一个曲面上的点,如z=peaks 得到的z矩阵
那么,如果我只知道z中的少数点的值,用什么函数来得到类似z=peaks的矩阵
谢谢了
A:参考MATLAB Graphics手册中3-D Visualization中的Surface Plots of Nonuniformly Sampled Data中所做的:
Z = griddata(x,y,z,X,Y,'cubic');
查查griddata的用法。
  
Q:我要用SIMULINK做一个模块,需输入16进制数怎末办,我输入的参数和输出的参数都是16进制数怎末办?
A:在Simulink/Signals&Systems下面有一个“Data Type Conversion”模块可以用来转换成INT16
  
Q:是不是可以用S-函数将m文件与SIMULINK连接?是不是可以用S-函数将m文件与SIMULINK连接?SIMULINK可以转换成m文件吗?
A:利用m文件的S-function就可以把m函数与Simulink相连,Simulink原则上不能转化成m形式。但视你的应用可能有一些变通的方式。
  
Q:什么是RTW和MATLAB COMPILE编译模型您能解释一下:RTW和COMPILE编译模型吗?
也就是他们的概念?我怎样操作?需要什么MATLAB的附件?
尽量详细一点?
A:RTW和Compiler都是MATLAB的模块,也就是说如果要使用这两个功能,就必须安装这两个模块。
RTW的功能是把Simulink模型翻译成针对不同目标机的C语言,从而可以进行某些实时应用;
Compiler是把m函数翻译成C语言或者可执行文件,主要是做一些非实时的应用。比如充分利用MATLAB算法开发的优势和强大的绘图功能解决在一个大Project中实现核心算法
  
Q:matlab 如何读mdb数据库
A:作用Database Toobox工具箱,MATLAB可以通过ODBC/JDBC与Access,Informix,SQL等关系数据库进行实时双向通信,Database Tbx更提供GUI工具方便用户不用自行编写SQL语言来使用,不过Database Tbx的性能有待下一版本R13中改进,如支持中文的性能等。 除了MathWorks的商业软件Database Tbx外,还有一些功能简明的FREE版本,如国内的DBTOOL,(http://www.obase.163.net/matlab/dbtool.htm) 国外的QUVERYTOOL等。
A:需要有Database toolbox.在 Using the Database Toolbox中有详细说明。使用时有两种方式,一个是交互式的使用,通过Visual Query Builder,文档中对如何操作有详细说明。另外一个是通过调用函数的方式,不直观,但适合用于编程。
  
Q;如何从仿真模块生成S函数
A:生成S-function Target是十分简单的,特别是在MATLAB 6中,S-function Target 还支持变步长算法。 如果系统中安装并配置了C(比如MSVC)编译器,然后打开System Target File浏览器,选择rtwsfcn.tlc,就可以了。 我试了一下vdp这个例子,不需任何改动,只需要更换System Target File就可以编译成功。然后自动弹出一个新的模型窗口,里面放着一个S-function 块。这个块是能够工作的。
  
Q:两个figure之间如何进行数据传输,现有一个figure中有一平面图形与菜单指向另一个figure,想把第一个figure中的平面图形x与y的值传到另一个figure中的list中,如何实现?
A:要做到这一点,首先不要使用高级的绘图命令如plot画线,应当使用低级命令画线,以便得到线的句柄。如果能够得到线的句柄,则你的问题就解决了。 例如,画一个5Hz的正弦曲线: cla; %删除此语句则重复在当前坐标系上添加新曲线 %这里,每次画线时都清除原来的曲线 t=0:0.01:10; y=sin(2*pi*5*t); h=line(t,y); 如果你能够将句柄存到一个全局变量,或者通过参数传递给另外一个程序,那么,就可以通过 t=get(h,'XData'); y=get(h,'YData'); 得到曲线的值了。 或者,你觉得使用全局变量或函数参数传递麻烦,你可以为曲线生成一个标签,如 line(t,y,'Tag','MyPlOtDaTaXy'); 标签尽量取的别致一些,省得与打开的其他图形中的标签重名。这样,在另外一个程序中,就可以通过 h = findobj('Tag','MyPlOtDaTaXy'); t=get(h,'XData'); y=get(h,'YData'); 得到曲线的值了。

评分

1

查看全部评分

 楼主| 发表于 2003-1-14 21:14:49 | 显示全部楼层 来自 北京

回复: 看别的论坛,抄下来一些有用的东西,供大家看!!

Simdroid开发平台
希望大家看文章或论坛时,有好的内容都收集下来,放在仿真论坛里,时刻记着,这里有很多的朋友需要您提供的帮助!!!
本文不要回复了,以上内容如果对您有帮助,我就欣慰了!!
发表于 2008-6-17 15:48:23 | 显示全部楼层 来自 北京工业大学
好文章,做个记号

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-23 11:50 , Processed in 0.044282 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表