紧急,在线等。matlab上的对数函数数据拟合。y=algx+b

实验数据:
x=[500 550 600 650 700 750 800 850 900 950 1000];
y=[62.4 69.2 75.4 82.2 70.4 68.4 75.2 77.8 71.6 75.6 72.2];
图中既有曲线也有数据点,最好能求出a,b.

%求拟合系数a,b,c

a= nlinfit(x,y,func,a0),

c=a(3),b=a(2),a=a(1),

当0<a<1, b>1时,y=logab<0;

当a>1, 0<b<1时,y=logab<0。

两边对x求导:y'/y=ln a,y'=yln a=a^xln a,

特殊地,当a=e时,y'=(a^x)'=(e^x)'=e^xln e=e^x。

eº=1,

[a,r] = nlinfit(x,y,func,a0) %a拟合系数,r差值,

当r比较小(接近于零),说明拟合结果是合理的。


扩展资料:

fix(x):无论正负,舍去小数至相邻整数

floor(x):下取整,即舍去正小数至相邻整数

ceil(x):上取整,即加入正小数至相邻整数

rat(x):将实数x化为多项分数展开

rats(x):将实数x化为分数表示

sign(x):符号函数(Signum function)。

当x<0时,sign(x)=-1

当x=0时,sign(x)=0;

当x>0时,sign(x)=1。

如果ax =N(a>0,且a≠1),那么数x叫做以a为底N的对数,记作x=logaN,读作以a为底N的对数,其中a叫做对数的底数,N叫做真数

一般地,函数y=logaX(a>0,且a≠1)叫做对数函数,也就是说以幂(真数)为自变量,指数为因变量,底数为常量的函数,叫对数函数。

其中x是自变量,函数的定义域是(0,+∞),即x>0。它实际上就是指数函数的反函数,可表示为x=ay。因此指数函数里对于a的规定,同样适用于对数函数。

参考资料来源:百度百科-MATLAB

参考资料来源:百度百科-对数函数

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-11-15

x=[500 550 600 650 700 750 800 850 900 950 1000];y=[62.4 69.2 75.4 82.2 70.4 68.4 75.2 77.8 71.6 75.6 72.2];f = fittype('a*log10(x)+b'); % 拟合函数的形式 

fit1 = fit(x',y',f,'StartPoint',[x(1) y(1)]);a = fit1.a; % a的值b = fit1.b; % b的值fdata = feval(fit1,x'); % 用拟合函数来计算yfigureplot(x,y); hold onplot(x,fdata','r'); hold offlegend('Ori data',' Fitting data');

x=[500 550 600 650 700 750 800 850 900 950 1000];

y=[62.4 69.2 75.4 82.2 70.4 68.4 75.2 77.8 71.6 75.6 72.2];

f = fittype('a*log10(x)+b'); %  拟合函数的形式 

fit1 = fit(x',y',f,'StartPoint',[x(1) y(1)]);

a = fit1.a; % a的值

b = fit1.b; % b的值

fdata = feval(fit1,x'); % 用拟合函数来计算y

figure

plot(x,y); hold on

plot(x,fdata','r'); hold off

legend('Ori data',' Fitting data');

扩展资料

x=[500 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000]; y=[11.4635 13.2981 15.2614 17.4575 18.5784 19.4151 20.9937 23.0329 23.4717 24.6887 25.5164]; 

若按照:y=a.*x.^b对数据进行数据拟合,求系数a,b?是不是先得对y=a.*x.^b进行线性化处理:两边取对数。

参考资料;百度百科-函数

本回答被网友采纳
第2个回答  推荐于2017-11-25
x=[500 550 600 650 700 750 800 850 900 950 1000];
y=[62.4 69.2 75.4 82.2 70.4 68.4 75.2 77.8 71.6 75.6 72.2];

f = fittype('a*log10(x)+b'); % 拟合函数的形式
fit1 = fit(x',y',f,'StartPoint',[x(1) y(1)]);
a = fit1.a; % a的值
b = fit1.b; % b的值
fdata = feval(fit1,x'); % 用拟合函数来计算y

figure
plot(x,y); hold on
plot(x,fdata','r'); hold off
legend('Ori data',' Fitting data');追问

能求出a,b值吗?

追答

老大,里面不是有a, b值么,我还做了注释!

追问

哦,知道了。你能尽量多加点注释吗,我是matlab菜鸟。

追答

哦,知道了,你还需要加什么注释么?

追问

以下两句没有注释,看不懂。
fit1 = fit(x',y',f,'StartPoint',[x(1) y(1)]);
legend('Ori data',' Fitting data');
再提问就得扣分了。。。
下面的程序跟你的出图一样,但好像简单些
clc;clear;
x=[500 550 600 650 700 750 800 850 900 950 1000];
y=[62.4 69.2 75.4 82.2 70.4 68.4 75.2 77.8 71.6 75.6 72.2];
plot(x,y);
x_log=log10(x);
A=polyfit(x_log,y,1)
hold on;
plot(x,A(1).*log10(x)+A(2),'r');

追答

fit(x',y',f,'StartPoint',[x(1) y(1)]) 的意思, 是生成一个拟合函数,用的数据是x, y, 注意x'是要将x写成一个n-by-1的向量,y也如此。所以里面是fit(x',y',...). f 是上面定义的拟合函数的形式。'StartPoint'是起始点,定义的起始点x(1),y(1).

legend('Ori data',' Fitting data'); 就是标注两条曲线,第一个是原始曲线,第二个是拟合后的曲线

另一个人用polyfit,这个只能用于多项式拟合。其余的都不行了,我的这个,什么形式的都可以

追问

最后一个问题,为什么要x,y都要转置成列向量?

追答

恩,这个是matlab 自带函数fit所要求的。 fit(x,y,f...)中的x, y必须是要列向量,否则会报错。

本回答被提问者采纳
相似回答