mlxk 发表于 2008-1-7 21:45

遗传算法求解ITAE

本人在用遗传算法求解ITAE整定PID时,了解有两种方法,一是自己编写目标函数的.M文件,二是用simulink做个模型自动生成,但是现在看了三本书和一些网上的资料后仍然搞不定,一个问题是matlab书上没有关于多参量数值积分的介绍,另一个是不知道如何使用simulink来生成.M文件,恳请各位大家指教。

sigma665 发表于 2008-1-7 21:53

原帖由 mlxk 于 2008-1-7 21:45 发表 http://www.chinavib.com/forum/images/common/back.gif
一个问题是matlab书上没有关于多参量数值积分的介绍
这个问题,本版有很多,请搜索

http://www.chinavib.com/forum/viewthread.php?tid=42369&extra=page%3D1%26amp%3Bfilter%3Ddigest

[ 本帖最后由 sigma665 于 2008-1-7 22:19 编辑 ]

mlxk 发表于 2008-1-8 12:47

回复 #2 sigma665 的帖子

先谢谢了啊,不过quad只支持单参量积分,多参量的matlab帮助里并没有说明,版主示例里的,那些那是单变量的,然后又找了找,找到你以前发过的那个裂纹的程序,不懂,于是照猫画虎改了下,有问题,能否帮忙看下这个错误
In an assignmentA(I) = B, the number of elements in B and
I must be the same.
程序是:
function z = w(x)

x(4)=linspace(0,inf);

kesi=x(1)+x(2)/(x(4)*x(5))+x(3)*x(4)*x(5);

z=arrayfun(@(kesi) quad(@(b) kesi*exp(-0.06*x(4)*x(5))/(1+kesi),0,inf),x(5));

[ 本帖最后由 mlxk 于 2008-1-8 13:32 编辑 ]

mlxk 发表于 2008-1-8 13:08

现在的问题是能够把这个函数正确表达出来即可,剩下的由算法去搞定,本人愚钝大侠帮忙啊

sigma665 发表于 2008-1-8 13:09

回复 #3 mlxk 的帖子

x(4)=linspace(0,inf);

这个不能这样吧,要是无穷大的话,取一个很大的数

mlxk 发表于 2008-1-8 13:15

回复 #5 sigma665 的帖子

取了很大也不行,还是那个错误,现在来看不知道思路是不是也有问题了,郁闷啊

sigma665 发表于 2008-1-8 13:23

回复 #6 mlxk 的帖子

:@L
x(4)是一个数...
刚刚没注意.

你的x是一个一维矩阵?
x(1),x(2),x(3),x(4),x(5),是其中的某个值??

[ 本帖最后由 sigma665 于 2008-1-8 13:25 编辑 ]

mlxk 发表于 2008-1-8 13:30

我设的是p=x(1)
               i=x(2)
               d=x(3)
               w=x(4)
               t=x(5)把传递函数里面的信息都包含在那两个函数里,kesi=p+i/s+ds

mlxk 发表于 2008-1-8 13:32

最后是对x(5)也就是对时间t求积分,上下限是,是这样

sigma665 发表于 2008-1-8 13:50

回复 #9 mlxk 的帖子

那不要用x(i)来表示,x(i)表示一维矩阵里的某一个值
用原来的字母...
w=linspace(0,inf);这个不行,第一数是nan,其他都是inf

mlxk 发表于 2008-1-8 14:28

查了下,inspace要求是个确定是两个数之间的距离,quad应该是不能用多变量,不然就容易多了,谢谢sigma665
页: [1]
查看完整版本: 遗传算法求解ITAE