matlab用最小二乘法求一形如Y=ct^m(c和m为待定系数)的多项式,使之与下列数据相拟合,数据如下(19,19.0)(25,32.3)(31,49.0)(38,73.3)(44,97.8)

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 05:37:56
matlab用最小二乘法求一形如Y=ct^m(c和m为待定系数)的多项式,使之与下列数据相拟合,数据如下(19,19.0)(25,32.3)(31,49.0)(38,73.3)(44,97.8)

matlab用最小二乘法求一形如Y=ct^m(c和m为待定系数)的多项式,使之与下列数据相拟合,数据如下(19,19.0)(25,32.3)(31,49.0)(38,73.3)(44,97.8)
matlab用最小二乘法求一形如Y=ct^m(c和m为待定系数)的多项式,使之与下列数据相拟合,
数据如下(19,19.0)(25,32.3)(31,49.0)(38,73.3)(44,97.8)

matlab用最小二乘法求一形如Y=ct^m(c和m为待定系数)的多项式,使之与下列数据相拟合,数据如下(19,19.0)(25,32.3)(31,49.0)(38,73.3)(44,97.8)
程序:
clear;
clc;
t = [19 25 31 38 44];
y = [19 32.3 49 73.8 97.8];
y = y';
t = t';
st_ = [0.5 0.5]; %%%% 起始点
ft_ = fittype('c*t^m' ,...%%%% 公式
'dependent',{'y'},'independent',{'t'},...%%% 变量和自变量
'coefficients',{'c','m'}); %%% 系数
[cf,good]= fit(t,y,ft_ ,'Startpoint',st_)
h_ = plot(cf,'fit',0.95);
legend off; % turn off legend from plot method call
set(h_(1),'Color',[1 0 0],...
'LineStyle','-','LineWidth',2,...
'Marker','none','MarkerSize',6);
hold on,plot(t,y,'*')
结果;
cf =
General model:
cf(t) = c*t^m
Coefficients (with 95% confidence bounds):
c = 0.0588 (0.05147,0.06612)
m = 1.96 (1.926,1.994)
good =
sse:0.2267
rsquare:0.9999
dfe:3
adjrsquare:0.9999
rmse:0.2749
贴图:
这个就算了,避免被拉去审,效果很好,可以自己运行一下看看

你的近似解析表达式为y=at+bt^2+ct^2
是不是想写成为y=at+bt^2+ct^3
但是实际拟合出来的表达式为y=a[3]+a[2]t+a[1]t^2+a[0]t^3会有个常数项的。
简单的讲,所谓拟合是指已知某函数的若干离散函数值,通过调整该函数中若干待定系数f(λ1, λ2,…,λ3), 使得该函数与已知点集的差别(最小二乘意义)最小。如果待定函数是线性,就...

全部展开

你的近似解析表达式为y=at+bt^2+ct^2
是不是想写成为y=at+bt^2+ct^3
但是实际拟合出来的表达式为y=a[3]+a[2]t+a[1]t^2+a[0]t^3会有个常数项的。
简单的讲,所谓拟合是指已知某函数的若干离散函数值,通过调整该函数中若干待定系数f(λ1, λ2,…,λ3), 使得该函数与已知点集的差别(最小二乘意义)最小。如果待定函数是线性,就叫线性拟合或者线性回归(主要在统计中),否则叫作非线性拟合或者非线性回归。表达式也可以是分段函数,这种情况下叫作样条拟合。
曲线拟合:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
Smooth(double *x,double *y,double *a,int n,int m,double *dt1,double *dt2,double *dt3);
void main()
{
int i ,n ,m ;
double *x,*y,*a,dt1,dt2,dt3,b;
n = 12;// 12个样点
m = 4; //3次多项式拟合
b = 0; //x的初值为0
/*分别为x,y,a分配存贮空间*/
x = (double *)calloc(n,sizeof(double));
if(x == NULL)
{
printf("内存分配失败\n");
exit (0);
}
y = (double *)calloc(n,sizeof(double));
if(y == NULL)
{
printf("内存分配失败\n");
exit (0);
}
a = (double *)calloc(n,sizeof(double));
if(a == NULL)
{
printf("内存分配失败\n");
exit (0);
}
for(i=1;i<=n;i++)
{
x[i-1]=b+(i-1)*5;
/*每隔5取一个点,这样连续取12个点*/
}
y[0]=0;
y[1]=1.27;
y[2]=2.16;
y[3]=2.86;
y[4]=3.44;
y[5]=3.87;
y[6]=4.15;
y[7]=4.37;
y[8]=4.51;
y[9]=4.58;
y[10]=4.02;
y[11]=4.64;
/*x[i-1]点对应的y值是拟合已知值*/

Smooth(x,y,a,n,m,&dt1,&dt2,&dt3); /*调用拟合函数*/
for(i=1;i<=m;i++)
printf("a[%d] = %.10f\n",(i-1),a[i-1]);
printf("拟合多项式与数据点偏差的平方和为:\n");
printf("%.10e\n",dt1);
printf("拟合多项式与数据点偏差的绝对值之和为:\n");
printf("%.10e\n",dt2);
printf("拟合多项式与数据点偏差的绝对值最大值为:\n");
printf("%.10e\n",dt3);
free(x); /*释放存储空间*/
free(y); /*释放存储空间*/
free(a); /*释放存储空间*/
}
Smooth(double *x,double *y,double *a,int n,int m,double *dt1,double *dt2,double *dt3)//(x,y,a,n,m,dt1,dt2,dt3 )
//double *x; /*实型一维数组,输入参数,存放节点的xi值*/
//double *y; /*实型一维数组,输入参数,存放节点的yi值*/
//double *a; /*双精度实型一维数组,长度为m。返回m一1次拟合多项式的m个系数*/
//int n; /*整型变量,输入参数,给定数据点的个数*/
//int m; /*整型变量,输入参数,拟合多项式的项数*/
//double *dt1; /*实型变量,输出参数,拟合多项式与数据点偏差的平方和*/
//double *dt2; /*实型变量,输出参数,拟合多项式与数据点偏差的绝对值之和*/
//double *dt3; /*实型变量,输出参数,拟合多项式与数据点偏差的绝对值最大值*/
{
int i ,j ,k ;
double *s,*t,*b,z,d1,p,c,d2,g,q,dt;
/*分别为s ,t ,b分配存贮空间*/
s = (double *)calloc(n,sizeof(double));
if(s == NULL)
{
printf("内存分配失败\n");
exit (0);
}
t = (double *)calloc(n,sizeof(double));
if(t == NULL)
{
printf("内存分配失败\n");
exit (0);
}
b = (double *)calloc(n,sizeof(double));
if(b == NULL)
{
printf("内存分配失败\n");
exit (0);
}
z = 0;
for(i=1;i<=n;i++)
z=z+x[i-1]/n; /*z为各个x的平均值*/
b[0]=1;
d1=n;
p=0;
c=0;
for(i=1;i<=n;i++)
{
p=p+x[i-1]-z;
c=c+y[i-1];
}
c=c/d1;
p=p/d1;
a[0]=c*b[0];
if(m>1)
{
t[1]=1;
t[0]=-p;
d2=0;
c=0;
g=0;
for(i=1;i<=n;i++)
{
q=x[i-1]-z-p;
d2=d2+q*q;
c=y[i-1]*q+c;
g=(x[i-1]-z)*q*q+g;
}
c=c/d2;
p=g/d2;
q=d2/d1;
d1=d2;
a[1]=c*t[1];
a[0]=c*t[0]+a[0];
}
for(j=3;j<=m;j++)
{
s[j-1]=t[j-2];
s[j-2]=-p*t[j-2]+t[j-3];
if(j>=4)
for(k=j-2;k>=2;k--)
s[k-1]=-p*t[k-1]+t[k-2]-q*b[k-1];
s[0]=-p*t[0]-q*b[0];
d2=0;
c=0;
g=0;
for(i=1;i<=n;i++)
{
q=s[j-1];
for(k=j-1;k>=1;k--)
q=q*(x[i-1]-z)+s[k-1];
d2=d2+q*q;
c=y[i-1]*q+c;
g=(x[i-1]-z)*q*q+g;
}
c=c/d2;
p=g/d2;
q=d2/d1;
d1=d2;
a[j-1]=c*s[j-1];
t[j-1]=s[j-1];
for(k=j-1;k>=1;k--)
{
a[k-1]=c*s[k-1]+a[k-1];
b[k-1]=t[k-1];
t[k-1]=s[k-1];
}
}
*dt1=0;
*dt2=0;
*dt3=0;
for(i=1;i<=n;i++)
{
q=a[m-1];
for(k=m-1;k>=1;k--)
q=q*(x[i-1]-z)+a[k-1];
dt=q-y[i-1];
if(fabs(dt)>*dt3)
*dt3=fabs(dt);
*dt1=*dt1+dt*dt;
*dt2=*dt2+fabs(dt);
}
/*释放存储空间*/
free(s);
free(t);
free(b);
return(1);
}

收起

matlab用最小二乘法求一形如Y=ct^m(c和m为待定系数)的多项式,使之与下列数据相拟合,数据如下(19,19.0)(25,32.3)(31,49.0)(38,73.3)(44,97.8) 为什么运行不成功?t=[19 25 31 38 44];y=[19 32.3 49 73.8 97.8];y=y';t=t';st_=[ matlab用最小二乘法求一形如Y=ct^m(c和m为待定系数)的多项式,使之与下列数据相拟合,数据如下(19,19.0)(25,32.3)(31,49.0)(38,73.3)(44,97.8) 用MATLAB 最小二乘法拟合指数曲线最小二乘法拟合指数函数y=cx^nx=[2448,4976,7464,12440,24880,49760]y=[2.010 ,3.073,3.91,5.375,8.336,12.693] MATLAB 最小二乘法拟合曲线MATLAB编程用最小二乘法拟合曲线,使曲线成为y与x的一个函数关系式x:27560000,55120000,82680000,88192000,110240000,137800000y:1743170000,1894750000,2053220000,2067000000,2239250000,2411500000y=a1+ 如何用matlab进行拟合,用最小二乘法? matlab中最小二乘法拟合几个点t=0:5:55;y=[0 1.27 2.16 2.86 3.44 3.87 4.15 4.37 4.51 4.58 4.62 4.64];拟合为 y=at+bt^2+ct^3 (没有常数项),求abc让我看看代码吧.能不能用polyfit求解啊? matlab曲线拟合,曲线逼近,最小二乘法假设函数为x^2+y^2+d x+e y+f=0;并且已知X Y,用matlab怎么写来求出d,e,f, matlab 用最小二乘法建立模型问题用最小二乘法建立模型y=a+bx1+cx2 利用matlab软件 程序代码如下x1=[0.5,1.2,1.5,1.8,2,2.2,2.5,3];x2=[1,1.5,2,3,3.5,5,6.5,8];y=[1,2.5,3,4.5,5,6.5,7.5,9];Y=y(:);H=[x1(:) x2(:) ones(size(x1(:)))] 最小二乘法的matlab程序 MATLAB的最小二乘法t=x*cos(w)-y*sin(w)-au=x*sin(w)+ycos(w)-b已知 A=(t,n)=[1 0; 1 1; 2 1];B=(x,y)=[1.001 -1.002; 0.001 -1.000; 0.001 0.002];用MATLAB利用最小二乘法求 w和a b;写出具体的实现代码 MATLAB 最小二乘法用最小二乘法求AX=b的解,证明其中用到的定理(例如:A'AX=A'b恒有解) 最小二乘法曲线拟合公式y=axx=[0.174 0.305 0.424 0.57 0.639 0.851 1.017];y=[9.33 1.77 2.60 3.43 4.27 5.10 5.93];x,y的数据已知,x,y的关系是一定满足y=ax求用最小二乘法拟合曲线得到a的数值!用MATLAB变成来解决, 用MATLAB计算—最小二乘法及均方误差这两个题用MATLAB怎么做,并作图?1.实验数据xi 19 25 31 38 44yi 19.0 32.3 49.0 73.3 97.8用最小二乘法求型如y=a+bx^2的经验公式及均方误差.2.化学反应中由实验得分解 matlab的问题 最小二乘法拟合曲线我有一组数据x=[145/125 134.3/125 126.25/125 117/125 107.2/125 89.25/125]y=[1.94 1.299 0.875 0.451 0.311 0.989]怎么用matlab最小二乘法拟合一条曲线,并在图像中显示出来,我已经能 MATLAB中5元一次方程:a*x+b*y+c*z+d*u+e*v=f.已知系数矩阵abcde和列向量f,用最小二乘法拟合求解方程组现有从ABAQUS软件中得到的18组数据,要在Matlab中用最小二乘法拟合求值,不是一般的求解线性方程 最小二乘法用matlab怎么实现(求具体程序) 怎样用matlab 用最小二乘法 取一个余弦脉冲的包络 matlab用最小二乘法计算视场大小,并优化结构参数