
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中应该填什么?我这个程序还有错误吗?
求指导啊 展开
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中应该填什么?我这个程序还有错误吗?
求指导啊 展开
2个回答
展开全部
参考代码如下:
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));
拟合结果如下图所示:
说明:
这是一个拟合问题,也算是非线性优化的一种情况;
根据拟合函数的形式看,有三个拟合参数,所以初值x0应该有三个元素,原则上可以任意选取,但不同的初值有可能会影响到结果。另外,从表达式看,x(1)和x(2)不能相同。这里取x0=[1 2 3],拟合成功,从图中看效果还不错,结果为[2.0852 0.1655 50.0662]。
函数curvefun1中的表达式有错,其中有一个全角括号。
代码分成两部分,一部分用于定义拟合函数,另一部分是主程序。为了方便保存到同一个文件中,把主程序也定义为函数,并且放在代码的最前面。
按照优化的默认参数设置,得到的结果不足以满足精度要求,所以,用optimset更改优化的设置。
其它一些小的细节,比如是否在语句后加分号,不是大问题,稍微注意点就好。
写了不少,希望能帮到楼主。

2025-02-09 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准...
点击进入详情页
本回答由Sievers分析仪提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询