声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1371|回复: 10

[综合讨论] 请朋友们帮我解决非线性拟合问题!非常感谢!

[复制链接]
发表于 2009-3-5 20:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请教用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

非常感谢!
回复
分享到:

使用道具 举报

发表于 2009-3-5 20:34 | 显示全部楼层
建议LZ应该自行试一下, 并贴出你试的程序!
 楼主| 发表于 2009-3-9 21:38 | 显示全部楼层

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

这是我的数据拟合的程序,请大家帮忙解决!

建立函数如下:
function  diff=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=[1 1.025 1.160714 1.192857 1.064286 1.139286 1.232143 1.309322 1.427966 1.933333];
%
初始化方程系数;
X0=[1 1]';
%
设置用中等模式(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 编辑 ]
发表于 2009-3-10 08:02 | 显示全部楼层
LZ编辑愈编愈炫, 但重复好像无用, 建议看看本版规则吧!
个人未曾使用过lsqnonlin:@)
 楼主| 发表于 2009-3-10 09:22 | 显示全部楼层

回复 地板 ChaChing 的帖子

那请问你用什么来进行非线性拟合啊?
发表于 2009-3-10 11:06 | 显示全部楼层

回复 5楼 diamondyang 的帖子

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

评分

1

查看全部评分

发表于 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));
至於结果是否正确, 自行判断
 楼主| 发表于 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,还有很多要学习的,但是非线性拟合这块教程里也没有提到!谢谢了!
function  diff=fit-simp(x,X,Y) 请问这个函数定义有问题么?有红色警告!
发表于 2009-3-10 12:42 | 显示全部楼层

回复 8楼 diamondyang 的帖子

fit-simp改成fit_simp

评分

1

查看全部评分

发表于 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=[1 1.025 1.160714 1.192857 1.064286 1.139286 1.232143 1.309322 1.427966 1.933333]';
x0=[1 1]'; 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');

function  diff=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 编辑 ]
 楼主| 发表于 2009-3-10 14:54 | 显示全部楼层

回复 10楼 ChaChing 的帖子

非常感谢你!曲线已经拟合出来了,但是误差很大,请问能否求出想x(1)和x(2)?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-20 10:46 , Processed in 0.063033 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表