麻烦问一下,这个式子可以用matlab模拟布朗运动出来吗?

查看: 9467|回复: 9
用matlab画任意节点数的节点连接图
该用户从未签到
最近在用gui做一个算法的仿真界面,需要输入任务图的信息,然后输出仿真结果。
任务图由节点和有向边组成,用户在下拉菜单设置好每个节点之间的关系后同时产生一个图形让用户从直观上检查任务节点的连接关系是否正确,如附件中的图(下面有个百度链接可以直接点开)。
问题是,这样的图,我应该怎么用画出来?如果已知节点数和它们的连接关系(可以简单的用一个矩阵表示)的话。
上网看了一些用圆来画节点的做法,觉得不够直观,而且,点数多了之后,连接关系变得非常混乱。
高人请指教,在下万分感谢!!
签到天数: 12 天[LV.3]偶尔看看II
呵呵 这个有一定的难度 因为Matlab不适合自动绘图&&我知道你需要绘制的就是图论中的有向图罢了
但是假如你给出节点的坐标那倒不是很难办(但是箭头有些困难),否则要Matlab自动任意给出给点的坐标,最后出来的图形会很抽象,简直不可接受
不过以上担心都是多余的,因为Matlab为我们直接提供了
BGobj = biograph(CMatrix, NodeIDs),比如CMatrix=[0 3 20 0 0;1 0 0 6 8;1 0 0 0 0;0 0 0 0 1;0.5 0 2 0 0];
NodeIDs={'N1','N2','N3','N4','N5'};%节点标签,也就是h.Nodes(i).ID属性值
ShowWeightsValue='on';%'off';%控制是否显示权值
BGobj = biograph(CMatrix, NodeIDs, 'ShowWeights', ShowWeightsValue);
h=view(BGobj);
set(h.Nodes(1:5),'shape','circle');复制代码这个函数就可以达到你的要求,绘制出有向图,其中CMatrix就是邻接矩阵,具体可以看Matlab的帮助文档
(12.42 KB, 下载次数: 52)
16:23 上传
签到天数: 6 天[LV.2]偶尔看看I
学习了一下,需要一个AT & T的什么工具箱许可。
该用户从未签到
回复 2# dynamic 的帖子
恩,不错,学习一下!·
该用户从未签到
看看,能下么?????????
该用户从未签到
如果想画无相图又该怎么办呢?另外,matlab7.1为啥不能运行这个程序
网站官方,,,保证您有偿编程安全。
签到天数: 15 天[LV.4]偶尔看看III
求问一下,比如有N1到N1 自身的连接,类似这样的节点自身之间有连接,该如何画出有向图呢?&&
签到天数: 5 天[LV.2]偶尔看看I
来学习了,谢谢
网站官方,,,保证您有偿编程安全。
该用户从未签到
看不懂,得好好学习一下
该用户从未签到
嗯,学习学习
网站官方,,,保证您有偿编程安全。
Powered by麻烦问一下哪位朋友有matlab教程的PPT或者PDF等等 ,给我发一份吧(),谢了!!_百度知道
麻烦问一下哪位朋友有matlab教程的PPT或者PDF等等 ,给我发一份吧(),谢了!!
有matlab7 教程的PPT或者PDF等等,最好
谢了!(没有财富值了,不好意思)
我有更好的答案
留个联系方式,上班以后我给你 不过是E问的。
就是上面写的
邮箱地址:
其他类似问题
为您推荐:
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁怎么用matlab把传递函数转成差分方程_百度知道
怎么用matlab把传递函数转成差分方程
以下是PID控制的部分代码(matlab的m文件):ts=0.001;采样时间=0.001ssys=tf(400,[1,50,0]);建立被控对象传递函数dsys=c2d(sys,ts,'z');把传递函数离散化(问题1)[num,den]=tfdata(dsys,'v');离散化后提取分子、分母rin=1.0;输入为阶跃信号u_1=0.0; u_2=0.0; 什么东西的初始状态(问题2)y_1=0.0; y_2=0.0; 是不是输出的初始状态error_1=0;初始误差x=[0 0 0]';PID的3个参数Kp Ki Kd组成的数组p=100;仿真时间100msfor k=1:1:p
u(k)=kpidi(1)*x(1)+kpidi(2)*x(2)+kpidi(3)*x(3)
if u(k)&=10
if u(k)&=-10
yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;(问题3)
error(k)=r(k)-yout(k);
%返回pid参数
u_2=u_1;u_1=u(k);
y_2=y_1;y_1=yout(k);
x(1)=error(k);
x(2)=(error(k)-error_1)/
x(3)=x(3)+error(k)*
error_2=error_1;
error_1=error(k);end问题1:把传递函数离散化[SYSD,G]=C2D(SYSC,Ts,METHOD)这里面的method有好多种,而且用的method不一样得出的结果也不一样,这些参数究竟有什么区别(不要把matlab的help给我翻译一遍,帮忙解释详细点)问题2:这些是不是PID控制器输出的初始状态,“rin--①--PID控制器--②--被控对象--③---”是不是就是上面②的地方的信号值?问题3(关键问题):这个式子是怎么得出来的?从传递函数得出差分方程是个什么步骤,要珐唬粹舅诔矫达蝎惮莽具体点的或者给本参考书。又如:在《先进PID控制MATLAB仿真(第二版)》P146有 被控对象G(s)=133/(s^2+25s),采样时间为1ms,采用z变换进行离散化,经过z变换后的离散化对象为yout(k)=-den(2)yout(k-1)—den(3)yout(k-2)十num(2)u(k-1)+num(3)u(k-2)(实在是搞不明白怎么来的)问题4:不是线性的对象可不可以写成差分方程的形式,比如G(s)=20e^(-0.02s)/(1.6s^2+4.4s+1)带了个纯延迟的该怎么弄。或者换成个3阶对象怎么写成差分方程补充:找有类似工作要做的朋友加好友讨论讨论。本人正在做毕业设计《遗传算法用于模糊控制器的优化》,现在可以对普通的二阶被控对象进行隶属度函数和规则的优化,就是由于第三第四个问题卡住了,继续不下去了。全是用代码编写的,没有用到simulink,所以代码很长修改也麻烦,还不知道在代码里面怎么弄带纯延迟或非线性的对象。有谁知道如何把simulink的数据调入m文件或者把m文件的数据传入simulink,欢迎来讨论.知道多少就回答多少,只要有帮助的,至少给20分。
加好友可以在百度里面加,或者QQ注明加好友原因。
提问者采纳
1、c2d:假设在输入端有一个零阶保持器,把连续时间的状态空间模型转到离散时间状态空间模型。[SYSD,G]=C2D(SYSC,Ts,METHOD)里面的method包括:zoh 零阶保持, 假设控制输入在采样周期内为常值,为默认值。foh 一阶保持器,假设控制输入在采样周期内为线性。 tustin 采用双线性逼近。matched 采用SISO系统的零极点匹配法2、只有U_1是2处的初始状态值,而U_2是用来传递U(k)的,所以U_2是U_1在下一个ts时间内的值3、从差分方程获取传递函数:y(k)+a1(k-1)+……+an(k-n)=b0x(k)+b1x(k-1)+……+bmx(k-m)在零初始条件下对,对方程两边进行Z变换,得到该系统的脉冲传递函数G(Z)=Y(Z)/X(X)=[b0z^m+b1z^(m-1)+……+bm]/[z^n+a1z^(n-1)+……an]
其中m《n或等效形式G(Z)=Y(Z)/X(X)=[b0+b1z^(-1)+……+bmz^(-m)]/[1+a1z^(-1)+……anz^(-n)]
其中m《n从脉冲传递函数到差分方程G(Z)=Y(Z)/X(X)=[b0+b1z^(-1)+……+bmz^(-m)]/[1+a1z^(-1)+……anz^(-n)]
交叉相乘得Y珐唬粹舅诔矫达蝎惮莽(Z)[1+a1z^(-1)+……anz^(-n)]=X(X)[b0+b1z^(-1)+……+bmz^(-m)]对X(z)和Y(z)进行z逆变换的到差分方程y(k)+a1y(k-1)+……+any(k-n)=b0x(k)+b1x(k-1)+……+bmx(k-m)4、纯延迟系统G(s)=20e^(-0.02s)/(1.6s^2+4.4s+1)num=[20];den=[1.6 4.4 1];sys=tf(num,den,'inputdelay',0.02)
其他类似问题
为您推荐:
您可能关注的推广
传递函数的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁问一下这个matlab语句的意思
问一下这个matlab语句的意思
randn('seed',14);这个matlab语句是放在程序最前面定义某些东西紧跟之后的语句为w=sqrt(Q)*randn(1,Bushu);其中Q和Bushu都已知问一下这是什么意思?
randn Normally distributed pseudorandom numbers Syntaxr = randn(n)randn(m,n)randn([m,n])randn(m,n,p,...)randn([m,n,p,...])randn(size(A))r = randn(..., 'double')r = randn(..., 'single')Descriptionr = randn(n) returns an n-by-n matrix containing pseudorandom values drawn from the standard normal distribution. randn(m,n) or randn([m,n]) returns an m-by-n matrix. randn(m,n,p,...) or randn([m,n,p,...]) returns an m-by-n-by-p-by-... array. randn returns a scalar. randn(size(A)) returns an array the same size as A. r = randn(..., 'double') or r = randn(..., 'single') returns an array of normal values of the specified classrandn-产生一个正态分布的随机数(整数)组它的参数应当是数组维数以及数组元素的类型(double or single)你所写的语句中'seed'的意义不清楚w=sqrt(Q)*randn(1,Bushu);表明Q的平方根与一个随机数相乘希望能帮到你。
相关知识等待您来回答
编程领域专家
& &SOGOU - 京ICP证050897号&& 查看话题
用matlab画两个函数曲线
求助用matlab画出两个函数曲线,
你要画什么曲线,没有写清楚啊,是随便画什么曲线么。 你是说不知道怎么把两个画在一个图上吗?
要么把你的源代码贴出来 plot(t1,y1,'r-',t2,y2,'y*')
表示在同一张图里面用红色的线画y1(t1)和用黄色的星号画y2(t2)
当然,前提条件是工作空间中有t1,t2,y1,y2这些向量的存在 我的matlab符号工具箱坏了,所以就给你作个简单的程序,是从定积分的概念来算的,虽然很原始,但是很容易懂,也容易变成其他的函数,只是速度慢了点,程序见下一个回复
%% parameter to adjust
ds = 0.01;
es = pi/2;
db = 1e-2;
eb = pi/2;
%% calculate and plot
% calculate the first function
for sita = ss:ds:es
& & beta = sb:db:
& & tem = cos(beta)*sin(sita) .* sqrt( 1 - cos(2*beta)*sin(2*sita) );
& & y1(n) = sum( tem ) *
& & n = n+1;
sita = (180/pi) * (ss:ds:es);
subplot(2,2,1);
plot( sita, y1);
xlabel( 'cos(beta)*sin(sita) .* sqrt( 1 - cos(2*beta)*sin(2*sita) )');
title('first function');
% calculate the second function
= meshgrid(sb:db:eb, sb:db:eb );&&
for sita = ss:ds:es
& & tem = sqrt( 1 - cos(2*fa) .* ( 1 - sin( 2*sita ) * cos( 2*gama ) ) );
& & y2(n) = sum( sum( tem ) ) * db^2;
& & n = n+1;
sita = (180/pi) * (ss:ds:es);
subplot(2,2,2);
plot( sita, y2);
xlabel( 'sqrt( 1 - cos(2*fa) .* ( 1 - sin( 2*sita ) * cos( 2*gama ) ) )');
title('second function');
%% plot both
subplot(2,2,3);
plot( sita, y1); hold on
plot( sita, y2); hold off
title('both function'); 如果显示的字挤在一起,只要把窗口最大化就看清楚了
有什么问体尽管说 Originally posted by 宇宙333 at
求助用matlab画出两个函数曲线, 问题不清晰
在matlab里面
help plot Originally posted by zhenxiang at
我的matlab符号工具箱坏了,所以就给你作个简单的程序,是从定积分的概念来算的,虽然很原始,但是很容易懂,也容易变成其他的函数,只是速度慢了点,程序见下一个回复 不好意思,我把函数给写错了,你看能不能再给改一下程序呢,多谢,当然这是我的失误,金币可以再加的。
我再把两个函数发你邮箱行吗? Originally posted by 宇宙333 at
不好意思,我把函数给写错了,你看能不能再给改一下程序呢,多谢,当然这是我的失误,金币可以再加的。
我再把两个函数发你邮箱行吗? 可以,你发来就行了 Originally posted by 宇宙333 at
不好意思,我把函数给写错了,你看能不能再给改一下程序呢,多谢,当然这是我的失误,金币可以再加的。
我再把两个函数发你邮箱行吗?
%% parameter to adjust
ds = 0.01;
es = pi/2;
db = 1e-2;
eb = pi/2;
%% calculate and plot
% calculate the first function
beta = sb:db:
for sita = ss:ds:es& &
& & tem = cos(beta)*sin(sita) .* sqrt( 1 - cos(beta).^2 * sin(sita)^2 );
& & y1(n) = (6/pi^2) * sum( tem ) *
& & n = n+1;
sita = (180/pi) * (ss:ds:es);
subplot(2,2,1);
plot( sita, y1);
xlabel( '(6/pi^2) *cos(beta)*sin(sita) .* sqrt( 1 - cos(beta).^2 * sin(sita)^2 )');
title('first function');
% calculate the second function
= meshgrid(sb:db:eb, sb:db:eb );&&
for sita = ss:ds:es
& & tem = sqrt( 1 - cos(fa).^2 .* ( 1 - sin( sita )^2 * cos( gama ).^2 ) );
& & y2(n) = (4/pi^2) * sum( sum( tem ) ) * db^2;
& & n = n+1;
sita = (180/pi) * (ss:ds:es);
subplot(2,2,2);
plot( sita, y2);
xlabel( '(4/pi^2) * sqrt( 1 - cos(fa).^2 .* ( 1 - sin( sita )^2 * cos( gama ).^2 ) )');
title('second function');
%% plot both
subplot(2,2,3);
plot( sita, y1); hold on
plot( sita, y2); hold off
title('both function'); Originally posted by zhenxiang at
%% parameter to adjust
ds = 0.01;
es = pi/2;
db = 1e-2;
eb = pi/2;
%% calculate and plot
% calculate the first function
beta = sb:db:
for s ... y2(n) = (4/pi^2) * sum( sum( tem ) ) * db^2;
这个二次积分这样子行吗,我是觉得,是不是里面的sum(tem)应该有个*db^2呢,只是问一下,还有是不是三次方的时候直接用^3就可以了呢,因为第二个系数里面的是12/pi^3,你给写的是4/pi^2
多谢 Originally posted by 宇宙333 at
y2(n) = (4/pi^2) * sum( sum( tem ) ) * db^2;
这个二次积分这样子行吗,我是觉得,是不是里面的sum(tem)应该有个*db^2呢,只是问一下,还有是不是三次方的时候直接用^3就可以了呢,因为第二个系数里面的是1 ... db^2放在里面和外面的效果一样吧,^3是可以改的 Originally posted by 宇宙333 at
y2(n) = (4/pi^2) * sum( sum( tem ) ) * db^2;
这个二次积分这样子行吗,我是觉得,是不是里面的sum(tem)应该有个*db^2呢,只是问一下,还有是不是三次方的时候直接用^3就可以了呢,因为第二个系数里面的是1 ... 不客气,我也不是总这么空闲,以后不一定有机会帮你了
求人不如求己,自己多学习呀 Originally posted by zhenxiang at
db^2放在里面和外面的效果一样吧,^3是可以改的 能不能再给改一下程序呢,第二个函数少乘了一项,我按照你给的往里面加的话觉得得的结果不对呢,这个我再发你邮箱里面行吗,真的不好意思呢,还有就是我想得到两个的比值曲线不知道能不能得到。多谢 Originally posted by 宇宙333 at
能不能再给改一下程序呢,第二个函数少乘了一项,我按照你给的往里面加的话觉得得的结果不对呢,这个我再发你邮箱里面行吗,真的不好意思呢,还有就是我想得到两个的比值曲线不知道能不能得到。多谢 你发吧,我看看 Originally posted by zhenxiang at
你发吧,我看看 嗯呢,实在是不好意思呢,浪费你好多时间。不好意思呢 Originally posted by 宇宙333 at
嗯呢,实在是不好意思呢,浪费你好多时间。不好意思呢 最后一次了 ,下次就要收费了 Originally posted by 宇宙333 at
嗯呢,实在是不好意思呢,浪费你好多时间。不好意思呢
%% parameter to adjust
ds = 0.01;
es = pi/2;
db = 1e-2;
eb = pi/2;
%% calculate and plot
% calculate the first function
beta = sb:db:
for sita = ss:ds:es& &
& & tem = cos(beta)*sin(sita) .* sqrt( 1 - cos(beta).^2 * sin(sita)^2 );
& & y1(n) = (6/pi^2) * sum( tem ) *
& & n = n+1;
sita = (180/pi) * (ss:ds:es);
subplot(2,2,1);
plot( sita, y1);
xlabel( '(6/pi^2) *cos(beta)*sin(sita) .* sqrt( 1 - cos(beta).^2 * sin(sita)^2 )');
title('first function');
% calculate the second function
= meshgrid(sb:db:eb, sb:db:eb );&&
for sita = ss:ds:es
& & tem = cos(fa) .* sqrt(&&1 - sin( sita )^2 * cos( gama ).^2 ) .* sqrt( 1 - cos(fa).^2 .* ( 1 - sin( sita )^2 * cos( gama ).^2 ) );
& & y2(n) = (12/pi^3) * sum( sum( tem ) ) * db^2;
& & n = n+1;
sita = (180/pi) * (ss:ds:es);
subplot(2,2,2);
plot( sita, y2);
xlabel( '(12/pi^3) * cos(fa) .* sqrt(&&1 - sin( sita )^2 * cos( gama ).^2 ) .* sqrt( 1 - cos(fa).^2 .* ( 1 - sin( sita )^2 * cos( gama ).^2 ) )');
title('second function');
%% plot both
subplot(2,2,3);
plot( sita, y1); hold on
plot( sita, y2); hold off
title('both function');
%% plot ratio 1st/2nd
subplot(2,2,4);
y3 = y1 ./ y2;
plot( sita, y3);
title('ratio 1st/2nd');

我要回帖

更多关于 matlab模拟布朗运动 的文章

 

随机推荐