嘿,伙计们,我被困在该做什么上了。我知道我在伪代码中想要什么,但在编写它时遇到了一些困难。
我有两个由7个数字组成的数组。在第一个数组中,数字是
Angstroms [0.4000, 0.5000, 0.6000, 0.7000, 0.8000, 0.9000, 1.0000]
Energy [-0.9767, -1.1000, -1.1535, -1.1710, -1.1704, -1.1604, -1.145]
Input File
0.400000000000000 -0.976798125297645
0.500000000000000 -1.10086977056789
0.600000000000000 -1.153517976992553
0.700000000000000 -1.171014611491842
0.800000000000000 -1.170406254407191
0.900000000000000 -1.160412786280990
1.000000000000000 -1.145758813825982现在,我想把它们拟合成六阶多项式,这样我就可以用这些数据做更多的事情,这就是我遇到的问题。我这个阶段的输出应该是
A = Angstroms
[1 1 1 1 1 1 1
-0.4 -0.5 -0.6 -0.7 -0.8 -0.9 -1.0
A^2 A^2 A^2 A^2 A^2 A^2 A^2 So the above value squared
A^3 A^3 A^3 A^3 A^3 A^3 A^3 and so on
A^4 A^4 A^4 A^4 A^4 A^4 A^4
A^5 A^5 A^5 A^5 A^5 A^5 A^5
A^6 A^6 A^6 A^6 A^6 A^6 A^6]如何拉出列表,然后将其添加到此矩阵中,然后以一种简短有效的方式将下一行都添加为a^2、a^3等等。
我有个想法就是把所有的价值都输入到
A(0,0) =1;A(0,1) = -0.4,等等,但这将是非常乏味的。
到目前为止我的代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define ELEMENTS 6
#define n 7
// First read the data from the file
// Fit the data to a sixth order polynomial
// Fit the data to sixth order polynomial in terms of exp(-r)
// Plot the fitted functions and the data points to a set between 0.2 and 5 A
void * file_input ();
void * polynomial ();
int main () {
file_input();
return 0;
}
void * file_input () {
static double Angstroms[ELEMENTS];
static double Energy[ELEMENTS];
float a, b;
int i;
FILE * in_file = fopen("H2Data.txt", "r");
for (i = 0; i <= ELEMENTS; i++) {
fscanf(in_file,"%f %f\n", &a, &b);
Angstroms[i] = a;
Energy[i] = b;
// printf ("Angstroms[%f], Energy[%f]\n", Angstroms[i], Energy[i]);
}
return in_file, Angstroms, Energy;
fclose(in_file);
}
// Sextic equation ax^6 + bx^5 + cx^4 + dx^3 + ex^2 +fx + g = 0
void * polynomial(Angstroms, Energy) {
int i, j;
double * ax = malloc (n * n * sizeof(double)); // 7 by 7 matrix
double * b = malloc (n * sizeof(double)); // 0 by 1 matrix for the b values
}发布于 2015-04-22 06:04:35
您可以尝试使用以下代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define ELEMENTS 7
#define N 7
double Angstroms[ELEMENTS];
double Energy[ELEMENTS];
double ax[ELEMENTS][N];
void file_input();
void polynomial();
int main () {
file_input();
polynomial();
return 0;
}
void file_input () {
float a, b;
int i;
FILE * in_file = fopen("H2Data.txt", "r");
for (i = 0; i < ELEMENTS; i++) {
fscanf(in_file,"%f %f\n", &a, &b);
Angstroms[i] = a;
Energy[i] = b;
}
fclose(in_file);
}
void polynomial() {
int i,j;
for( i=0; i < ELEMENTS; i++)
{
ax[i][0] = 1;
ax[i][1] = Angstroms[i];
}
for( i=2; i < N; i++)
for (j=0; j < ELEMENTS; j++)
{
ax[j][i] = ax[j][i-1]*ax[i][1];
}
}发布于 2015-04-22 06:03:45
试试这个:
double * ax = malloc (n * n * sizeof(double)); // 7 by 7 matrix
double * bx = malloc (n * sizeof(double)); // 0 by 1 matrix for the b values
for (i = 0; i <= n; i++) {
fscanf(in_file,"%f %f\n", &a, &b);
bx[i] = b; // Energy
ax[0,i] = 1;
ax[1,i] = a; // Angstroms
ax[2,i] = a*a; // a^2
...
}它为向量和矩阵分配足够的空间,然后为输入文件中的每个文件填充向量的一个元素和矩阵中的一个列。
https://stackoverflow.com/questions/29788250
复制相似问题