『壹』 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++怎麼實現
搜一下圓擬合的演算法,先了解演算法,然後在寫代碼,我能想到的是,因為半徑已知,通過兩個點,可以求出兩個原因,然後通過其他的點排除一個點,這樣就有了一個初始的圓心,然後,在這個點附近的一個小范圍,通過循環找出最優解。