當前位置:首頁 » 編程語言 » 高斯擬合c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

高斯擬合c語言

發布時間: 2022-06-02 22:33:14

『壹』 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++怎麼實現

搜一下圓擬合的演算法,先了解演算法,然後在寫代碼,我能想到的是,因為半徑已知,通過兩個點,可以求出兩個原因,然後通過其他的點排除一個點,這樣就有了一個初始的圓心,然後,在這個點附近的一個小范圍,通過循環找出最優解。