紧急,matlab上的对数函数数据拟合.y=algx+b

问题描述:

紧急,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.
1个回答 分类:数学 2014-10-01

问题解答:

我来补答
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必须是要列向量,否则会报错。
 
 
展开全文阅读
剩余:2000
下一页:fx的解析式