创建矩阵并将其填入wolfram

时间:2014-02-27 19:20:25

标签: wolfram-mathematica

我想将我的C ++代码翻译成wolfram,以改进我的计算方法。 C ++代码

for(int i = 0; i < N - 1; ++i){
        matrix[i][i] += L / 3 * uCoef  - duCoef / 2 - (double)du2Coef/L;
        matrix[i][i+1] += L / 6 * uCoef + duCoef / 2 + (double)du2Coef/L;
        matrix[i+1][i] += L / 6 * uCoef - duCoef / 2 + (double)du2Coef/L;
        matrix[i+1][i+1] += L / 3 * uCoef + duCoef / 2- (double)du2Coef/L;
    }

所有这些系数都是const,N - 矩阵的大小。

2 个答案:

答案 0 :(得分:1)

In[1]:= n = 4; uCoef = 2; duCoef = 3; du2Coef = 7; L = 11.;
matrix = Table[0, {n}, {n}];
For[i = 1, i < n, ++i,
  matrix[[i, i]] += L/3*uCoef - duCoef/2 - du2Coef/L;
  matrix[[i, i+1]] += L/6*uCoef - duCoef/2 - du2Coef/L;
  matrix[[i+1, i]] += L/6*uCoef + duCoef/2 + du2Coef/L;
  matrix[[i+1, i+1]] += L/3*uCoef - duCoef/2 + du2Coef/L];
matrix

Out[4]= {
  {5.19697, 1.5303, 0, 0},
  {5.80303, 11.6667, 1.5303, 0},
  {0, 5.80303, 11.6667, 1.5303},
  {0, 0, 5.80303, 6.4697}}

从原版改变的每个角色暗示C ++和Mathematica之间存在根本区别

答案 1 :(得分:0)

您应该在mathematica中使用SparseArray这样的带状数组:

 n = 5; uCoef = 2; duCoef = 3; du2Coef = 7; L = 11.;
 matrix = SparseArray[
          {{1, 1} -> L/3*uCoef - duCoef/2 - du2Coef/L,
          {i_ /; 1 < i < n, i_} -> -duCoef + 2 L uCoef/3 ,
          {n, n} -> ( L/3 uCoef - duCoef/2 + du2Coef/L ),
          Band[{1, 2}] -> L/6 uCoef - duCoef/2 - du2Coef/L,
          Band[{2, 1}] -> L/6 uCoef + duCoef/2 + du2Coef/L}, {n, n}];

 MatrixForm@matrix

enter image description here

即使你坚持For循环,也要将矩阵初始化为:

  matrix = SparseArray[{{_, _} -> 0}, {n, n}];