matlab函数拟合

2024-05-15 18:41

1. matlab函数拟合

简单的方法:首先定义x和y,然后cftool(x,y)(它是自带拟合工具箱)。这时你会得到一个含有数据点的界面。点击第二个按钮“fitting”——>“new fit”在"type of fit"中选择你想用的拟合方法(默认为多项式拟合),并在下面的大方框中选择次数等具体形式。——>"Apply"——>"save to workspace",三个选项中的第一个表示拟合结果的表达式。把它保存后,在主窗口的“workspace”中查看它就行了。
复杂一点的就是你自己编写插值公式。

matlab函数拟合

2. matlab拟合函数

曲线拟合的例题
 1、 关于y=f(x)有一些观测数据
     x=-2*pi:0.1*pi:2*pi,时
    相应的函数值为
     y =[ 0.0000  0.8726  1.3803  1.3876  1.0490  0.6667  0.4612
            0.4365  0.4293  0.2848 -0.0000 -0.2848 -0.4293 -0.4365
           -0.4612 -0.6667 -1.0490 -1.3876  -1.3803 -0.8726     0 
             0.8726  1.3803  1.3876  1.0490  0.6667  0.4612  0.4365  
             0.4293  0.2848  0.0000 -0.2848 -0.4293 -0.4365 -0.4612 
           -0.6667 -1.0490 -1.3876 -1.3803 -0.8726 -0.0000 ];  
 2、 通过plot(x,y)绘图
    x = -2*pi:0.1*pi:2*pi;
    y = [0.0000  0.8726  1.3803  1.3876  1.0490  0.6667  0.4612  ...
           0.4365  0.4293  0.2848 -0.0000 -0.2848 -0.4293 -0.4365 ...
          -0.4612 -0.6667 -1.0490 -1.3876  -1.3803 -0.8726     0   ...
           0.8726  1.3803  1.3876  1.0490  0.6667  0.4612  0.4365  ...
           0.4293  0.2848  0.0000 -0.2848 -0.4293 -0.4365 -0.4612  ...
          -0.6667 -1.0490 -1.3876 -1.3803 -0.8726 -0.0000];
     plot(x,y,'+')
     hold on
     plot(x,y,'g')
 3、观察图形,,发现很像sin,cos那样的周期振荡函数
    尝试选择拟合函数 f(x)=c1*sin(x)+c2*sin(2*x)+c3*sin(3*x)
    希望选择合适的c1,c2,c3, s.t. δ=∑(f(xi)-yi)^2达到最小。
    注意,这里的x,y 均是已知数构成的向量;c1,c2,c3才是待定的。 
    即 δ=∑(f(xi)-yi)^2=g(c1,c2,c3).
    拟合问题转化为 求min{δ=g(c1,c2,c3)}
 4、因为 δ=g(c1,c2,c3)是c1,c2,c3的元函数,所以可通过求偏导数
       δ'c1,δ'c2,δ'c3,并令
           δ'c1=0
           δ'c2=0           
           δ'c3=0,联立解出c1,c2,c3.
 5、使用Matlab求解
    第一步:建立m文件
function p=stu(c,x)
p=c(1)*sin(x)+c(2)*sin(2*x)+c(3)*sin(3*x);
    第二步:在工作区输入,c1,c2,c3的估计值,如
c=[1 1 1]
    第三步:调用
p=lsqcurvefit('stu',c,x,y)     
    第四步:绘图检验拟合函数与观测数据的接近程度
plot(x,y,'r+',x,p(1)*sin(x)+p(2)*sin(2*x)+p(3)*sin(3*x),'g')

3. 如何用matlab拟合函数?

在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
function g=zhidao_31(a,p) 
%其中G,D,n分别用a(1),a(2),a(3)代替 
G=a(1);
D=a(2);
n=a(3);
g=G*exp(-(D*log(4700./p))^n);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 


在Matlab下输入

p=[
759.9
1834.5
3064.7
4358.6
5695.4
7031.3
8348.0
9475.3];

g=[
6.108909907
12.86663816
18.1161568
23.69979432
28.37868993
32.08847637
34.242214
36.58519694];


[A,res]=lsqcurvefit('zhidao_31',ones(1,4),p,g); 
A 

%注意我这里没有MATLAB,你可以上网看一下lsqcurvefit的例子

如何用matlab拟合函数?

4. Matlab样条拟合函数

答案是可以得到具体表达式。
先运行sp=spaps(x,y,tol);
得到结果后运行
>>sp.coefs
得到每个多项式的系数向量,其实也就是多项式函数的具体表达式,相信你能看得出来。

5. 如何用matlab拟合这个函数

M = [ones(size(x)),exp(-x),x.*exp(-x)];
A = inv(M'*M)*M'*y

记得把x和y改成列向量

如何用matlab拟合这个函数

6. Matlab 函数拟合问题

在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
function y=nihe(a,x)
y=a(1)*(e^(a(2)*x)-e^(a(3)*x))     %其中a=[a(1),a(2),a(3)]
                                   %A、B、C分别用a(1),a(2),a(3)表示。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

在Matlab下面输入:
x={0.25,0.5,0.75,1,1.5,2,2.5 ,3,3.5,4,4.5,5,6,7,8,9,10,11,12,13,14,15,16} 
a=1;
b=2;
c=3;
y=nihe([a,b,c],x)
[A,res]=lsqcurvefit('nihe',ones(1,23),x,y); 
A


得到的结果: 
A = 
 1.0029    1.9451    2.9007 
跟a,b,c的值大致一样。 


以下是你的问题: 
你设好x,y后,在Matlab下输入: 
[A,res]=lsqcurvefit('nihe',ones(1,23),x,y);  
A 

就可以了。

7. matlab 函数拟合

clear all;clc
x=1940:1:1996;
x=x';
y=[-0.016655576,-1.020497955,0.017169964,0.554703712,0.596023121,-0.120634468,-1.52482222,0.464829952,0.560474809,-1.4670432,0.422761195,1.217460974,0.626207521,-0.480855885,-0.89578382,-0.160632441,-0.749835829,-1.311194214,1.586347214,0.527346626,0.220631213,0.580634109,-0.251140179,0.231573505,-0.04921873,-0.706294671,0.004742193,0.242011934,0.435841493,0.611978036,0.06467293,-0.208504853,-0.058353393,-0.238538448,-0.521458598,-0.028459852,0.486062691,0.284832859,-0.135216353,0.969707567,0.353067592,-0.31598282,-0.786987622,-0.342113681,0.460642652,0.078666352,-0.805211492,-0.89431641,1.402905025,0.269398263,0.082540636,-0.286023245,-0.471387156,-0.242563686,-0.896972212,0.295507787,-4.514914159];
y=y';
f=fittype('a*sin(b*x+c)','independent','x','coefficients',{'a','b','c'});
cfun=fit(x,y,f)
xi=1940:1:1996;
yi=cfun(xi);
plot(x,y,'r*',xi,yi,'b-')


自己改一下x,y的数据,直接运行即可!

matlab 函数拟合

8. matlab的函数拟合

在命令窗口输入cftool,这是函数拟合工具箱,里面有比较多的基本的拟合函数~