计算方法实验3:反幂法求按模最小特征值及特征向量

Task

在这里插入图片描述
在这里插入图片描述

Algorithm

LU-Doolittle分解

A = L U \mathbf{A}=\mathbf{L}\mathbf{U} A=LU
其中 L \mathbf{L} L为单位下三角阵, U \mathbf{U} U为上三角阵.
A x = b \mathbf{A}\mathbf{x}=\mathbf{b} Ax=b可化为 L U x = L y = b \mathbf{L}\mathbf{U}\mathbf{x}=\mathbf{L}\mathbf{y}=\mathbf{b} LUx=Ly=b
只需解方程组
L y = b \mathbf{L}\mathbf{y}=\mathbf{b} Ly=b
U x = y \mathbf{U}\mathbf{x}=\mathbf{y} Ux=y

规范化反幂法

{ Y ( k ) = X ( k ) / ∥ X ( k ) ∥ ∞ , A X ( k + 1 ) = Y ( k ) , k = 0 , 1 , … \begin{cases} \mathbf{Y^{(k)}} =\mathbf{X^{(k)}}/\|\mathbf{X^{(k)}}\|_{\infty}, \\ \mathbf{A}\mathbf{X^{(k+1)}}=\mathbf{Y^{(k)}}, \end{cases} k=0,1,… {Y(k)=X(k)/∥X(k),AX(k+1)=Y(k),k=0,1,
∥ X ( k + 1 ) ∥ − ∥ X ( k ) ∥ ∞ ≤ 1 0 − 5 \|\mathbf{X^{(k+1)}}\|-\|\mathbf{X^{(k)}}\|_{\infty}\leq10^{-5} X(k+1)X(k)105时停止迭代,则 A \mathbf{A} A的按模最小特征值 λ = 1 / ∥ X ( k + 1 ) ∥ \lambda=1/\|\mathbf{X^{(k+1)}}\| λ=1/∥X(k+1), λ \lambda λ对应的特征向量为 Y ( k ) \mathbf{Y^{(k)}} Y(k).

Code

#include<iostream>
#include<cmath>
#include <vector>
#include <iomanip>
using namespace std;//计算向量的无穷范数,即找到向量中绝对值最大的元素
long double Norm(long double* x1, int n)
{long double norm = 0;for(int i = 0; i < n - 1; i++)if(abs(x1[i]) > norm)norm = abs(x1[i]);return norm;
}//交换两个向量
void swap(vector<long double>& x, vector<long double>& y)
{vector<long double> temp = x;x = y;y = temp;
}//Doolittle分解解线性方程组
long double* Doolittle(vector<std::vector<long double>>& A, long double* b, int n)
{long double* x = new long double[n]();long double* temp = new long double[n]();vector<vector<long double>> matrix1(n, vector<long double>(n+1, 0)); vector<vector<long double>> matrix2(n, vector<long double>(n+1, 0)); vector<vector<long double>> Lmatrix(n, vector<long double>(n, 0));vector<vector<long double>> Umatrix(n, vector<long double>(n, 0));for(int i = 0; i < n; i++){Lmatrix[i][i] = 1;Umatrix[0][i] = A[0][i];Lmatrix[i][0] = A[i][0] / Umatrix[0][0];}for(int i = 1; i < n; i++){for(int j = i; j < n; j++){Umatrix[i][j] = A[i][j];for(int k = 0; k < i; k++)Umatrix[i][j] -= Lmatrix[i][k] * Umatrix[k][j];}for(int j = i + 1; j < n; j++){Lmatrix[j][i] = A[j][i];for(int k = 0; k < i; k++)Lmatrix[j][i] -= Lmatrix[j][k] * Umatrix[k][i];Lmatrix[j][i] /= Umatrix[i][i];}}for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)matrix1[i][j] = Lmatrix[i][j];for(int i = 0; i < n; i++)matrix1[i][n] = b[i];for(int row = 0; row < n; row++){for(int col = 0; col < row; col++){matrix1[row][n] -= matrix1[col][n] * matrix1[row][col] / matrix1[col][col];matrix1[row][col] = 0;}matrix1[row][n] /= matrix1[row][row];matrix1[row][row] = 1;}for(int i = 0; i < n; i++)temp[i] = matrix1[i][n];for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)matrix2[i][j] = Umatrix[i][j];for(int i = 0; i < n; i++)matrix2[i][n] = temp[i];for(int row = n - 1; row >= 0; row--){for(int col = row + 1; col < n; col++){matrix2[row][n] -= matrix2[col][n] * matrix2[row][col] / matrix2[col][col];matrix2[row][col] = 0;}matrix2[row][n] /= matrix2[row][row];matrix2[row][row] = 1;}for(int i = 0; i < n; i++)x[i] = matrix2[i][n];return x;
}//迭代求解特征值和特征向量
void Iteration(vector<vector<long double>>& A, long double* x, int n)
{long double* xtemp = new long double[n]();cout << "X(0):";for (int i = 0; i < n; i++){cout << x[i] << " ";xtemp[i] = x[i];}cout << endl;long double norm1 = Norm(xtemp, n);cout << norm1 << endl;long double* x1 = nullptr;x1 = Doolittle(A, xtemp, n);cout << "X(1):";for (int i = 0; i < n; i++)cout << x1[i] << " ";cout << endl;long double norm2 = Norm(x1, n);cout << norm2 << endl;int k = 1;long double* y = new long double[n]();while (abs(norm1 - norm2) > 1e-5){for(int i = 0; i < n; i++)y[i] = x1[i] / norm2;cout << "Y(" << k << "):";for (int i = 0; i < n; i++)cout << y[i] << " ";cout << endl;if (xtemp != x1) delete[] xtemp;xtemp = Doolittle(A, y, n);cout << "X(" << k + 1 << "):";for (int i = 0; i < n; i++)cout << xtemp[i] << " ";cout << endl;norm1 = norm2;norm2 = Norm(xtemp, n);cout << norm2 << endl;k++;x1 = xtemp;}cout << "lambda=" << 1 / Norm(x1, n) << endl;cout << "特征向量为:";for(int i = 0; i < n; i++)cout << y[i] << " ";cout << endl << "迭代次数为:" << k << endl << endl;delete[] y;delete[] x1;
}int main()
{int n = 5;vector<std::vector<long double>> A1(n, std::vector<long double>(n));for(int i = 0; i < 5; i++)for(int j = 0; j < 5; j++)A1[i][j] = 1.0 / (9 - i - j);long double b1[5] = {1, 1, 1, 1, 1};Iteration(A1, b1, 5);n = 4;vector<std::vector<long double>> A2(n, std::vector<long double>(n));A2[0][0] = 4; A2[0][1] = -1; A2[0][2] = 1; A2[0][3] = 3;A2[1][0] = 16; A2[1][1] = -2; A2[1][2] = -2; A2[1][3] = 5;A2[2][0] = 16; A2[2][1] = -3; A2[2][2] = -1; A2[2][3] = 7;A2[3][0] = 6; A2[3][1] = -4; A2[3][2] = 2; A2[3][3] = 9;long double b2[4] = {1, 1, 1, 1};Iteration(A2, b2, 4);
}

Results

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32的简介

内存 一般MCU包含的存储空间有FLASH和RAM,&#xff08;RAM和flash又有片上和片外的区别&#xff0c;片上表示mcu自带的&#xff0c;已经封装在MCU内部的&#xff0c;片外表示外挂的&#xff0c;当项目中需要做一些复杂的应用&#xff0c;会存在资源不足的情况&#xff0c;这时…

JavaScript基础语法–变量

文章目录 认识JavaScript变量程序中变量的数据&#xff08;记录&#xff09;–变量变量的命名格式在Java script中变量定义包含两部分1. 变量声明&#xff08;高级JS引擎接下来定义一个变量&#xff09;2. 其他的写法 变量命名的规范&#xff08;遵守&#xff09;变量的练习a. …

【微信】公众号开发

文章目录 概述与微信交互环境准备开发者工具 注册公众号服务器基本配置存取access_token示例代码来源 概述 不同类型公众号主要区别 与微信交互 实际上我们在公众号里的所有操作&#xff0c;都会发送到微信的服务器上&#xff0c;微信服务器将这些动作的具体含义按照一定的…

PWM波输出-定时器输出比较单元

目录 1&#xff0c;前言 2&#xff0c;实现过程 2.1 比较部分 2.2 输出部分 1&#xff0c;前言 电平&#xff0c;作为单片机的“肌肉”&#xff0c;承担着实践单片机的“想法“的重要任务。而PWM波&#xff0c;则是电平这个大类的重中之重&#xff0c;可以说&#xff0c;没…

STM32的芯片无法在线调试的情况分析

问题描述 本博客的目的在于帮助网友尽快地解决问题&#xff0c; 避免浪费时间&#xff0c; 查漏补缺。 在stm32的开发过程中&#xff0c;有时会遇到"STM No Target connected"的错误提示&#xff0c;这说明MDK开发环境无法与目标设备进行通信&#xff0c;导致无法烧…

YOLOv9改进策略 :注意力机制 | 注意力机制与卷积的完美融合 | 最新移动端高效网络架构 CloFormer

💡💡💡本文改进内容: 引入CloFormer 中的 AttnConv,上下文感知权重使得模型能够更好地适应输入内容。相比于局部自注意力机制,引入共享权重使得模型能够更好地处理高频信息,从而提高性能。 💡💡💡注意力机制与卷积的完美融合 AttnConv | 亲测在多个数据集能够…

windows安全中心设置@WindowsDefender@windows安全中心常用开关

文章目录 abstractwindows defender相关服务&#x1f47a; 停用windows Defender临时关闭实时防护使用软件工具关闭defender control(慎用)dismdControl 其他方法使其他杀毒软件注册表修改 保护历史恢复被认为是有病毒的文件添加信任目录,文件,文件类型或进程 abstract window…

算法复习:链表

链表定义 struct ListNode { int val;ListNode *next;ListNode(int x) : val(x), next(nullptr) {} }; 链表的遍历&#xff1a;ListNode phead; while(p!null) pp.next; 找到链表的尾结点&#xff1a;phead; while(p.next!null)pp.next; 链表节点的个数&#xff1a; phead…

java 继承extends

权限 子类会自称父类所有的非私有的成员变量和方法&#xff08;不包括缺省和protected&#xff09;权限修饰符的种类如下&#xff1a; 上面說的protected 方法可以被任意包的子类中使用&#xff0c;但是子类的的实例不能使用&#xff0c;因为没有继承&#xff0c;否则报错。 继…

腾讯云2核4G服务器优惠价格165元一年,限制500GB月流量

腾讯云轻量2核4G5M服务器租用价格165元1年、252元15个月、三年900元&#xff0c;配置为轻量2核4G5M、5M带宽、60GB SSD盘、500GB月流量、上海/广州/北京&#xff0c;腾讯云优惠活动 yunfuwuqiba.com/go/txy 腾讯云轻量2核4G5M服务器租用价格 腾讯云&#xff1a;轻量应用服务器1…

RecyclerView 调用 notifyItemInserted 自动滚动到底部的问题

项目中发现一个奇怪的现象 RecyclerView 加载完数据以后&#xff0c;调用 notifyItemInserted 方法&#xff0c;RecyclerView 会滑动到底部。 简化后的效果图&#xff1a; 因为这个 RecyclerView 的适配器有一个 FootViewHolder&#xff0c;所以怀疑是 FootViewHolder 的问题…

Linux中常用命令(文件、目录和文件压缩)及功能示例

一、Linux关于文件与目录的常用命令及其功能示例 命令: ls 全名: List (列表) 常用选项: -l: 详细列表格式&#xff0c;显示详细信息。-a: 显示所有文件&#xff0c;包括隐藏文件。 功能: 列出目录内容。 示例: ls -la /home 此命令以详细格式列出/home目录中的所有文件&#x…

推荐一本牛逼的入门 Python书!,如何试出一个Python开发者真正的水平

本书详细解说了 Python 语言和编程的本质&#xff0c;无论你是否接触过编程语言&#xff0c;只要是 Python 编程的初学者&#xff0c;都可阅读本书。 本书讲解的内容虽然基础&#xff0c;但并不简单。本书提供了 165 幅图表&#xff0c;可以让大家能够轻松地理解并掌握复杂的概…

踏入网页抓取的旅程:使用 grequests 构建 Go 视频下载器

引言 在当今数字化的世界中&#xff0c;网页抓取技术变得越来越重要。无论是获取数据、分析信息&#xff0c;还是构建自定义应用程序&#xff0c;我们都需要从互联网上抓取数据。本文将介绍如何使用 Go 编程语言和 grequests 库来构建一个简单的 Bilibili 视频下载器&#xff…

UE4_碰撞_射线检测不到物体原因及跳不到圈内的问题

UseSimpleAsComplex 和 UseComplexAsSimple 标记的作用和使用时间。 虚幻引擎 4 中有简单和复杂碰撞形态。 简单碰撞 是基础&#xff0c;如盒体、 球体、胶囊体和凸包。 复杂碰撞 是给定对象的三角网格图。 虚幻引擎 4 会默认创建简单和复杂两种形态&#xff0c;然后基于用户需…

gan zoo: 最新GAN 相关paper/code收集

相关推荐&#xff1a; 简单实现 GAN 简单实现 DCGAN 简单实现 InfoGAN 简单实现 Pix2Pix 一文带你读懂概率生成模型 GPT-1/GPT-2/GPT-3简介 GPT从0到1构建(附视频代码链接) 一文带你读懂变分自编码器(VAEs) 文本引导图像生成模型的演变(DALLE/CLIP/GLIDE) 作者对迄今为止所有的…

Java类和对象练习题

练习一 下面代码的运行结果是&#xff08;&#xff09; public static void main(String[] args){String s;System.out.println("s"s);} 解析&#xff1a;本题中的代码不能编译通过&#xff0c;因为在Java当中局部变量必须先初始化&#xff0c;后使用。所以此处编译不…

JAVAEE之网络原理

1.IP地址 IP地址主要用于标识网络主机、其他网络设备&#xff08;如路由器&#xff09;的网络地址。简单说&#xff0c;IP地址用于定位主机的网络地址。 格式 IP地址是一个32位的二进制数&#xff0c;通常被分割为4个“8位二进制数”&#xff08;也就是4个字节&#xff09;&…

每日一题(leetcode331):验证二叉树的前序序列化——栈

类似消消乐&#xff0c;数字&#xff0b;“#”“#”就可以消成一个“#”&#xff0c;到最后如果栈中只剩一个“#”便说明序列正确。 当然也可以用槽位理解&#xff0c;一个数字出现会消耗一个槽位产生两个槽位&#xff08;即产生一个槽位&#xff09;&#xff0c;一个“#”出现…

企业防止数据泄露的措施有哪些?(企业机密文件防泄密解决方案)

企业防止数据泄露的措施是一个复杂且关键的问题&#xff0c;涉及到企业的核心竞争力和信息安全。 随着信息技术的快速发展&#xff0c;数据泄露事件频发&#xff0c;给企业带来了巨大的经济损失和声誉损害。 企业防止数据泄露的措施有哪些? 首先&#xff0c;企业需要建立健全…