‘壹’ origin 8.0如何进行高斯拟合
origin 8.0进行高斯拟合的方法:
1、导入数据。点击file-import-single ASCII,如图示中的路径。
‘贰’ 高斯多项拟合C或者C++源代码谁有
#include
<iostream>
#include<iomanip.h>
using namespace std;
int
change_num=0;
void display(double **l_array,int r_size1,int r_size2)
//这个函数是用来显示矩阵(主要是用来调试使用的)
{
for(int i=0; i<r_size1; i++)
for(int j=0; j<r_size2; j++)
{
if(j!=0)
{
cout<<setprecision(4)<<setiosflags(ios_base::left)<<setw(7)<<l_array[i][j];
}
else
{
cout<<setprecision(4)<<setiosflags(ios_base::left)<<l_array[i][j]<<"
";
}
if(j+1==r_size2)
{
cout<<endl;
}
}
cout<<resetiosflags(ios_base::left);
}
//这个下面的是算出上三角形
bool
Change(double **&array,int r_size,int c_size)
{
int k=0;
double max=array[k][k];
int num=0;
bool flag=false;
while(k<r_size) //k表示现在在哪一行
{
max=array[k][k];
for(int i=k; i<r_size; i++)
{
if(array[i][k]>max)
{
flag=true;
max=array[i][k];
num=i; //num表示最大行的行数
}
}
if(!flag)
{
num=k;
}
if(max==0)
//如果一个列中的最大数是0的话那就说明这个矩阵的奇异矩阵
{
return
false;
}
else if(k!=num)
{
double temp=0;
for(int i=0; i<c_size; i++)
{
temp=array[k][i];
array[k][i]=array[num][i];
array[num][i]=temp;
change_num++;
}
}
for(int i=k; i<r_size-1; i++)
{
double temp=array[i+1][k];
//这里的temp一定要保存的,因为直接使用array[i+1][k],在下面的计算中会改变
for(int j=k;
j<c_size; j++)
{
array[i+1][j]-=((temp/array[k][k])*array[k][j]);
}
}
k++;
flag=false;
}
return
true;
}
double Rowlay(double **&array,int r_size, int c_size )
// 求行列式
{
double sum=1;
for(int i=0; i<r_size; i++)
{
sum*=array[i][i];
}
return sum;
}
void Equation(double **&array,int r_size,
int c_size) //求方程组解
{
for(int i=0; i<r_size; i++)
{
double temp1=array[i][i];
for(int j=i; j<c_size;
j++)
{
array[i][j]/=temp1;
}
}
for(int i=1; i<r_size; i++)
{
for(int j=i-1;
j>=0; j--)
{
double
temp2=array[j][i];
for(int h=i; h<c_size; h++)
{
array[j][h]-=(temp2*array[i][h]);
}
}
}
}
int main()
{
int count=0;
cin>>count;
double **array=new double*[count];
for(int i=0;
i<count; i++)
{
array[i]=new double[count+1];
}
for(int i=0; i<count; i++)
for(int j=0; j<count+1;
j++)
{
cin>>array[i][j];
}
bool flag=Change(array,count,count+1);
if(flag)
{
cout<<endl;
double
value=Rowlay(array,count,count+1);
if(change_num%2==1)
{
value*=-1;
}
cout<<"行列式为
"<<value<<endl;
Equation(array,count,count+1);
cout<<"方程解为"<<endl;
for(int i=0; i<count;
i++)
{
char ch='x'+i;
cout<<ch<<"= "<<array[i][count]<<endl;
}
display(array,count,count+1);
}
else
{
cout<<"这个矩阵是奇异矩阵"<<endl;
cout<<"这个方程无数解!!!"<<endl;
cout<<"行列式为"<<0<<endl;
}
for(int j=0;
j<count; j++)
{
delete array[j];
}
delete
[]array;
}
‘叁’ 求高斯算法完整c语言程序,急。。。。。
如果不是专门研究算法的,只是为了学习c语言,你研究这个的没多大意思,看看指针,结构体,拿个windows api好好研究研究写点有用的程序吧,算法看看别人的,那些就交给大学教授去研究吧
‘肆’ 高斯拟合算法c/c++怎么实现
你先把最少二乘法的原理搞懂吧,其实最少二乘法不难得。
你可以自己推到,不过这些经典的方法,都有现成公式的了。拿本书找出公式,也就是几个矩阵的运算,把你的数据带进去就直接算得出了。
‘伍’ c语言实现高斯消元法提高运算速度
最好还是换DSP
‘陆’ 什么是高斯拟合
高斯拟合(Gaussian Fitting)即使用形如:
Gi(x)=Ai*exp((x-Bi)^2/Ci^2)
的高斯函数对数据点集进行函数逼近的拟合方法。
其实可以跟多项式拟合类比起来,不同的是多项式拟合是用幂函数系,
而高斯拟合是用高斯函数系。
使用高斯函数来进行拟合,优点在于计算积分十分简单快捷。这一点
在很多领域都有应用,特别是计算化学。着名的化学软件Gaussian98
就是建立在高斯基函数拟合的数学基础上的。
具体算法楼主可以去几大论坛上问问。现在没时间了。bbs.matwav.com
http://www.simwe.com/forum/archiver/tid-551606.html
‘柒’ 请教:高斯拟合c/c++怎么实现
搜一下圆拟合的算法,先了解算法,然后在写代码,我能想到的是,因为半径已知,通过两个点,可以求出两个原因,然后通过其他的点排除一个点,这样就有了一个初始的圆心,然后,在这个点附近的一个小范围,通过循环找出最优解。