C/C++ 矩阵的QR分解

#include <iostream>
#include <vector>
using namespace std;


int main() /* 矩阵A的QR分解*/
{


    // 动态分配内存
    int m = 3; // 行数
    int n = 3; // 列数


    // 初始化矩阵A
    double A[3][3] = {
        {1, 2, 2},
        {2, 1, 2},
        {1, 2, 1}
    };

    double R[3][3] = { 0 };
    double Q[3][3] = { 0 };



    cout << "A:" << endl; //输出矩阵A
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%.4f ", A[i][j]);
        }
        cout << endl;
    }

    for (int k = 0; k < n; k++)
    {
        double MOD = 0;
        for (int i = 0; i < n; i++)
        {
            MOD += A[i][k] * A[i][k];
        }
        R[k][k] = sqrt(MOD); // 计算A第k列的模长,由公式(4)等于R的对角线元素||A:k||
        for (int i = 0; i < n; i++)
        {
            Q[i][k] = A[i][k] / R[k][k]; // 由公式(2),A第k列标准化之后成为Q的第k列
        }

        for (int i = k + 1; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                R[k][i] += A[j][i] * Q[j][k]; // 由公式(4),计算R的上三角部分
            }
            for (int j = 0; j < n; j++)
            {
                A[j][i] -= R[k][i] * Q[j][k]; // 由公式(1),计算更新A的每一列
            }
        }
    }

    cout << endl;
    cout << "Q:" << endl; //输出矩阵Q
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%.4f ", Q[i][j]);
        }
        cout << endl;
    }

    cout << endl;
    cout << "R:" << endl; //输出矩阵R
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%.4f ", R[i][j]);
        }
        cout << endl;
    }

    return 0;
}




//动态分配内存

//int main3() /* 矩阵A的QR分解*/
//{
//
//
//    // 动态分配内存
//    int m = 3; // 行数
//    int n = 3; // 列数
//    double** A = (double**)malloc(m * sizeof(double*));
//    double** Q = (double**)malloc(m * sizeof(double*));
//    double** R = (double**)malloc(n * sizeof(double*));
//
//    for (int i = 0; i < m; i++) {
//        A[i] = (double*)malloc(n * sizeof(double));
//        Q[i] = (double*)malloc(n * sizeof(double));
//        R[i] = (double*)malloc(n * sizeof(double));
//    }
//
//    // 初始化矩阵A
//    double A_values[3][3] = {
//        {1, 2, 2},
//        {2, 1, 2},
//        {1, 2, 1}
//    };
//
//    for (int i = 0; i < m; i++) {
//        for (int j = 0; j < n; j++) {
//            A[i][j] = A_values[i][j];
//        }
//    }
//
//
//    // 初始化矩阵A
//    double A[3][3] = {
//        {1, 2, 2},
//        {2, 1, 2},
//        {1, 2, 1}
//    };
//
//    double R[3][3] = { 0 };
//    double Q[3][3] = { 0 };
//
//
//
//    cout << "A:" << endl; //输出矩阵A
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < n; j++)
//        {
//            printf("%.4f ", A[i][j]);
//        }
//        cout << endl;
//    }
//
//    for (int k = 0; k < n; k++)
//    {
//        double MOD = 0;
//        for (int i = 0; i < n; i++)
//        {
//            MOD += A[i][k] * A[i][k];
//        }
//        R[k][k] = sqrt(MOD); // 计算A第k列的模长,由公式(4)等于R的对角线元素||A:k||
//        for (int i = 0; i < n; i++)
//        {
//            Q[i][k] = A[i][k] / R[k][k]; // 由公式(2),A第k列标准化之后成为Q的第k列
//        }
//
//        for (int i = k + 1; i < n; i++)
//        {
//            for (int j = 0; j < n; j++)
//            {
//                R[k][i] += A[j][i] * Q[j][k]; // 由公式(4),计算R的上三角部分
//            }
//            for (int j = 0; j < n; j++)
//            {
//                A[j][i] -= R[k][i] * Q[j][k]; // 由公式(1),计算更新A的每一列
//            }
//        }
//    }
//
//    cout << endl;
//    cout << "Q:" << endl; //输出矩阵Q
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < n; j++)
//        {
//            printf("%.4f ", Q[i][j]);
//        }
//        cout << endl;
//    }
//
//    cout << endl;
//    cout << "R:" << endl; //输出矩阵R
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < n; j++)
//        {
//            printf("%.4f ", R[i][j]);
//        }
//        cout << endl;
//    }
//
//    // 释放内存
//    for (int i = 0; i < m; i++) {
//        free(A[i]);
//        free(Q[i]);
//    }
//    for (int i = 0; i < n; i++) {
//        free(R[i]);
//    }
//    free(A);
//    free(Q);
//    free(R);
//
//    return 0;
//}





//
//int main1() /* 矩阵A的QR分解*/
//{
//    vector<vector<double>> a = { {1,2,2},{2,1,2},{1,2,1} };
//    int n = a.size();
//    vector<vector<double>> q(n, vector<double>(n));
//    vector<vector<double>> r(n, vector<double>(n));
//
//
//
//    cout << "A:" << endl; //输出矩阵A
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < n; j++)
//        {
//            printf("%.4f ", a[i][j]);
//        }
//        cout << endl;
//    }
//
//    for (int k = 0; k < n; k++)
//    {
//        double MOD = 0;
//        for (int i = 0; i < n; i++)
//        {
//            MOD += a[i][k] * a[i][k];
//        }
//        r[k][k] = sqrt(MOD); // 计算A第k列的模长,由公式(4)等于R的对角线元素||A:k||
//        for (int i = 0; i < n; i++)
//        {
//            q[i][k] = a[i][k] / r[k][k]; // 由公式(2),A第k列标准化之后成为Q的第k列
//        }
//
//        for (int i = k + 1; i < n; i++)
//        {
//            for (int j = 0; j < n; j++)
//            {
//                r[k][i] += a[j][i] * q[j][k]; // 由公式(4),计算R的上三角部分
//            }
//            for (int j = 0; j < n; j++)
//            {
//                a[j][i] -= r[k][i] * q[j][k]; // 由公式(1),计算更新A的每一列
//            }
//        }
//    }
//
//    cout << endl;
//    cout << "Q:" << endl; //输出矩阵Q
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < n; j++)
//        {
//            printf("%.4f ", q[i][j]);
//        }
//        cout << endl;
//    }
//
//    cout << endl;
//    cout << "R:" << endl; //输出矩阵R
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < n; j++)
//        {
//            printf("%.4f ", r[i][j]);
//        }
//        cout << endl;
//    }
//
//    return 0;
//}
//

Matlab

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Transformer-BiGRU多特征输入时间序列预测(Pytorch)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Transformer-BiGRU多特征输入时间序列预测 可以做风电预测&#xff0c;光伏预测&#xff0c;寿命预测&#xff0c;浓度预测等。 Python代码&#xff0c;基于Pytorch编写 1.多特征输入单步预测&#xff0c;多步预测&a…

Unity hub登录时一直无法进入license

直接只卸载unity hub&#xff0c;然后重新下载unity hub安装即可&#xff0c;重新登录即可。 有时会自动关联安装的位置&#xff0c;如果不能&#xff0c;则手动定位添加即可。 网上各种修复的方法操作费时费力。

【MySQL】架构

1. MySQL架构基本理解 与餐厅就餐类比理解 每次数据库查询就像一次餐厅服务 应用程序发出查询相当于点菜MySQL解析和执行查询&#xff0c;后厨根据订单制作食物事务管理保证数据的一致性&#xff0c;类似于结账的时候保证账单正确查询的时候考虑优化器&#xff0c;类似于厨师选…

4款专业音频在线剪辑工具帮你开启创意之路。

音频在线剪辑工具能够为我们提供很大的便利&#xff0c;对于不管是专业的音乐制作人还是音频创作爱好者来说&#xff0c;都能借助一些音频编辑工具来充分发挥自己的创意。所以这一次&#xff0c;我要给大家介绍几个专业方便的音频剪辑工具。 1、福昕音频在线 直达链接&#x…

【热门主题】000015 大数据治理:开启数据价值新纪元

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…

后端Java学习:springboot之文件上传(阿里云OSS存储)

一、什么是阿里云存储&#xff1f; 阿里云对象存储OSS&#xff08;Object Storage Service&#xff09;&#xff0c;是一款海量、安全、低成本、高可靠的云存储服务。使用OSS&#xff0c;您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。 二、阿里云…

HarmonyOS应用开发者基础认证——初级闯关习题参考答案大全

相关文章 HarmonyOS应用开发者中级认证——中级闯关习题参考答案大全 HarmonyOS应用开发者高级认证——高级闯关习题参考答案大全 文章目录 HarmonyOS第一课 HarmonyOS介绍判断题单选题多选题 HarmonyOS第一课 DevEco Studio的使用判断题单选题多选题 HarmonyOS第一课 ArkTS语法…

blender 小车建模 建模 学习笔记

一、学习blender视频教程链接 案例4&#xff1a;狂奔的小车_建模_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bt4y1E7qn?p14&spm_id_from333.788.videopod.episodes&vd_sourced0ea58f1127eed138a4ba5421c577eb1 二、开始建模 &#xff08;1&#xff09;创…

ros使用rviz加载雷达扫描数据

roslaunch wpr_simulation wpb_simple.launch使用rviz打开rviz rviz

小米开放式耳机值得买吗?小米、南卡、倍思开放式耳机横评对比!

​最近双十一活动已经开始了&#xff0c;大家挑好自己想买的开放式耳机了吗&#xff1f;不知不觉现在用开放式耳机的人越来越多了&#xff0c;这类耳机以高佩戴舒适度为优势&#xff0c;比入耳式耳机更加适配运动场景&#xff0c;作为一个数码博主&#xff0c;同时我最近也开始…

QT中使用图表之QChart绘制X轴为日期时间轴的折线图

显然X轴是日期时间轴的话&#xff0c;那么我们使用的轴类就得是QDateTimeAxis QChart中日期时间轴的精度是毫秒 因此图表里面的数据的x值需要是一个毫秒数&#xff0c;才能显示出来 --------------------------------------------------------------------------------------…

Chrome浏览器控制台替换接口返回内容

1.打开Chrome DevTools&#xff1a; 使用快捷键F12或右键点击页面并选择“检查”来打开Chrome DevTools。 2.导航到Network面板&#xff1a; 在DevTools的顶部菜单中&#xff0c;选择“Network”&#xff08;网络&#xff09;面板以监视网络请求。 3.发起目标请求&#xff1a; …

5G NR NARFCN计算SSB中心频率MATLAB实现

本期给大家带来5G NR中已知绝对射频信道号NARFCN如何计算SSB的中心频率&#xff0c;用MATLAB实现&#xff0c;参考3GPP 38.104 下图是NARFCN与SSB中心频率换算关系&#xff0c;其中NREF就是NARFCN。 函数输出频率的单位是MHZ&#xff0c;输入是NARFCN。 有不清楚的地方欢迎来…

Docker搭建DVWA靶场以及刷题记录

Docker搭建DVWA靶场以及刷题记录 Docker搭建DVWA靶场以及刷题记录靶场搭建 刷题记录SQL InjectionLowMediumHighImpossible SQL Injection(Blind)LowMediumHigh XSS (Reflected)LowMediumHigh XSS (Stored)LowMediumHigh File UploadLowMediumHigh Docker搭建DVWA靶场以及刷题记…

跨平台开发支付组件,实现支付宝支付

效果图&#xff1a; custom-payment &#xff1a; 在生成预付订单之后页面中需要弹出一个弹层&#xff0c;弹层中展示的内容为支付方式&#xff08;渠道&#xff09;&#xff0c;由用户选择一种支付方式进行支付。 该弹层组件是以扩展组件 uni-popup 为核心的&#xff0c;关于…

python debug作业

任务类型任务内容预计耗时闯关任务Leetcode 383(笔记中提交代码与leetcode提交通过截图)20mins闯关任务Vscode连接InternStudio debug笔记10mins可选任务pip安装到指定目录10mins leetcode题目解析&#xff1a; 解题思路 字符统计&#xff1a;使用 Python 的 Counter 类统计 ra…

【PyCharm配置Conda的虚拟环境】

conda create了一个新的虚拟环境&#xff0c;想在PyCharm里面使用这个环境&#xff0c;但是怎么都添加不上。 解决办法&#xff0c;把conda executable选择为conda安装目录下的condabin下的conda.bat文件&#xff0c;成功&#xff01;

加载视频显示 - python 实现

#-*-coding:utf-8-*- # date:2021-03-21 # Author: DataBall - Xian # Function: 加载视频并显示import cv2 if __name__ "__main__":#加载视频cap cv2.VideoCapture(./video/1.mp4)while True:ret, img cap.read()# 获取相机图像if ret True:# 如果 ret 返回值为…

【大数据学习 | kafka】kafka的整体框架与数据结构

1. kafka的整体框架 首先kafka启动以后所有的broker都会向zookeeper进行注册&#xff0c;在/brokers/ids中以列表的形式展示所有的节点&#xff0c;在/controller节点中使用独享锁实现broker的选举&#xff0c;其中一个机器为主节点。其他的为从节点&#xff0c;选举的根本原则…

磁盘的分区

硬盘管理 硬盘的概念 硬盘是一种计算机的存储设备&#xff0c;通常是由一个或多个磁性盘片组成。硬盘既可以安装在计算机的内部&#xff0c;也可以外接计算机 硬盘主要是用来保存数据的 数据包括&#xff1a;操作系统&#xff0c;应用程序&#xff0c;文档多媒体文件等等 计算…