c语言用最小二乘法拟合平面

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

#includestdio.h

#includemath.h

void Guass(int n,float Array[][10])

{

float s,u;

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

for(i=0;in-1;i++)

{

s=Array[i][i];

k=i;

for(a=i+1;an;a++)

{

if(fabs(s) fabs(Array[a][i]))

{

s=Array[a][i];

k=a;

}

}

if(k!=i)

{

for(j=i;jn+1;j++)

{

u=Array[i][j];Array[i][j]=Array[k][j];Array[k][j]=u;

}

}

for(x=i+1;xn;x++)

{

u=Array[x][i]/s;

for(y=i;yn+1;y++)

{

Array[x][y]=Array[x][y]-u*Array[i][y];

}

}

}

for(x=n-1;x=0;x–)

{

s=0;

for(y=x+1;yn;y++)

s=s+Array[x][y]*Array[y][n];

Array[x][n]=(Array[x][n]-s)/(Array[x][x]);//得到结果

}

for(i=0;in;i++)printf(“%f “,Array[i][n]);printf(“\n”);

}

int main()

{

int n,i,j;

float Array[10][10];

scanf(“%d”,n);

for(i=0;in;i++)

{

for(j=0;jn+1;j++)

scanf(“%f”,Array[i][j]);

}

Guass(n,Array);

return 0;

}

你的串号我已经记下,采纳后我会帮你制作

求最小二乘曲线的拟合的C语言程序

曲线拟合的最小二乘法

如有实验数据如下

求x=55处的近似值 并画出图形

x 0 10 20 30 40 50 60 70 80 90

y 68 67.1 66.4 65.6 64.6 61.8 61.0 60.8 60.4 60

#include “stdio.h”

#include “graphics.h”

double s(double x[],double y[],double x1)

{

double a,b,tmp1=0,tmp2=0,tmp3=0,tmp4=0,result;

int i=0;

for(;i10;i++)

{

tmp1+=x[i]*x[i];

tmp2+=y[i];

tmp3+=x[i];

tmp4+=x[i]*y[i];

}

b=(tmp1*tmp2-tmp3*tmp4)/(10*tmp1-tmp3*tmp3);

a=(10*tmp4-tmp2*tmp3)/(10*tmp1-tmp3*tmp3);

result=a*x1+b;

return result;

}

void hzbz(int x,int y)

{

int i,j;

line(0,y,1024,y);

moveto(x-200,y);

j=x-200;

for(i=0;i100;i++)

{

if(i%5!=0)

lineto(j,y-5);

else

lineto(j,y-8);

j=j+10;

moveto(j,y);

}

line(x,768,x,0);

moveto(x,y+200);

j=y+640;

for(i=0;i300;i++)

{

if(i%5!=0)

lineto(x+5,j);

else

lineto(x+8,j);

j=j-10;

moveto(x,j);

}

line(x,0,x-8,6);

line(x,0,x+8,6);

line(640,y,634,y-8);

line(640,y,634,y+8);

}

void main()

{

double x[]={0,10,20,30,40,50,60,70,80,90};

double y[]={68,67.1,66.4,65.6,64.6,61.8,61.0,60.8,60.4,60};

int graphdriver=DETECT,graphmode;

int i;

printf(“x=55\ny=%lf\n”,s(x,y,55));

getch();

initgraph(graphdriver,graphmode, “”);

setbkcolor(BLUE);

hzbz(200,200);

moveto(200,200);

for(i=0;i200;i++)

lineto(i+200,-s(x,y,i)+200);

getch();

closegraph();

}

c语言用最小二乘法拟合平面

最小二乘法平面方程拟合计算 高手们 给个详细的计算方法

解:

设有n个数据点Pi(xi, yi, zi)。

假设平面方程为:a*x+b*y+c*z+d=0,其中a、b、c、d为待定系数a、b、c不能同时为0。

显然,a*x+b*y+c*z+d=0与

k*a*x+k*b*y+k*c*z+k*d=0(k≠0)

表示同一个平面。故,如d不为0,可通过把方程两边同除以d,把常数项化为1;但d=0时,情况稍微复杂一点。

现在说明大致思路,为讨论方便,开始时暂不假设d=1或0。

设拟合平面的方程为∏:a*x+b*y+c*z+d=0。

数据点Pi到平面a*x+b*y+c*z+d=0的距离设为di,

则di^2=(a*xi+b*yi+c*zi+d)^2/(a^2+b^2+c^2),

令L=∑di^2 (i=1, … , n),为目标函数,现欲使L最小。

L可以看成是关于(a, b, c, d)的函数((xi, yi, zi)均已知),

L取最小值的一个必要(非充分)条件是:

∂L/∂a=0, ∂L/∂b=0, ∂L/∂c=0, ∂L/∂d=0,

∂L/∂a=∑2*xi*(a*xi+b*yi+c*zi+d)/(a^2+b^2+c^2) (i=1, … , n)

=A1*a+B1*b+C1*c+D1*d,

其中,

A1=2/(a^2+b^2+c^2)*(∑xi^2)(i=1, … , n),

B1=2/(a^2+b^2+c^2)*(∑xi*yi)(i=1, … , n),

C1=2/(a^2+b^2+c^2)*(∑xi*zi)(i=1, … , n),

D1=2/(a^2+b^2+c^2)*(∑xi)(i=1, … , n),

同理,

∂L/∂b=A2*a+B2*b+C2*c+D2*d,

∂L/∂c=A3*a+B3*b+C3*c+D3*d,

其中,

A2=2/(a^2+b^2+c^2)*(∑yi*xi)(i=1, … , n),

B2=2/(a^2+b^2+c^2)*(∑yi^2)(i=1, … , n),

C2=2/(a^2+b^2+c^2)*(∑yi*zi)(i=1, … , n),

D2=2/(a^2+b^2+c^2)*(∑yi)(i=1, … , n),

A3=2/(a^2+b^2+c^2)*(∑zi*xi)(i=1, … , n),

B3=2/(a^2+b^2+c^2)*(∑zi*yi)(i=1, … , n),

C3=2/(a^2+b^2+c^2)*(∑zi^2)(i=1, … , n),

D3=2/(a^2+b^2+c^2)*(∑zi)(i=1, … , n),

∂L/∂d=∑2*(a*xi+b*yi+c*zi+d)/(a^2+b^2+c^2) (i=1, … , n)

=D1*a+D2*b+D3*c+D4*d,

其中,D4=2n/(a^2+b^2+c^2)。

于是有方程组:

A1*a+B1*b+C1*c+D1*d=0,

A2*a+B2*b+C2*c+D2*d=0,

A3*a+B3*b+C3*c+D3*d=0,

D1*a+D2*b+D3*c+D4*d=0,

解此方程组即可。具体如何解,可参考计算方法的书,上面有详细说明。

数值方法解线性方程组最好不要用行列式来算。

在如下网址有一篇介绍文档

其中第一步就有遗漏,而且后面还在用行列式来计算,不是太好。

用C语言编写最小二乘法线性拟合

首先你要知道最小二乘法的公式,然后使用数组实现。比如定义数组double x[10]代表十个横坐标,double y[10]代表纵坐标,然后套公式用循环计算

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月26日 13:42:35
下一篇 2024年3月26日 13:54:02

相关推荐

  • excel中怎么使用乘法,excel中怎么使用乘法计算

    Excel表格如何使用乘法函数公式 1、首先打开excel表格,选中计算乘积的单元格。然后在单元格输入图片中的函数,注意:图片函数中的“C3”和“D3”是两个相乘数据的位置。 2、方法利用乘号“*”来实现两个数值的相乘运算。例如:在单元格A1中输入“30”,B1中输入“10”,在C1单位格中输入公式“=A1*B1”,回车,得到结果“300”。 3、打开exc…

    2024年5月17日
    5900
  • c语言自定义乘法表,c语言怎么编写乘法

    编一个C语言程序:做一个九九乘法表 1、首先打开VC++0软件,点击左上角的file,然后选择新建,这里我们新建一个控制台应 用程序,并输入工程名。点击确定后,提示问你创建什么工程,这么我们选择”一个空工程“,然后点击确定。 2、打开CodeBlocks,新建一个空白文件。输入头文件和主函数定义两个变量,因为9*9乘法表是两数相称来一步步进行的,所以需要定义…

    2024年5月17日
    3500
  • 最小二乘c语言实现,c语言找最小数

    哪位大神可以用C语言编个程序,实现用最小二乘法,求回归线方程(暂定所… 一元线性回归的C语言程序是:利用最小二乘法来估计线性回归方程的参数,然后用这些参数来预测因变量的值1。 知道“最小二乘法”吧,怎么用c语言来写这样一个程序,就是输入几组数据,回车运行后输出直线的两个参数。 最小二乘法常用于根据实测数据求线性方程的最近似解。 λ3), 使得该函…

    2024年5月17日
    4200
  • 乘法表用c语言,乘法用c语言怎么表示

    用c语言编写9*9乘法口诀表(以直角三角形形式输出) 九九乘法表共9行9列,重点考察for循环的掌握情况。下面给出了输出完整乘法表、右上、右下、左上、左下乘法表的代码。 首先打开VC++0软件,点击左上角的file,然后选择新建,这里我们新建一个控制台应 用程序,并输入工程名。点击确定后,提示问你创建什么工程,这么我们选择”一个空工程“,然后点击确定。 打开…

    2024年5月17日
    6500
  • java乘号源码,java里乘法怎么写

    求助java中如何在控制台输入乘号 java的Runtime.getRuntime().exec(commandText)可以调用执行cmd指令。cmd /c dir 是执行完dir命令后关闭命令窗口。cmd /k dir 是执行完dir命令后不关闭命令窗口。 方法/步骤 首先我们创建一个Test类并编写main方法,在main方法中测试java的控制台输入…

    2024年5月16日
    3500
  • c语言乘法如何运算法则,c语言乘法怎么写

    c语言二维数组乘法和加法怎么算的?请举例说明,顺便说说使用条件吧。谢… 1、您可以通过 tokens= 一行指定最多 26 个符号,只要不试图说明一个高于字母 z 或Z 的变量。请记住,FOR 变量名分大小写,是通用的;而且,同时不能有 52 个以上都在使用中。 2、比如在数学这一方面,举个例子说明:125×30=3750。用简便的方法就是125…

    2024年5月16日
    5100
  • excel中函数,excel中函数乘法是哪个

    EXCEL最常用的函数有哪些? excel最常用的八个函数分别是:求和Sum、最小值、最大值、平均数;计算数值个数、输出随机数、条件函数、四舍五入。 、COUNTIF函数 主要功能:统计某个单元格区域中符合指定条件的单元格数目。1IF函数 主要功能:根据对指定条件的逻辑判断的真假结果,返回相对应的内容。1COLUMN函数 主要功能:显示所引用单元格的列标号值…

    2024年5月14日
    4400
  • java数组引用,java数组引用可以用乘法吗

    Java数组有哪些用法 1、二维数组:int num[][]=new int[3][];这里定义的是3行的二维数组,列数可以逐个定义,也就是每行的列数可以不相同。但后面定义的列数的时候要用NEW来定义。 2、java中的ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本。它提供了如下一些好处:动态的增加和减少元素实现了ICo…

    2024年5月13日
    4200
  • c语言乘法编程,c语言乘法运算程序怎么写

    如何用C语言编程序:九九乘法表 1、九九乘法表共9行9列,重点考察for循环的掌握情况。下面给出了输出完整乘法表、右上、右下、左上、左下乘法表的代码。 2、首先使用vs2017新建一个c语言的文件,引入头文件并写好main主函数:接着编写程序的主体部分,这里的第一个for循环给x和y循环赋值,第二个for循环中y=x的时候,会使x的值在第二个for循环中大于…

    2024年5月13日
    2800
  • c语言m*n矩阵排序,c语言矩阵乘法

    c语言中矩阵排序的问题 (-1)若n阶方阵A=(aij),则A相应的行列式D记作D=|A|=detA=det(aij)。 并不能起到将一行中的元素从大到小排列,若某行为6,5,1,2四数经过比较后只会得到:5,1,2,6;注意这只可以使得最后一数为最大。 快速排序法”使用的是递归原理,下面我结合一个例子来说明“快速排序法”的原理。 …N阶矩阵,求…

    2024年5月12日
    3700

发表回复

登录后才能评论



关注微信