①.、通过一些点拟合出一条直线.
虽然我知道什么是曲线拟合,怎么做,但是我不清楚你问题的具体内容,
"请高手 说实话 我是菜鸟 但你的程序感觉好凌乱 好多地方可以精简说最明显的问题 power函数返回值无论怎样都返回0 "来看,我可能是没看到你的程序,所以信息不全.
我只回答什么是曲线拟合
曲线拟合,简单来说,是指以近似的方法用一条曲线逼近一组数据点.
逼近的方法最常用的事最小二乘法,当然也有其他方法.
逼近的曲线可以是直线,也可以是多项式曲线,二次,三次,多次,也可以是分段多项式曲线,也可以是B样条曲线.今天这一节,如果不需要深入研究,你只要把B样条曲线理解为一种近似于分段多项式曲线即可.
你问的不多,这些对你的回答已经足够,需要深入了解再问
首先,谁都不能根据仅有的数据集来断定这就是什么曲线.
我们只能通过对数据观察推测可能会符合什么形式的曲线.
已知10个数据点的训练集,可以采用多项式拟合的办法来做,但是不建议使用C语言来实现.
这种数学问题用matlab很容易就可以解决,c语言写要麻烦的多的多.比如你采用最小二乘法的话,
你需要自己用c语言写很多矩阵运算.
曲线拟合的最小二乘法
如有实验数据如下
#include "stdio.h"
#include "graphics.h"
double s(double x[],double y[],double x1)
{
int i=0;
for(;i10;i++)
tmp1+=x[i]*x[i];
}
result=a*x1+b;
return result;
void hzbz(int x,int y)
int i,j;
for(i=0;i100;i++)
else
j=j+10;
moveto(j,y);
j=j-10;
moveto(x,j);
void main()
int graphdriver=DETECT,graphmode;
int i;
getch();
initgraph(graphdriver,graphmode, "");
setbkcolor(BLUE);
closegraph();
很简单 问题已经转化成 从文件读数据 数据类型转化 ?赋值到数组 ?这三步
#include?"stdio.h"
#include?stdlib.h
main()
FILE?*fp1;//定义文件流指针,用于打开读取的文件
fp1?=?fopen("d:\\forecast1.txt","r");//只读方式打开文件a.txt
int?i=0;
int?tmp?=?atoi(text);//输出到屏幕
x[i++]?=?tmp;
fclose(fp1);//关闭文件a.txt,有打开就要有关闭
y[i]?同理
可以直接在线进行拟合,下面是地址(已验证)
建议你直接对数据用Matlab的cftool拟合(可以自由的自定义拟合函数形式)
以上就是土嘎嘎小编为大家整理的拟合曲线函数C语言相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!