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

📄 c11.cpp

📁 数值分析最常用的四十种算法
💻 CPP
字号:
//C11.cpp
//Find the greatest eigenvaue,using Power Methom

#include <iostream.h>
#include <math.h>
#include <time.h>

const int N=3;

double maxval(double x[],int n)
{
	double max;
    int i;
	max=fabs(x[0]);
	for(i=1;i<n;i++)
	{
		if(fabs(x[i])>max)
			max=fabs(x[i]);
	}
	return max;
}

void PowerMethom(double a[][N],double z0[],double tol,int maxtimes,int n)
{
	int i,j,k;
	double max,maxlast;
	double y[N],z[N];
	for (i=0;i<n;i++)
	{
		z[i]=z0[i];
	}
	for(k=1;k<=maxtimes;k++)
	{
		for (i=0;i<n;i++)
		{
		    y[i]=0;
		}
		//Matrix Mutiply
		for (i=0;i<n;i++)
		{
			for (j=0;j<n;j++)
			{
				y[i]+=a[i][j]*z[j];
			}
		}
		if (k>1)
		{
			maxlast=max;
		}
		max=maxval(y,n);
		if (k>1 && fabs(maxlast-max)<tol)
		{
			cout<<"Success,iterate "<<k<<" times"<<endl;
			cout<<"Eigenvaule: "<<max<<endl;
			cout<<"The eigenvextor is: (";
			for (i=0;i<n;i++)
			{
				cout<<z[i];
				if (i<n-1)
					cout<<",";
				else
					cout<<")"<<endl;
			}
			return;
		}
		for (i=0;i<n;i++)
		{
		    z[i]=y[i]/max;
		} 

	}
}

void main()
{
	double a[][N]={2,4,6,3,9,15,4,16,36};
	double z[N]={1,1,1};
	double tol=1e-5;
	int maxtimes=100;
	clock_t start, finish;
    start = clock();  // Gets system time 
	PowerMethom(a,z,tol,maxtimes,N);
	finish = clock(); // Gets system time again 
	cout<<"The methom takes time: "<<(double)(finish - start) / CLOCKS_PER_SEC<<endl;
	cin>>tol;
}
//迭代7次,精度<1e-5, 特征值:43.88,特征向量:(0.185868,0.446232,1) ,耗时0.01秒
//算法基本让人满意,但耗时偏多



		

	
	

⌨️ 快捷键说明

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