matlab非线性拟合问题
clear;clc;
A=' k d b a c';
t=0:17;
x=[26.41 26.94 27.46 27.99 28.51 29.04 30.48 31.91 33.35 34.78 36.22 37.66 39.09 40.53 41.76 42.99 43.90 44.94];
opt=optimset('display','off');
f=@(p,t)(p(1)./(p(2)+p(3)*exp(-p(4)*t))).^(1/p(5));
plot(t,x,'ko');hold on;
p=fminsearch(@(p)sum((f(p,t)-x).^2),ones(1,5),opt);
cc=corrcoef(t,f(p,t));
disp('estimated by fminsearch:');disp(A);disp(p);disp('correlation coefficient is:');disp(cc(2));
h=ezplot(@(t)f(p,t),[0,17]);
set(h,'linestyle',':','color','r')
p=lsqcurvefit(f,ones(1,5),t,x,[],[],opt);
cc=corrcoef(t,f(p,t));
disp('estimated by lsqcurvefit:');disp(A);disp(p);disp('correlation coefficient is:');disp(cc(2));
ezplot(@(t)f(p,t),[0,17]);
legend('original data','estimated by fminsearch','estimated by lsqcurvefit','location','southeast')
title('curve fitting')
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function F=zhidao_31(a,x)
%其中K,C,Z,B分别用a(1),a(2),a(3),a(4)代替
%X,Y,F0分别用x(:,1),x(:,2),x(:,3)代替
F=a(1)*x(:,1)+a(2)*x(:,2)+a(3)*(1-exp(-a(4)*x(:,2).^2))-x(:,3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
以下是测试:在Matlab下面输入:
%先由已经的x,y,F0和已知的k,c,z,b来产生F,然后通过x,y,F0,F
%验证一下:能否得到我们刚才所选用的参数k,c,z,b
%下面以随机数为例
x=rand(100,1);
y=rand(100,1);
F0=rand(100,1);
k=1;
c=1.5;
z=2.5;
b=3.5;
X=[x,y,F0];
F=zhidao_31([k,c,z,b],X);
[A,res]=lsqcurvefit('zhidao_31',ones(1,4),X,F);
A
得到的结果:
A =
1.0033 1.4446 2.5520 3.4853
跟k,c,z,b的值大致一样。
你的问题:
你设好x,y,F0,F后,在Matlab下输入:
[A,res]=lsqcurvefit('zhidao_31',ones(1,4),[x,y,F0],F); %注意你的x,y可能是大写的。
A
就可以了。
y=[60448.88 60311.43 60248.03 60065.11 59999.69 59874.06 59657.02 59555.51 59509.94 59433.77 59322.85 59223.17 59142.66 58927.69 58758.61 58534.01 58409.58 58185.31 58144.52 57983.36 ];
F=@(c,h)(1/3)*((150^2*3.1416-150^2*(1-(h+220*c(1)-150)*(1-c(2))/150)+(h+200*c(1)-150)*(1-c(2))*sqrt(150^2-((h+200*c(1)-150)^2)*((1-c(2))^2)))*(h/c(1)+200)-(150^2*3.1416-150^2*(1-(h-600*c(1)-150)*(1-
c(2))/150)+(h-600*c(1)-150)*(1-c(2))*sqrt(150^2-((h-600*c(1)-150)^2)*((1-c(2))^2)))*(h/c(1)-600))+3.1416/2*(150^2*(h+200*c(1)-150)-((h+200*c(1)-150)^3)/3+2/3*150^3)+3.1416/2*(150^2*(h-600*c(1)-150)-((h-600*c(1)-150)^3)/3+2/3*150^3);
c=lsqcurvefit(F,[1 1],h,y)
应该是向量乘除的问题,应该在乘除后面加点号,例如:h.^2,h./3,h.*(h+1)等等,楼主自己改一下F函数。
关于matlab非线性拟合的问题
在分析数据点时,我们使用了MATLAB进行非线性拟合。数据集包含x和y两个向量,其中x代表一系列递减数值,y则表示与x相对应的数值,这些数值随x的减少而呈现出一定的规律性变化。为了更好地理解这些数值之间的关系,我们对数据进行了可视化处理,通过绘图(plot)功能直观展示了x和y之间的对应关系。在进行非...
matlab 非线性拟合问题
x=[30 60 90 120 150]';Q=[446.86 765.49 879.81 759.01 434.15]';ft_=fittype('A*sin((x+a)*pi\/180)+B','dependent',{'Q'},'independent',{'x'},'coefficients',{'A','a','B'});ff=fit(x,Q,ft_)plot(x,Q,'b*');hold on;x=-30:390;Q1=ff(x);plot(...
matlab 非线性拟合求参数
在进行非线性拟合时,我们首先简化了原始公式,将其分解为便于计算的几个部分。假设公式中的常数项可以作为一个整体参数,我们将其定义为C,这样可以简化后续的计算。我们创建了一个名为shiyan1的m文件,代码如下:在m文件中,我们定义了xdata和ydata两个变量,分别代表自变量和因变量的数据集。然后,我们...
各位大侠,用MATLAB做非线性拟合时,RMSE越小越好,但多大时拟合的效果好...
在使用MATLAB进行非线性拟合时,RMSE(均方根误差)是一个重要的评价指标,反映了模型预测值与实际值之间的差距。通常来说,RMSE越小,模型的预测准确性越高。然而,RMSE的具体数值并没有一个固定的“好”标准值,它依赖于具体的应用场景和数据特性。例如,在气象预测中,RMSE可能需要达到0.5度以下才能...
matlab非线性拟合问题
legend('原始曲线','拟合曲线','Location','southeast')[x,renorm]=nlinfit(xdata,ydata,@curvefun,x0); %确定待定系数 disp('拟合系数')disp(x);realx=real(x);disp('实拟合系数')disp(realx);figure;plot(xdata,ydata)yfit=curvefun(realx,xdata);hold on;plot(xdata,yfit,'r')grid on...
关于matlab非线性拟合的问题?急急!求高手解答
求解方法:>> x=[1,2,3,4,5,6,7];y=[0.0183 0.0043 0.0038 0.0087 0.0211 0.0521 0.1360];>> fun=inline('a(1)*(1+(a(2)^2)*exp(x.*a(3))+cos(x)).*sqrt((1-(a(2)^2))*x).\/x.^2','a','x');>> b=rand(1,3);a=lsqcurvefit(fun...
关于matlab非线性拟合的问题
legend('原始曲线','拟合曲线','Location','southeast')[x,renorm]=nlinfit(xdata,ydata,@curvefun,x0); %确定待定系数 disp('拟合系数')disp(x);realx=real(x);disp('实拟合系数')disp(realx);figure;plot(xdata,ydata)yfit=curvefun(realx,xdata);hold on;plot(xdata,yfit,'r')grid on...
Matlab不确定度验证及非线性拟合的问题
现在这个运行出来每次都不一样,有的离散度只有0.11左右,大部分是0.2左右的;由于生成的y最后基本都等于11多了,所以前几组含显著小于11的数的离散值就偏大,而后面几组基本从头到尾都等于11多,就容易偏小。b=polyfit(x(i,:),y1(i,:),6); %这里拟合的阶数越高,拟合曲线越弯来拐去的...
matlab多元函数非线性拟合问题
程序见下,几点说明:1、你的数据有问题:x1、x2都是13个点,而y是12个点。我暂时按照舍去x最后那个点处理。2、从现在的情况看,效果不好,这和你的数据是否适合所给拟合公式有关。尤其y第5个点感觉比较怪异。3、拟合问题和初值关系很大,如果你能知道拟合参数的大概范围会对尽快得到理想的结果有...
算例:基于Matlab的非线性拟合
Matlab内置非线性拟合函数lsqcurvefit,以下算例将展示一元和多元非线性拟合的实践。算例1:一元非线性拟合 以x和y数据进行非线性拟合,x数据位于第一列,y数据位于第二列。拟合目标方程式为:[公式]其中a和b是待求解的系数。具体步骤通过以下代码实现:算例2:多元非线性拟合 算例2展示多元非线性拟合过程,...