Saya ingin menyelesaikan sistem linier ini Ax=b, di mana:

A =  
    [-0.23  2.54  -3.66  0;  
     -6.98  2.46  -2.73  -2.73;  
      0     2.56   2.46   4.07;  
      0     0     -4.78   3.82]

b = [4.42 27.13 -6.14  10.5]

Dan solusinya harus

x = [-2  3  1  -4]

Yang merupakan matriks berpita dengan pita bawah sama dengan 1 dan pita atas sama dengan 2

Ini diselesaikan menggunakan pemecah DGBSV sebagai berikut:

#include <stdlib.h>
#include <stdio.h>
#include "mkl_lapacke.h"
#define N 4
int main() { 
    int i;
    MKL_INT ipiv[N];
    double a[16] = { 0,    -0.23,  2.54, -3.66,
                    -6.98,  2.46, -2.73, -2.13,
                     2.56,  2.46,  4.07,  0,
                    -4.78,  3.82,  0,     0};

    double b[4] =  {4.42, 27.13, -6.14, 10.5};

    LAPACKE_dgbsv( LAPACK_ROW_MAJOR, N, 1, 2, 1, a, N, ipiv, b, 1);

    for(i=0;i<N;i++)
        printf("%f\n", b[i]);
}

Kode dibatalkan di pemecah dgbsv. Ketika saya menulis matriks a dan b pointer itu memberikan nilai-nilai alamat.

1
mahmoud ayyad 12 Maret 2017, 20:24

1 menjawab

Mungkin masalahnya adalah fungsi gbsv mengharapkan matriks A memiliki ruang untuk 2KL + KU + 1 baris, sedangkan kode Anda hanya mengalokasikan KL + KU + 1 baris. Jika tebakan ini salah, Anda dapat melihat implementasi pembungkus LAPACKE_dgbsv disini.

0
Dmitry Baksheev 20 Maret 2017, 12:10