资源简介
北航数值分析课后的大作业,程序输出正确。可以直接使用。
代码片段和文件信息
// homework1.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
int _tmain(int argc _TCHAR* argv[])
{
return 0;
}
#include
#include
#include
#include
#define ER 1e-12 //迭代精度水平
#define N 5 //矩阵的行数
#define M 501 //矩阵的列数
//A用于幂法和反幂法的计算,A0用于存储原始矩阵A的数据其值一直不变,LU用于存储Doolittle分解后的LU阵
double A[N][M] = { 0 0 } A0[N][M] = {00} LU[N][M] = { 0 0 };
//函数声明
void dooLittleFJ(); //将矩阵A进行doolittle分解,分解的矩阵存于LU中
void dooLittleQJ(double *b double *x); //从已经分解完成的LU矩阵中求解X
int aPowerMethod(double u[] int &d double &r1); //反幂法,其中u[]为初始迭代向量,d记录迭代次数,r1记录最终求得的特征值。
//返回1则在规定最大迭代次数内迭代完成,返回-1则超过最大迭代次数,求解失败
int powerMethon(double u[] int &d double &r1); //幂法,参数含义返回值含义与反幂法相同
void init(); //初始化矩阵的值
void taolun();//输入不同的初始向量进行讨论分析的函数
void dooLittleFJ()
{
int tempEtempBs=N/2;
for (int k = 0; k < M; k++)
{
if (k + s >= M)
tempE = M-1;
else
tempE = k + s;
for (int i = k; i <=tempE; i++)
{
LU[k-i+s][i] = A[k-i+s][i];
if (i - s <= 0)
tempB = 0;
else
tempB = i - s;
for (int t = tempB; t <= k - 1; t++)
{
LU[k-i+s][i] -= LU[k-t+s][t] * LU[t-i+s][i];
}
}
for (int j = k + 1; j <=tempE; j++)
{
if (j - s <= 0)
tempB = 0;
else
tempB = j - s;
LU[j-k+s][k] = A[j-k+s][k];
for (int t = tempB; t <= k - 1; t++)
{
LU[j-k+s][k] -= LU[j-t+s][t] * LU[t-k+s][k];
}
LU[j-k+s][k] /= LU[s][k];
}
}
}
void dooLittleQJ(double *b double *x)
{
double *y = new double[M];
int s = N / 2tempBtempE;
for (int i = 0; i < M; i++)
{
y[i] = b[i];
if (i - s <= 0)
tempB = 0;
else
tempB = i - s;
for (int t = tempB; t <= i - 1; t++)
{
y[i] -= LU[i - t + s][t] * y[t];
}
}
for (int i = M - 1; i >= 0; i--)
{
x[i] = y[i];
if (i + s >= M)
tempE = M - 1;
else
tempE = i + s;
for (int t = i + 1; t <=tempE; t++)
{
x[i] -= LU[i - t + s][t] * x[t];
}
x[i] /= LU[s][i];
}
}
int aPowerMethod(double u[]int &ddouble &r1)
{
double *y = new double[M];
double h r0 = 0;
int maxD=12000; //最大迭代次数,超过次次数视为失败
r1= d = 0;
dooLittleFJ();
while (maxD)
{
d++;
maxD--;
h = 0;
for (int i = 0; i < M; i++)
{
h += u[i] * u[i];
}
h = pow(h 0.5);
for (int i = 0; i < M; i++)
{
y[i] = u[i] / h;
}
dooLittleQJ(yu);
r1 = 0;
for (int i = 0; i < M; i++)
{
r1 += u[i] * y[i];
}
if (fabs(r1 - r0) / fabs(r1) <= ER)
{
r1 = 1 / r1;
return 1;
}
r0 = r1;
}
return -1;
}
int powerMethon(double u[]int &ddouble &r1)
{
double *y = new double[M];
double h r0 = 0;
int tempBtempEmaxD=12000;
r1 =d = 0;
while (maxD)
{
d++;
maxD--;
h = 0;
for (int i = 0; i < M; i++)
{
h += u[i] * u[i];
}
h = pow(h 0.5);
for (int i = 0; i < M; i++)
{
y[i] = u[i] / h;
}
r1 = 0;
相关资源
- 简易学生管理系统源码 数据结构 大作
- [BUPT]面向对象程序设计C++ - 平时作业
- 数据结构大作业 停车场管理 C语言
- C/C++语言大作业、小游戏
- 模式识别大作业K近邻算法
- C++大作业项目报告
- 2014年DSP大作业
- c语言数据结构期末大作业-家族族谱管
- 通讯录MFC程序,C++大作业
- MFC计算器编程,可视化,含详细实现
- c语言期末大作业图书管理系统
- C语言大作业
- 操作系统课程大作业-文件管理系统
- C++ 大作业 超市收银系统
- windows程序设计大作业 斗地主 mfc
- 计算机图形学大作业参考代码(VC版)
- 五子棋大作业C++实现
- c++大作业(程序以及报告)
- 计算机图形学 大作业 多功能图形学程
- 数据结构大作业 快递系统 C语言
- 西北工业大学C/C++程序设计大作业包含
- 计算机图形学大作业简易绘图板mfc
- Windows编程大作业
- C语言实现一个编译器-编译原理南开大
- Linux大作业 web服务器
- 单台AGV最短路径规划,两台AGV路径自
- 数据结构大作业杂志管理系统
- 五子棋大作业源码 .zip
- 信计专业C++期末大作业 银行排队叫号
- 网上商城 各种功能C++/CLR窗体大作业毕
评论
共有 条评论