Guest User

Untitled

a guest
Nov 16th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 100
  4. double min=-100, max=100;
  5.  
  6. void PrintVect(double B[],int n){
  7. int i;
  8. for (i=0;i<n;i++) printf("x[%d]=%lf\n", i,B[i]);
  9. }
  10.  
  11. double Rand(double min, double max){
  12. return min+(max-min)*rand()/RAND_MAX;
  13. }
  14.  
  15. void PrintMatr(double A[][N], int n, int m){
  16. int i,j;
  17. for(i=0;i<m;i++){
  18. for(j=0;j<n;j++) printf("%lf\t",A[i][j]);
  19. printf("\n");
  20. }
  21.  
  22. }
  23.  
  24. void InitTridiag(double A[][N], int n){
  25. int i,j;
  26. i=0;
  27. for(i=0;i<n;i++){
  28. for(j=0;j<n;j++){
  29. if(j>=i-1 && j<=i+1) A[i][j]=Rand(min,max);else A[i][j]=0;
  30. }
  31. }
  32. }
  33.  
  34. void Solve(double A[N][N], double B[N], double x[N], int n){
  35. int i;
  36. double l[n-1],m[n-1];
  37. double c;
  38. l[0]=B[0]/A[0][0];
  39. m[0]=-A[0][1]/A[0][0];
  40. for(i=1;i<n-1;i++){
  41. c=A[i][i]+A[i][i-1]*m[i-1];
  42. l[i]=(B[i]-A[i][i-1]*l[i-1])/c;
  43. m[i]=-A[i][i+1]/c;
  44. }
  45. i=n-1;
  46. c=A[i][i]+A[i][i-1]*m[i-1];
  47. x[i]=(B[i]-A[i][i-1]*l[i-1])/c;
  48.  
  49. for(i=n-2;i>=0;i--){
  50. x[i]=l[i]+m[i]*x[i+1];
  51. }
  52. }
  53.  
  54. int main() {
  55. double A[N][N],B[N],x[N];
  56. int n=5, i;
  57. for(i=0;i<n;i++){
  58. B[i]=i;
  59. }
  60. InitTridiag(A,n);
  61. PrintMatr(A,n,n);
  62. Solve(A,B,x,n);
  63. PrintVect(x,n);
  64. }
Add Comment
Please, Sign In to add comment