diamondyang 发表于 2009-3-5 20:20

请朋友们帮我解决非线性拟合问题!非常感谢!

请教用matlab非线性拟合公式y=a/(1+(a-1)*exp(-b*x)),并求出参数a和b值,画出拟合曲线与原数据点的图形。其中x为自变量,y为因变量,a和b是参数。
x=-5、-2、-1.8、-1.2、-1、-0.9、-0.01、0.29、0.69、1
y=1、1.03、1.16、1.19、1.06、1.14、1.23、1.31、1.43、1.93

非常感谢!

ChaChing 发表于 2009-3-5 20:34

建议LZ应该自行试一下, 并贴出你试的程序!

diamondyang 发表于 2009-3-9 21:38

请朋友们帮我解决非线性拟合问题!非常感谢!

这是我的数据拟合的程序,请大家帮忙解决!
建立函数如下:
functiondiff=fit-simp(x,X,Y)
% 此函数被LSQNONLIN调用
% x 是包含等式系数的向量
% X 与 Y 是作为操作数传递给lsnonlin
A = x(1);
B = x(2);
diff = A. / (1+(A-1).*exp(-B.*X))-Y;

下面是脚本:
%定义你打算拟合的数据集合;
X=[-5 -2.01818 -1.81818 -1.23636 -1.01818 -0.85455 -0.01818 0.290909 0.690909 1];
Y=;
%初始化方程系数;
X0=';
%设置用中等模式(memdium-scale)算法;
options=optimset('Largescale','off');
%通过调用LSQNONLIN重现计算新的系数;
x=lsqnonlin(@fit_simp,X0,[],[],options,X,Y);
%调用LSQNONLIN结果输出表明拟合是成功的;
Optimization terminated successfully:
Gradient in the search direction less than tolFun
Gradient less than 10*(tolFun+tolX)
%绘制原始数据与新的计算的数据;
Y_new=x(1)/(1+(x(1)-1).*exp(-x(2).*X));
plot(X,Y,'+r',X,Y_new,'b');

请大家帮忙看一下 怎么解决这个问题! 谢谢!

[ 本帖最后由 ChaChing 于 2009-3-9 21:59 编辑 ]

ChaChing 发表于 2009-3-10 08:02

LZ编辑愈编愈炫, 但重复好像无用, 建议看看本版规则吧!
个人未曾使用过lsqnonlin:@)

diamondyang 发表于 2009-3-10 09:22

回复 地板 ChaChing 的帖子

那请问你用什么来进行非线性拟合啊?

citywander 发表于 2009-3-10 11:06

回复 5楼 diamondyang 的帖子

偶直接在figure里用tool下的 basic fitting...

ChaChing 发表于 2009-3-10 12:02

回复 5楼 diamondyang 的帖子

很久没做这方面的事了, 以前工具箱没这麽齐全, 个人都是硬干, 落伍了
LZ出错提示也没给!

Y_new=x(1)/(1+(x(1)-1).*exp(-x(2).*X)); 改为 Y_new=x(1)./(1+(x(1)-1).*exp(-x(2).*xi));
至於结果是否正确, 自行判断

diamondyang 发表于 2009-3-10 12:27

回复 7楼 ChaChing 的帖子

这是出错的问题。我改成你说的也是同样的问题!请帮忙看一下!谢谢!
这是两个M文件。
运行第一个M文件时出现:Error: Function definitions are not permitted at the prompt or in scripts.
运行第二个M文件时出现:??? Undefined variable "Untitled2" or class "Untitled2.m".
请大家帮忙看一下,本人刚刚开始接触Matlab,还有很多要学习的,但是非线性拟合这块教程里也没有提到!谢谢了!
functiondiff=fit-simp(x,X,Y) 请问这个函数定义有问题么?有红色警告!

friendchj 发表于 2009-3-10 12:42

回复 8楼 diamondyang 的帖子

fit-simp改成fit_simp

ChaChing 发表于 2009-3-10 13:11

function zzz
xi=[-5 -2.01818 -1.81818 -1.23636 -1.01818 -0.85455 -0.01818 0.290909 0.690909 1]';
yi=';
x0='; options=optimset('TolFun',1e-8);
x=lsqnonlin(@fit_simp,x0,[],[],options,xi,yi);
Y_new=x(1)./(1+(x(1)-1).*exp(-x(2).*xi));
plot(xi,yi,'+r',xi,Y_new,'bo');

functiondiff=fit_simp(x,xi,yi)
diff = x(1) ./ (1+(x(1)-1).*exp(-x(2).*xi))-yi;

还有LZ要确定用对函数, 没空细看, sorry!
http://forum.vibunion.com/thread-49726-1-1.html

[ 本帖最后由 ChaChing 于 2009-3-10 13:23 编辑 ]

diamondyang 发表于 2009-3-10 14:54

回复 10楼 ChaChing 的帖子

非常感谢你!曲线已经拟合出来了,但是误差很大,请问能否求出想x(1)和x(2)?
页: [1]
查看完整版本: 请朋友们帮我解决非线性拟合问题!非常感谢!