用matlab进行非线性拟合 nlinfit函数

有组数据
x=[1.1389 1.0622 0.9822 0.934 0.9251 0.9158];
y=[0.03 1 5.03 15.05 19.97 30.3];
拟合函数为y=-k*ln(x+a)-b;
我的拟合程序是
clc;clear;
x=[1.1389 1.0622 0.9822 0.934 0.9251 0.9158];
y=[0.03 1 5.03 15.05 19.97 30.3];
myfunc=inline('-beta(1)*ln(x+beta(2))-beta(3)','beta','x');
beta=nlinfit(x,y,myfunc,[1 1 1]);
k=beta(1),a=beta(2),b=beta(3)
%test the model
xx=min(x):max(x);
yy=-k*ln(x+a)-b;
plot(x,y,'o',xx,yy,'r')
程序运行后总提示错误,不知道怎么回事,求教高手

ln->log
Matlab中ln就是log
你的初值我改成000了,111的话,计算出来有一小部分虚数成份。
另外最后一个plot我也改了一下,你的xx只有一个值啊,我也就直接改成x做图了。因为你的yy也是由x计算的。

改成:
clc;clear;
x=[1.1389 1.0622 0.9822 0.934 0.9251 0.9158];
y=[0.03 1 5.03 15.05 19.97 30.3];
myfunc=inline('-beta(1)*log(x+beta(2))-beta(3)','beta','x');
beta=nlinfit(x,y,myfunc,[0 0 0]);
k=beta(1),a=beta(2),b=beta(3)
%test the model
xx=min(x):max(x);
yy=-k*log(x+a)-b;
plot(x,y,'o',x,yy,'r')
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-18
%
By
lyqmath
clc;
clear
all;
close
all;
X=[4
7;
8
7;
12
7;
16
7;
4
28;
8
28;
12
28;
16
28;
4
60;
8
60];
Z=[34,5,12,34,27,49,40,45,23,67]';
fun
=
@(beta,
x)
beta(1)*x(:,
1)
+
beta(2)*x(:,
2)
+
beta(3);
beta0
=
[1;
1;
1];
beta
=
nlinfit(X,Z,fun,beta0);
[xt,
yt]
=
meshgrid(linspace(min(X(:,
1)),
max(X(:,
1))),
linspace(min(X(:,
2)),
max(X(:,
2))));
zt
=
fun(beta,
[xt(:)
yt(:)]);
zt
=
reshape(zt,
size(xt,
1),
size(xt,
2));
figure;
hold
on;
box
on;
view(3);
plot3(X(:,
1),
X(:,
2),
Z,
'r+');
mesh(xt,
yt,
zt);
title(sprintf('By
lyqmath
拟合结果:z
=
%.3f*x
+
%.3f*y
+
%.3f',
beta(1),
beta(2),
beta(3)),
'FontWeight',
'Bold',
'Color',
'r');

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网