MATLAB代码一直说错误使用nlinfit函数? matlab二分法程序代码

5610℃ EDGAR

MATLAB代码一直说错误使用nlinfit函数?matlab二分法程序代码

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;