首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取文本文件并将这些值转换为7×7矩阵

读取文本文件并将这些值转换为7×7矩阵
EN

Stack Overflow用户
提问于 2015-04-22 05:12:27
回答 2查看 61关注 0票数 0

嘿,伙计们,我被困在该做什么上了。我知道我在伪代码中想要什么,但在编写它时遇到了一些困难。

我有两个由7个数字组成的数组。在第一个数组中,数字是

代码语言:javascript
复制
 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

现在,我想把它们拟合成六阶多项式,这样我就可以用这些数据做更多的事情,这就是我遇到的问题。我这个阶段的输出应该是

代码语言:javascript
复制
 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,等等,但这将是非常乏味的。

到目前为止我的代码

代码语言:javascript
复制
#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
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-22 06:04:35

您可以尝试使用以下代码

代码语言:javascript
复制
#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];
    }
}
票数 2
EN

Stack Overflow用户

发布于 2015-04-22 06:03:45

试试这个:

代码语言:javascript
复制
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
    ...
}

它为向量和矩阵分配足够的空间,然后为输入文件中的每个文件填充向量的一个元素和矩阵中的一个列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29788250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档