C语言如何实现二次曲线拟合

C语言如何实现二次曲线拟合,第1张

首先,谁都不能根据仅有的数据集来断定这就是什么曲线

我们只能通过对数据观察推测可能会符合什么形式的曲线。

已知10个数据点的训练集,可以采用多项式拟合的办法来做,但是不建议使用C语言来实现。

这种数学问题用matlab很容易就可以解决,c语言写要麻烦的多的多。比如你采用最小二乘法的话,

你需要自己用c语言写很多矩阵运算。

MATLAB软件提供了基本的曲线拟合函数的命令.1 多项式函数拟合:a=polyfit(xdata,ydata,n)其中n表示多项式的最高阶数,xdata,ydata为将要拟合的数据,它是用数组的方式输入.输出参数a为拟合多项式 的系数多项式在x处的值y可用下面程序计算.y=polyval(a,x)2 一般的曲线拟合:p=curvefit(‘Fun’,p0,xdata,ydata)其中Fun表示函数Fun(p,data)的M函数文件,p0表示函数的初值.curvefit()命令的求解问题形式是若要求解点x处的函数值可用程序f=Fun(p,x)计算.例如已知函数形式 ,并且已知数据点 要确定四个未知参数a,b,c,d.使用curvefit命令,数据输入 ;初值输 ;并且建立函数 的M文件(Fun.m).若定义 ,则输出又如引例的求解,MATLAB程序:t=[l:16]; %数据输人y=[ 4 6.4 8 8.4 9.28 9.5 9.7 9.86 10.2 10.32 10.42 10.5 10.55 10.58 10.6] ;plot(t,y,’o’) %画散点图p=polyfit(t,y,2) (二次多项式拟合)计算结果:p=-00445 10711 43252 %二次多项式的系数由此得到某化合物的浓度y与时间t的拟合函数。

1、首先在电脑中打开graphpad prism70软件后,点击create,如图所示。

2、然后在title输入组别,下方对应输入数据,先输入第一组数据,如图所示。

3、然后点击analyze,点击ok。

4、接着点击file,点击new data table and graph,点击create。

5、然后输入新数据,如图所示。

6、然后将数据进行ROC分析,就完成了 。

首先你要把你的数据在工作窗口输入matlab。

然后嘞,你可以用plot命令,直接打出由你的数据画出来的点或者是图像。然后嘞,在plot打出来的图像上面有一排工具栏,其中一个的子选项里面有一个拟合工具箱(忘记名字啦~~应该是有fit之类的字眼)

第二种方法,在输入数据以后,你可以在命令窗口输入cftool,这个命令呢,它可以召唤出matlab的拟合工具箱。在工具箱里面选择你已经输入的数据,然后选择你要拟合的函数的类型,或者自己定义函数类型。然后就可以直接拟合了。

对了,cftool的工具箱比plot里面的可以拟合的函数种类会多很多。

点组所表示的坐标与函数值之间的关系。曲线拟合可以帮助我们了解数据之间的内在联系,并能预测此类问题在其他离散点下的变化趋势。在实际的数据分析工作中,大多数需要拟合的曲线或曲面都是非线性的,所以常需要借助计算机程序来快速得到结果。

曲线拟合的应用场景非常丰富,几乎各行各业的统计分析中都会用到。图像处理中对各种线型拟合,机械工程中的振动与噪声数据,财务与销售数据预测,药物抑制剂计量诱导细胞变化数据,药物浓度与时间的关系,疾病疗效与疗程长短的关系,自然界物种的竞争数据等等,都会用到曲线拟合。此外,在结构有限元分析领域,各种非线性材料参数通常也是对测试数据进行参数拟合而得到。电磁分析中,磁芯损耗参数也是通过对功率损耗测试数据曲线拟合而来。

常见的曲线(方程)类型

这里介绍实际分析中常会遇到的曲线类型,包含线性与非线性的,我们知道 曲线拟合中的大部分模型都是非线性的 。WELSIM的CurveFitter工具基本都已经支持了这些曲线的拟合计算。

1 直线

直线y=A+Bx是曲线拟合中最简单的回归模型之一。x为自变量,y为因变量,A和B为需要拟合的参数。其主要目标是寻找数据集中、数据增长的大致方向。

2 多项式

多项式Y=A+B1x+B2x2+……+Bkxk是实际工程中常用到的模型。其中x为自变量,y为因变量,k为级数,常用级数为1~9。当级数为1时,多项式即为直线方程。当级数大于1时,模型表现出非线性。阶数越高越能描述复杂的曲线,然而高阶多项式需要更多的测试数据点才能得到较为精确的解,同时也会导致计算量的增加。实际分析中会根据数据源与目标问题选择合适的阶数。

3 对数

对数模型有一些不同的形式,大体上有半对数y = A lg(x) + B和全对数两类lg(y) = A lg(x) + B。x为自变量,y为因变量,A和B为需要拟合的参数。对数曲线形式常用于和浓度变化相关的模型。

4 幂函数

常见的幂函数有两种:y=Ax^B和y=Ax^B+C。x为自变量,y为因变量,A、B和C为需要拟合的参数。幂函数的应用广泛,学者们发现动物的静息代谢率就和其体重成幂函数关系,肿瘤的大小和变化率也成幂函数关系。

5 指数函数

常见的指数函数有:y=Ae^(Bx)和y=Ae^(Bx)+Ce^(Dx)。x为自变量,y为因变量,A、B、C和D为需要拟合的参数。人们发现营养与微量元素对人体健康会成指数关系。

6 正态分布

正态分布的种类较多,比较常见和基础的是高斯模型y=Ae^[-(x-B)^2/C^2]。x为自变量,y为因变量,A、B和C为需要拟合的参数。统计学中大量的使用正态分布模型,如儿童升高与身体密度的关系,学生的考试成绩分布等等。

7 S型曲线

常见的S型曲线有对称型和非对称形的,又称作4参数和5参数拟合回归方程。数学表达式分别为y=D+(A-D)/[1+(x/C)^B]和y=D+(A-D)/[1+(x/C)^B]^M,x为自变量,y为因变量,A、B、C、D和M为需要拟合的参数。S型曲线相对通用,曲线的形状根据情况, 可能是一个单调上升的类似指数, 对数, 或双曲线的曲线, 可能是一个单调下降的上述曲线, 也可以是一条 S 形曲线。它要求 x 值不能小于0 (因为指数是实数)。由于其多用性,也成为科研或工程中常用的曲线模型之一。

8 超d材料模型曲线

常见的超d模型曲线有Arruda-Boyce,Gent,Mooney-Rivlin,Neo-Hookean,Ogden,多项式(Polynomial),和Yeoh。自变量和因变量分别是应变和应力。根据超d模型不同,各种曲线也会有所不同。在有限元分析中,由于超d材料的多样性,很难从手册中直接获得用于有限元分析的材料参数,而材料的力学测试数据往往能从实验中获得,可以通过对测试数据进行曲线拟合从而得到用于有限元分析的材料常数。由于输入的数据有多种测试类型,需要对多种状态下的应力应变关系式进行计算拟合。有兴趣的读者可以在WELSIM的曲线拟合手册中获得更详细的信息。

9 磁芯损耗模型曲线

电磁材料和设备大量的应用,使磁芯损耗问题也是一个热点。磁芯材料的损耗有一些经典的模型如电力钢的p=KffBm^2+Kc(fBm)^2+Ke(fBm)^15,还有用于功率铁电的p=Cmf^XBm^Y,

其中Bm为自变量,p为因变量,f为输入常数(电磁频率),Kf、Kc、Ke和Cm、X、Y是要拟合的参数。后者又称为著名的Steinmetz模型。和超d曲线拟合类似,磁芯损耗曲线的数据往往含有不同的工作频率,需要对每条频率下的曲线同时进行拟合得到参数。

曲线拟合工具CurveFitter

虽然曲线拟合在各行各业都有广泛的应用,但是还没有简单好用且免费的曲线拟合工具软件。有限元软件WELSIM最近发布一款免费的曲线拟合工具CurveFitter,作为一款专门用于曲线拟合的工具软件,CurveFitter不仅能拟合超d材料模型和磁芯损耗模型的参数,也具有许多通用领域所用的曲线模型,可用于更为广泛的科学与工程计算。

CurveFitter的使用步骤如下:

1 选择需要进行拟合的曲线方程

2 编辑添加表格数据,或者直接导入数据。

3 在曲线窗口中检查输入的测试数据

4 点击检查按钮可以检查测试数据(可选)。d出对话框会提示数据状态。

5 点击求解按钮进行曲线拟合数值计算。如果求解成功,参数栏会自动显示拟合好的数值,曲线窗口会显示拟合好的曲线。

6 至此曲线拟合计算已经完成。如果常查看不同参数下曲线的形态。可以调节参数栏的数值并点击更新按钮。

注意事项

在曲线拟合时,最好依据曲线的形状来选择函数模型。由于所选的拟合函数不同,会产生不同的拟合效果,需要我们按最优原则来选择最佳拟合函数。同时,给定数据点的多少和数据点的范围对曲线拟合也会产生影响。由于拟合数据存在误差,需要检验拟合好后的曲线与参数。尽量能将模型误差和测量误差对曲线拟合的影响减至最小。

最后,送上 *** 作视频,供大家参考。

#include<stdioh>

#include<mathh>

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

{

float s,u;

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

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

{

s=Array[i][i];

k=i;

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

{

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

{

s=Array[a][i];

k=a;

}

}

if(k!=i)

{

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

{

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

}

}

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

{

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

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

{

Array[x][y]=Array[x][y]-uArray[i][y];

}

}

}

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

{

s=0;

for(y=x+1;y<n;y++)

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

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

}

for(i=0;i<n;i++)printf("%f ",Array[i][n]);printf("\n");

}

int main()

{

int n,i,j;

float Array[10][10];

scanf("%d",&n);

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

{

for(j=0;j<n+1;j++)

scanf("%f",&Array[i][j]);

}

Guass(n,Array);

return 0;

}

以上就是关于C语言如何实现二次曲线拟合全部的内容,包括:C语言如何实现二次曲线拟合、谁能告诉我matlab如何拟合指数曲线啊、graphpad prism 如何做拟合曲线等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9306877.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存