c语言用最小二乘法求二次拟合多项式

2020-11-25 13:26:08 字数 6379 阅读 2269

1楼:匿名用户

大四?《计算数学》,《数值分析>上有....

http://tieba.baidu.

***/f?ct=&tn=&rn=&pn=&lm=&sc=&kw=%be%f2%b0%ae%c1%aa%d0%c4%c9%e7&rs2=0&myselectvalue=1&word=%be%f2%b0%ae%c1%aa%d0%c4%c9%e7&tb=on

用最小二乘法求一次和二次拟合多项式的程序流程图

2楼:

要体现二乘原理直接用现函数解决

这是纯面向对象编程语言,拥有基于原型对象的模型。它体积不大,可以在小型便携式虚拟机上运行。

急~~~~~~!!!求解!用c语言编写最小二乘法求数据的拟合曲线~并做出图显示拟合效果!高分悬赏!

3楼:匿名用户

#include

#include

#include

#include

#define n 5//n个点

#define t 3 //t次拟合

#define w 1//权函数

#define precision 0.00001float pow_n(float a,int n)for(t=0;t=0;i--)

root[i]=temp/argu[i][i];}}void get_y(float trans_a[n],float x_y[2],float y,int n)

{int i,j;

float temp;

for(i=0;i的%d次拟合的多项式系数为:\n",n,t);

for(i=0;i

2007-4-19 19:23:57

一级(初级)

user1

10040389872

5478010

1526752

jiangxc2004

02007-4-19 19:26:11

一级(初级)

user1

10040390406

5478010

1526752

jiangxc2004

0

这样就可以直接调用process()函数了!

二次拟合的话就把宏 t 成2;

拟合点的数目 n 也可以修改!

也可以去到注释的部分进行返回值的调用!

4楼:匿名用户

#include

#include

void guass(int n,float array[10]){float s,u;

int i,j,k,a,x,y;

for(i=0;i!=i)

{for(j=i;j=0;x--)

{s=0;

for(y=x+1;y后我会帮你制作

曲线拟合 最小二乘法 c语言程序

5楼:匿名用户

去翻一下,计算方法或者数值分析的书吧。有公式,你按那公式求就可以了。

一楼用的是列主元消去法(跟高斯消去法差不多,就多了一个选主元(绝对值最大))

对于解ax=b,平方根法要求a是对称且正定矩阵由于平方根法里面要计算根号,计算量就比较大,而且工程中的a不一定都是正定的。所以在工程中采用改进的平方根法(它解出来的解与真解有一点误差,但是相当相近),也就是说a只要对称就行了。

6楼:匿名用户

#include

#include

void guass(int n,float array[10])for(i=0;i

}int main()

guass(n,array);

return 0;}

最小二乘法三次多项式曲线拟合 算法 c++ 实现,该怎么处理

7楼:匿名用户

/******************************************

//参考《常用算法程序集(c语言描述第三版)》

//最小二乘法

//x[n]y[n]已知输入

//n输入点个数

//a[m]返回m-1次拟合多项式的m个系数//m拟合多项式的项数,即拟合多项式的最高次为m-1//dt[3]dt[0]返回拟合多项式与各数据点误差的平方和,dt[1]返回拟合多项式与各数据点误差的绝对值之和dt[2]返回拟合多项式与各数据点误差的绝对值的最大值////拟合多项式的输出

//y(x)=a0+a1(x-x)+a2(x-x)^2+……am(x-x)^m

//其中x为已知点x的平均值

******************************************/

#include"math.h"

voidpir1(x,y,n,a,m,dt)intn,m;

doublex,y,a,dt;

c=c/d1;p=p/d1;

a[0]=c*b[0];

if(m>1)

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=2;j<=m-1;j++)c=c/d2;p=g/d2;q=d2/d1;

d1=d2;

a[j]=c*s[j];t[j]=s[j];

for(k=j-1;k>=0;k--)}dt[0]=0.0;dt[1]=0.0;dt[2]=0.0;

for(i=0;i<=n-1;i++)return;}

帮我求下用最小二乘法拟合一个多项式

8楼:匿名用户

warnings during fitting:

equation is badly conditioned. remove repeated data points

or try centering and scaling.

这是因为你的数据点不好。

此外,你用的拟合函数的阶数很高……如果换成二阶就可以使用polyfit()了。

下面是用curve fitting tool的拟合结果:

linear model poly5:

f(x) = p1*x^5 + p2*x^4 + p3*x^3 + p4*x^2 + p5*x + p6

coefficients (with 95% confidence bounds):

p1 = 1.739e-14 (2.242e-15, 3.255e-14)

p2 = -1.951e-10 (-3.468e-10, -4.337e-11)

p3 = 8.54e-07 (2.646e-07, 1.443e-06)

p4 = -0.001825 (-0.002932, -0.0007169)

p5 = 1.88 (0.8761, 2.884)

p6 = -431.8 (-781.9, -81.76)

goodness of fit:

sse: 1.349

r-square: 0.9991

adjusted r-square: 0.9975

rmse: 0.6706

求c或c++语言编写的用最小二乘法进行曲线拟合

9楼:匿名用户

你的近似解析表达式为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

#include

#include

#include

**ooth(double *x,double *y,double *a,int n,int m,double *dt1,double *dt2,double *dt3);

void main()

y = (double *)calloc(n,sizeof(double));

if(y == null)

a = (double *)calloc(n,sizeof(double));

if(a == null)

for(i=1;i<=n;i++)

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值是拟合已知值*/

**ooth(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); /*释放存储空间*/

} **ooth(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; /*实型变量,输出参数,拟合多项式与数据点偏差的绝对值最大值*/

t = (double *)calloc(n,sizeof(double));

if(t == null)

b = (double *)calloc(n,sizeof(double));

if(b == null)

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++)

c=c/d1;

p=p/d1;

a[0]=c*b[0];

if(m>1)

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++)

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--) }

*dt1=0;

*dt2=0;

*dt3=0;

for(i=1;i<=n;i++)

/*释放存储空间*/

free(s);

free(t);

free(b);

return(1);}

matlab编程:最小二乘法拟合多项式,题目如图

1楼 风儿lamp沙儿 最小二乘法拟合程序如下 x 1 8 y 2 3 6 7 5 3 2 p polyfit x y 2 y1 polyval p x plot x y1 matlab用最小二乘法直线拟合此题 要写出完整的程序过程,急用,求高手!!! 2楼 匿名用户 写在前面 喵。。也就我这么好心...