作者wmin (Gary)
看板MATLAB
标题[问题] 曲线拟合问题
时间Fri Nov 18 00:36:55 2011
各位板众大家好
自己摸索学习Matlab 卡在这边很久了
所以来请教大家
我有一组x.y的数据约600笔
想要对已知"非线性方程"做曲线拟合
方程式为 x=(log((y/b)*((b-c)/(y-c)))-c*(1/y-1/b))/(a*c^2)
想求未知参数a.b.c 并求得R2值
我尝试用了两个方法
1. curvefiting
我用Toolboxes里的Curve Fitting
选择Custom Equations来输入自订函数
可是就是跑不出来 出现
Fit could not be computed due to error:
Inf computed by model function, fitting cannot continue.
Try using or tightening upper and lower bounds on coefficients.
但是对於参数a.b.c的值 大概有个底
所以对於初始值及上下限都有给值
问题会出现在这边吗?
2. lsqcurvefit
M.file 输入
-----------------------------------------------
function F=myfun(x,J);
F=(log([(J*(x(2)-x(3)))*diag((x(2)*(J-x(3))).^-1)])-x(3)*(J.^-1-x(2)^-1))
*((x(1)*x(3)^2)^-1)
-----------------------------------------------
Command Window输入
clear;clc
xlsFile='data9910031.xls';
x(1,:)=xlsread(xlsFile,'sheet1','A1:A660')';
y(1,:)=xlsread(xlsFile,'sheet1','B1:B660')';
x0=[500000 0.0001 0.00002];
[x,resnorm]=lsqcurvefit(@myfun,x0,x,y)
format long;
-----------------------------------------------
拟合的结果很差 也出现根本不可能的负值
还有 请问R2有指令吗? corrcoef我不会用T^T
我已经困在这里很久了
请大家有意见的请告诉我~
谢谢各位!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.150.220
1F:推 zupo:数据方便给吗? 我试看看.或线上聊 11/18 19:04
2F:→ wmin:谢谢你:) 已寄信 11/19 01:16