matlab非线性优化的求解

functionf=curvefun1(x,tdata)f=x(1)*x(3)/(x(1)-x(2))*(exp(-x(2)*tdata)-exp(-x(1)*tdata... function f=curvefun1(x,tdata)
f=x(1)*x(3)/(x(1)-x(2))*(exp(-x(2)*tdata)-exp(-x(1)*tdata))

tdata=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16];
cdata=[15 32 38 41 41 40 35 35 28 25 24 20 20 18 17 14 11 10 9 6 6 4 3];
x0=[]
x=lsqcurvefit('curvefun1',x0,tdata,cdata)
f=curvefun1(x,tdata)
x0中应该填什么?我这个程序还有错误吗?

求指导啊
展开
 我来答
tianxiawulang
2013-09-12 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2819万
展开全部

参考代码如下:

function zd
tdata=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16];
cdata=[15 32 38 41 41 40 35 35 28 25 24 20 20 18 17 14 11 10 9 6 6 4 3];
x0=[1 2 3];
opt=optimset('MaxFunEvals',1e5,'MaxIter',1e5);
x=lsqcurvefit(@curvefun1,x0,tdata,cdata,[],[],opt);
f=curvefun1(x,tdata);
plot(tdata,cdata,'b.-',tdata,f,'r:x')
legend('原始数据','拟合数据')

function f=curvefun1(x,tdata)
f=x(1)*x(3)/(x(1)-x(2))*(exp(-x(2)*tdata)-exp(-x(1)*tdata));

 

拟合结果如下图所示:

说明:

  1. 这是一个拟合问题,也算是非线性优化的一种情况;

  2. 根据拟合函数的形式看,有三个拟合参数,所以初值x0应该有三个元素,原则上可以任意选取,但不同的初值有可能会影响到结果。另外,从表达式看,x(1)和x(2)不能相同。这里取x0=[1 2 3],拟合成功,从图中看效果还不错,结果为[2.0852  0.1655  50.0662]。

  3. 函数curvefun1中的表达式有错,其中有一个全角括号。

  4. 代码分成两部分,一部分用于定义拟合函数,另一部分是主程序。为了方便保存到同一个文件中,把主程序也定义为函数,并且放在代码的最前面。

  5. 按照优化的默认参数设置,得到的结果不足以满足精度要求,所以,用optimset更改优化的设置。

  6. 其它一些小的细节,比如是否在语句后加分号,不是大问题,稍微注意点就好。

写了不少,希望能帮到楼主。

Sievers分析仪
2025-02-09 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准... 点击进入详情页
本回答由Sievers分析仪提供
贞皖0F
2013-09-11 · TA获得超过357个赞
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:163万
展开全部
这个貌似是非线性拟合吧?x0是function 定义的函数中变量x的初值,拟合效果的好坏与初值x0的选取有比较大的关系,程序基本没什么问题,设定初值,试一下哈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式