求分岔图做法及思路
小弟目前正在画一分岔图,关注论坛也有很长一段时间,根据各位大侠的指点,我也进行了程序的编写,无奈就是没有理想的结果出现,还望各位大侠指点一二,先谢过了微分方程: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 = ;
for Vin=linspace(20,40,10)
= ode113('buck',t0,);
ymax = getmax(y(:,1));
plot(Vin,ymax,'b','markersize',1)
hold on
clear ymax
end
function = 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 编辑 ] 现在的情况主要是程序似乎无法运行,不知道是程序的问题还是电脑配置的问题,没有错误提示,就是cpu 100%,也无结果出现,还望各位指点一下啊,小弟感激不尽啊
回复 楼主 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 要它作什么?
回复 板凳 无水1324 的帖子
这个我也不是很清楚,就是模仿的论坛上的程序写的,我看他们都有写这些,所以我就跟着写了。回复 地板 20801008 的帖子
不要这样子写,你在论坛或者google里面搜索一下。写成状态方程,然后编写,参数不要变成变量了回复 5楼 无水1324 的帖子
多谢我是令z=dy,将2阶的微分方程化成1阶的。
如果化成状态方程的话,是用来进行编程用么?
还有参数不要变成变量,是指我直接给他们赋值就行了么?那分岔参数呢?
回复 6楼 20801008 的帖子
化成状态方程是为了编程序。分岔参数也差不多。你搜索一下论坛,有很多这样子的程序!回复 7楼 无水1324 的帖子
谢谢无水的帮忙论坛的例子我看了很多,感觉我按照那些编出来的结果都运行不了,也不太清楚到底是哪些环节出了问题
你能不能简要的告诉我关于编写分岔程序的一些思路就好了
以前看到过思路:
1,确定分岔参数的取值范围,给出变化步长(这里我的参数是Vin,我令其从20到40变化的,步长还没定,因为一直运行不了)
2,做一个循环,求解微分方程(这里是不是就是得到微分方程的迭代公式,如果是状态方程的话,该如何处理呢)
3,可以做一个判别大小的函数,如getmax(),从微分方程的解向量中取出一个极值,将该极值点与相应的分岔参数在图中画出来。(这个getmax函数中,我对高手中的b,c两个值的确定很不理解,不知道为什么这么取,以及后面极值的选取的判断条件更是一头雾水)
还请无水多加指点,感激不尽啊 对这个 b c 是怎么考虑的 最大值法应该有个适用的范围,不是每个系统都能得出理想的结果
页:
[1]