Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define N 100
- double min=-100, max=100;
- void PrintVect(double B[],int n){
- int i;
- for (i=0;i<n;i++) printf("x[%d]=%lf\n", i,B[i]);
- }
- double Rand(double min, double max){
- return min+(max-min)*rand()/RAND_MAX;
- }
- void PrintMatr(double A[][N], int n, int m){
- int i,j;
- for(i=0;i<m;i++){
- for(j=0;j<n;j++) printf("%lf\t",A[i][j]);
- printf("\n");
- }
- }
- void InitTridiag(double A[][N], int n){
- int i,j;
- i=0;
- for(i=0;i<n;i++){
- for(j=0;j<n;j++){
- if(j>=i-1 && j<=i+1) A[i][j]=Rand(min,max);else A[i][j]=0;
- }
- }
- }
- void Solve(double A[N][N], double B[N], double x[N], int n){
- int i;
- double l[n-1],m[n-1];
- double c;
- l[0]=B[0]/A[0][0];
- m[0]=-A[0][1]/A[0][0];
- for(i=1;i<n-1;i++){
- c=A[i][i]+A[i][i-1]*m[i-1];
- l[i]=(B[i]-A[i][i-1]*l[i-1])/c;
- m[i]=-A[i][i+1]/c;
- }
- i=n-1;
- c=A[i][i]+A[i][i-1]*m[i-1];
- x[i]=(B[i]-A[i][i-1]*l[i-1])/c;
- for(i=n-2;i>=0;i--){
- x[i]=l[i]+m[i]*x[i+1];
- }
- }
- int main() {
- double A[N][N],B[N],x[N];
- int n=5, i;
- for(i=0;i<n;i++){
- B[i]=i;
- }
- InitTridiag(A,n);
- PrintMatr(A,n,n);
- Solve(A,B,x,n);
- PrintVect(x,n);
- }
Add Comment
Please, Sign In to add comment