matlab非线性优化的求解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 1
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 09:50:04
matlab非线性优化的求解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 1
matlab非线性优化的求解
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中应该填什么?我这个程序还有错误吗?
求指导啊
matlab非线性优化的求解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 1
参考代码如下:
function zdtdata=[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更改优化的设置.
其它一些小的细节,比如是否在语句后加分号,不是大问题,稍微注意点就好.
写了不少,希望能帮到楼主.