首页 > 代码库 > 追赶法求三对角矩阵
追赶法求三对角矩阵
#include <iostream> using namespace std; int main() { //初始化 cout<<"请输入对三角矩阵中的非零数,用‘Z’表示结束"<<endl; char temp[200]; int N; for(int i=0; ; i++) { cin>>temp[i]; N=i+1; if(temp[i]==‘z‘||temp[i]==‘Z‘) break; } int n=(N+2)/3; double A[N],B[n]; cout<<"请输入结果矩阵的值"<<endl; for(int i=0; i<n; i++) { cin>>B[i]; } for(int i=0; i<N; i++) { A[i]=temp[i]-‘0‘; } double a[n],b[n-1],c[n-1]; for(int i=0, j=0,k=0,l=1; i<N; i++) { if(i%3==0) //初始化a[] { a[j]=A[i]; j++; } else if(i%3==1) //初始化c[] { c[k]=A[i]; k++; } else //初始化b[] { b[l]=A[i]; l++; } } //计算p,q,存入a c c[0]=c[0]/a[0]; for(int i=1; i<n; i++) { a[i]=a[i]-b[i]*c[i-1];//此时a[i]表示p[i] c[i]=c[i]/a[i];//此时c[i]表示q[i] } /* cout<<"计算得:"<<endl<<"p[]="; for(int i=1; i<n; i++) { cout<<a[i]<<" "; } cout<<endl<<"q[]="; for(int i=1; i<n; i++) { cout<<c[i]<<" "; } cout<<endl;*/ double y[n]= {0}; y[0]=B[0]/a[0]; for(int i=1; i<n; i++) { y[i]=(B[i]-b[i]*y[i-1])/a[i]; } double x[n]= {0}; x[n-1]=y[n-1]; for(int i=n-2; i>=0; i--) { x[i]=y[i]-c[i]*x[i+1]; } cout<<"解得:"<<endl; for(int i=0; i<n; i++) { cout<< "x["<<i+1<<"]="<<" "<< ( (double)( (int)( (x[i]+0.0005)*1000 ) ) )/1000 <<endl; } return 0; }
追赶法求三对角矩阵
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。