⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exercise_7.cpp

📁 牛顿下山法求解非线性方程组问题
💻 CPP
字号:
/*
幂法求矩阵的特征值和特征向量
1.	初始化矩阵,向量,误差
2.	置u=0。
3.	求xr=>λ
4.	计算  
    Y=X/λ,X=AY
5.	若|λ-u|<ε,输出λ,X,停机;
*/
#include<iostream>
#include<cmath>
using namespace std;
const int n=3;
const int m=4;
int main()
{   
	int i,j;
	double Xr,err=0.00001,u,T=0;
	double A[n][n]={{5,-4,1},{-4,6,-4},{1,-4,7}},
		B[m][m]={{25,-41,10,-6},{-41,68,-17,10},{10,-17,5,-3},{-6,10,-3,2}};
	double X[n]={1,1,1},Y[n];
	double U[m]={1,1,1,1},V[m];
	do
	{
	u=T;
	for(i=0;i<n-1;i++)
	{
	  Xr=X[0];
		if(X[i+1]>X[i])Xr=X[i+1];
		else continue;
	}
    T=Xr;
	for(i=0;i<n;i++)Y[i]=X[i]/T;	
	for(i=0;i<n;i++)X[i]=0; 	
	for(i=0;i<n;i++) 
		for(j=0;j<n;j++)
		   X[i]+=A[i][j]*Y[j];
	}
	while(fabs(T-u)>err);

	cout<<"矩阵A最大特征值T:"<<endl;
	cout<<T<<endl;
	cout<<"对应的特征向量为:"<<endl;
	for(i=0;i<n;i++) 
        cout<<X[i]<<endl;
	cout<<endl;
	do
	{
	u=T;
	for(i=0;i<m-1;i++)
	{
	  Xr=U[0];
		if(U[i+1]>U[i])Xr=U[i+1];
		else continue;
	}
    T=Xr;
	for(i=0;i<m;i++)V[i]=U[i]/T;	
	for(i=0;i<m;i++)U[i]=0; 	
	for(i=0;i<m;i++) 
		for(j=0;j<m;j++)
		   U[i]+=B[i][j]*V[j];
	}
	while(fabs(T-u)>err);

	cout<<"矩阵B最大特征值T:"<<endl;
	cout<<T<<endl;
	cout<<"对应的特征向量为:"<<endl;
	for(i=0;i<m;i++) 
        cout<<U[i]<<endl;
		return 0;
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -