声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2022|回复: 9

[稳定性与分岔] 求分岔图做法及思路

[复制链接]
发表于 2009-8-8 16:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
小弟目前正在画一分岔图,关注论坛也有很长一段时间,根据各位大侠的指点,我也进行了程序的编写,无奈就是没有理想的结果出现,还望各位大侠指点一二,先谢过了

微分方程:d2y/dt2+1/RC*dy/dt+1/LC*y=s/LC*Vin

其中R,L,C是已知量
当y>11.3时,s=0;当y<=11.3时,s=1

以下是我编写的程序:
function buck_bifur_Vin_getmax
clear all
t0 = [0 10];
for Vin=linspace(20,40,10)
[t,y] = ode113('buck',t0,[0;0;22;0.02;0.000047;Vin;1;11.3]);
ymax = getmax(y(:,1));
plot(Vin,ymax,'b','markersize',1)
hold on
clear ymax
end

function [ymax] = getmax(y)
a = length(y);
j = 1;
for i=(a-1)/2:a
b=(y(i,1)-y(i-2,1))/2;
c=(y(i,1)+y(i-2,1))/2-y(i-1,1);
if (y(i-2,1)<=y(i-1,1) && y(i-1,1)>=y(i,1) && c==0)
ymax(j) = y(i-1,1);
j=j+1;
if(y(i-2,1)<=y(i-1,1) && y(i-1,1)>=y(i,1))
ymax(j) = y(i-1,1)-b^2/(4*c);
j=j+1;
end
end
end

function dy = buck(t,y)
if y(1)>y(8) y(7)=0;
else y(7)=1;
end
dy = zeros(8,1);
dy(1) = y(2);
dy(2) = -y(2)/(y(3)*y(5)) - y(1)/(y(4)*y(5)) + y(6)*y(7)/(y(4)*y(5));
dy(3) = 0;
dy(4) = 0;
dy(5) = 0;
dy(6) = 0;
dy(7) = 0;
dy(8) = 0;

[ 本帖最后由 咕噜噜 于 2009-9-27 16:27 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-8-8 16:56 | 显示全部楼层
现在的情况主要是程序似乎无法运行,不知道是程序的问题还是电脑配置的问题,没有错误提示,就是cpu 100%,也无结果出现,还望各位指点一下啊,小弟感激不尽啊
发表于 2009-8-8 18:31 | 显示全部楼层

回复 楼主 20801008 的帖子

function dy = buck(t,y)
if y(1)>y(8) y(7)=0;
else y(7)=1;
end
dy = zeros(8,1);
dy(1) = y(2);
dy(2) = -y(2)/(y(3)*y(5)) - y(1)/(y(4)*y(5)) + y(6)*y(7)/(y(4)*y(5));
dy(3) = 0;
dy(4) = 0;
dy(5) = 0;
dy(6) = 0;
dy(7) = 0;
dy(8) = 0;


你后面的3-8 要它作什么?
 楼主| 发表于 2009-8-9 14:16 | 显示全部楼层

回复 板凳 无水1324 的帖子

这个我也不是很清楚,就是模仿的论坛上的程序写的,我看他们都有写这些,所以我就跟着写了。
发表于 2009-8-10 09:39 | 显示全部楼层

回复 地板 20801008 的帖子

不要这样子写,你在论坛或者google里面搜索一下。写成状态方程,然后编写,参数不要变成变量了
 楼主| 发表于 2009-8-10 14:52 | 显示全部楼层

回复 5楼 无水1324 的帖子

多谢
我是令z=dy,将2阶的微分方程化成1阶的。
如果化成状态方程的话,是用来进行编程用么?
还有参数不要变成变量,是指我直接给他们赋值就行了么?那分岔参数呢?
发表于 2009-8-10 17:10 | 显示全部楼层

回复 6楼 20801008 的帖子

化成状态方程是为了编程序。分岔参数也差不多。你搜索一下论坛,有很多这样子的程序!
 楼主| 发表于 2009-8-11 15:25 | 显示全部楼层

回复 7楼 无水1324 的帖子

谢谢无水的帮忙
论坛的例子我看了很多,感觉我按照那些编出来的结果都运行不了,也不太清楚到底是哪些环节出了问题
你能不能简要的告诉我关于编写分岔程序的一些思路就好了
以前看到过思路:
1,确定分岔参数的取值范围,给出变化步长(这里我的参数是Vin,我令其从20到40变化的,步长还没定,因为一直运行不了)
2,做一个循环,求解微分方程(这里是不是就是得到微分方程的迭代公式,如果是状态方程的话,该如何处理呢)
3,可以做一个判别大小的函数,如getmax(),从微分方程的解向量中取出一个极值,将该极值点与相应的分岔参数在图中画出来。(这个getmax函数中,我对高手中的b,c两个值的确定很不理解,不知道为什么这么取,以及后面极值的选取的判断条件更是一头雾水)

还请无水多加指点,感激不尽啊
发表于 2009-9-27 13:35 | 显示全部楼层
对  这个 b c 是怎么考虑的
发表于 2009-12-12 20:06 | 显示全部楼层
最大值法应该有个适用的范围,不是每个系统都能得出理想的结果
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 19:27 , Processed in 0.081642 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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