MATLAB代码一直说错误使用nlinfit函数? matlab二分法程序代码
- matlab中拟合函数nlinfit的使用
- matlab中的nlinfit函数怎么用
- matlab中nlinfit和lsqcurvefit的功能和用法有什么区别?
- matlab非线性回归 关于reglm函数
matlab中拟合函数nlinfit的使用
程序改成如下:
主程序:
x=[0.076 0.197 0.356 0.498 0.622 0.747 0.829 0.936];
r=[1.6225 1.4959 1.3470 1.2313 1.1447 1.0733 1.0369 1.0060];
y=log(r);
beta0=[1.000,1.000];
beta=nlinfit(x,y,@myfun,beta0);
x1=min(x):0.001:max(x);
E=-log(x1+beta(1).*(1-x1))+(1-x1).*(beta(1)./(x1+beta(1).*(1-x1))-beta(2)./((1-x1)+beta(2).*x1));
plot(x,y,'o',x1,E)
legend('原始数据点' , '拟合后的曲线')调用程序
function y=myfun(beta,x)
%z=(1-x)
y=-log(x+beta(1).*(1-x))+(1-x).*(beta(1)./(x+beta(1).*(1-x))-beta(2)./((1-x)+beta(2).*x));
end结果:
matlab中的nlinfit函数怎么用
回归分析(Regression Analysis)是研究一个变量Y与其他若干变量X之间相互关系的一种数学工具。它是在一组试验或观测数据的基础上,寻找被随机性掩盖的变量之间的依存关系。粗略的将,可以理解为用一种确定的函数关系去近似代替比较复杂的相关关系。这个函数被称为回归函数,在实际问题中称为经验公式。(摘自:王正林等《精通MATLAB科学计算》)
用MATLAB进行非线性回归,即nlinfit函数。从理论分析上将要进行回归,必须要提供一个函数原因beta=nlinfit(X,Y,fun,beta0)其中:X和Y为变量列表;fun为要拟合的非线性函数原型;beta0为非线性函数原型各系数的猜测初始值;beta为与beta0对应的计算值。
matlab中nlinfit和lsqcurvefit的功能和用法有什么区别?
如果你懂英语,就用matlab最强大的函数help(一般人我不告诉他)
help nlinfit
help lsqcurvefit
如果不懂英语,继续看
进行非线性回归时可使用nlinfit指令,其语法如下:
beta = nlinfit(X,y,fun,beta0)
[beta,r,J] = nlinfit(X,y,fun,beta0)
[...] = nlinfit(X, y, fun, beta0, options)
[x,resnorm]= lsqcurvefit(fun,x0,xdata,ydata);
参数解释:
input:fun——编程者需要拟合的函数
x0——函数系数的初始猜测值
xdata——x坐标的值
ydata——y左边的值
output:x——经拟合的系数
resnorm——the value of the squared 2-norm of the residual at x: sum((fun(x,xdata)-ydata).^2).
example:
function fitfunc
xdata=[3.5 7.7 9.3 4.5 8.6 2.8 1.3 7.9 10.1 5.4]; %定义自变量
ydata=[16.5 149.6 263.1 24.6 208.5 9.9 2.7 162.9 322.0 52.3]; %定义因变量
x0=[7,7,7]; %初始估计值
[x,renorm]=lsqcurvefit(@myfun,x0,xdata,ydata); %确定待定系数
disp(x);
disp(renorm);
function F=myfun(x,xdata)
F=x(1)*(xdata.^2)+x(2)*sin(xdata)+x(3)*(xdata.^3); %预定义函数关系式
matlab非线性回归 关于reglm函数
%by dynamic
%see also
%contact me matlabsky@gmail
%2009.2.
%
程序编好了,但是初值真的很难选,我到现在还没有选这个一个合适的初值,你根据实际选择一个吧,否则程序是运行不起来的
你的函数exp,初值稍微选的不好就会导致0或者∞
function mm
clc
x=[2030 13 320 1
1850 12 320 1
1850 12 320 1
1970 13 320 1
2090 14 320 1
2210 15 320 1
3010 20 320 1
2540 17 320 1
2710 18 620 2];
p=[1
1
1
1
1
0.90990991
0.09009009
0.544303797
0.455696203];
b0=[-.005 2 -0.05 8];
b = nlinfit(x,p,@fun,b0)
function yhat=fun(bb,x)
alpha=x(:,1);
beta=x(:,2);
gamma=x(:,3);
delta=x(:,4);
a=bb(1);
b=bb(2);
c=bb(3);
d=bb(4);
num=exp(a*alpha+b*beta+c*gamma+d*delta);
den=sum(num);
yhat=num./den;