-
matlab复数矩阵的运算,MATLAB进行大容量复数矩阵(complex double matrix)运算时效率低的解决办法...
2021-04-22 16:23:43今天遇到一个问题,有一个4333*1的**complex double 矩阵**,进行相关运算时候,发现matlab运行出不来结果,于是就开始着手解决这个问题,后来参考很多资料,总结了两种方案,比较得出第二种方案更佳:首先思路都是...今天遇到一个问题,有一个4333*1的**complex double 矩阵**,进行相关运算时候,发现matlab运行出不来结果,于是就开始着手解决这个问题,后来参考很多资料,总结了两种方案,比较得出第二种方案更佳:
首先思路都是先将这个变量矩阵保存为.dat的文件,然后下次用到时候再引用出来。用到语句是:
fid_r=fopen('test_111.dat','w'); %创建文件test_111.dat
fwrite(fid_r,rc_e,precision); %将rc_e变量写入fid_r,即存入变量test_111.dat中
fid_r=fopen('test_111.dat','r');%读数据文件
data_real = fread(fid_r,Nr,precision);%将数据文件test_111.dat写入data_real
1.一开始为了图省事,我把这个complex矩阵存到一个dat文件中,但是后面在for循环中调用时候,又会运行很慢! 这里面在存储dat文件时候,需要调用一个Des_conv函数,下面会说到。
2.另一种思路,把complex数据分成实部,虚部存到两个dat文件中,后面for循环用到时候也是先分别调用出来,再用y=data1+j*data2的形式构建原来complex数据。这样效率大大提高了! 当然在存储时候,也用到了Des_conv函数。
【Des_conv函数】:在size比较大的复数矩阵存储时候,如果直接存储会偶尔出错,并且每运行一次就有一次新结果。将文件A中的矩阵分成4块来转置存储到B中,实现了矩阵的快速存储。附上函数代码:
function RDS_conv(src,dst,row,column)
% 实现将文件src中的矩阵分成4块来转置存储到dst中,不必考虑M是否为4的整数倍。
BYTE = 4;
precision = 'float32';
SUB_NUM = 4; % 将矩阵分成4块来处理
block = fix(column/SUB_NUM); % 向零取整
reml = rem(column,SUB_NUM); % column/CON_LINE取余
fs = fopen(src,'r');
fd = fopen(dst,'w');
fseek(fs,0,-1);
fseek(fd,0,-1);
temp = zeros(row,block);
for jj = 1 : SUB_NUM
fseek(fs,0,-1);
beginN = (jj - 1)*block*BYTE;
endN = (SUB_NUM - jj)*block*BYTE + reml*BYTE;
for ii = 1 : row
fseek(fs,beginN,0);
kkk = fread(fs,block,precision);
temp(ii,:) = kkk.';
fseek(fs,endN,0);
end
fwrite(fd,temp,precision);
end
if (reml>0)
temp_rem = zeros(row,reml);
fseek(fs,0,-1);
for ii = 1 : row
fseek(fs,SUB_NUM*block*BYTE,0);
ggg = fread(fs,reml,precision);
temp_rem(ii,:) = ggg.';
end
fwrite(fd,temp_rem,precision);
end
fclose('all');
disp('end of matrix_rotate')
最后把整个处理的大致代码附上:
fid_r=fopen('data_real.dat','r');
fid_i=fopen('data_image.dat','r');
/* 中间复数变量RC的计算过程 */
fwrite(fid_r,real(RC),precision);
fwrite(fid_i,imag(RC),precision);
RDS_conv('data_real.dat','data_real_ro.dat',Na,Nr_effect); %分块存储实部
RDS_conv('data_image.dat','data_image_ro.dat',Na,Nr_effect);%分块存储虚部
fid_r=fopen('data_real.dat','r');
fid_i=fopen('data_image.dat','r');
data_real_range= fread(fid_r,Nr,precision);
data_image_range = fread(fid_i,Nr,precision);
data_last=(data_real_range+1i*data_image_range).';
/* 后面计算过程 */
当然,这只是我遇到的matlab运行结果慢时候的一种情形解决方案,有其他问题导致运行效率低的同学,也可以参考这篇博文:提高matlab运行效率:https://blog..net/pursh0000/article/details/51314209
-
matlab 矩阵_MATLAB矩阵运算与方程组求解(第二节)
2020-12-04 15:45:251前言谈谈关于MATLAB的矩阵算数运算。上节仿真结果得到出一个五元一次方程组,而且数据还有复数,这样的仿真组人工计算很难完成,那就不得不借助MATLAB强大的计算功能。本算例建立.m文件处理数据,可以快速得出多个...
1前言谈谈关于MATLAB的矩阵算数运算。上节仿真结果得到出一个五元一次方程组,而且数据还有复数,这样的仿真组人工计算很难完成,那就不得不借助MATLAB强大的计算功能。本算例建立.m文件处理数据,可以快速得出多个未知变量解。下面介绍介绍矩阵运算与非齐次线性方程组求解。
2 MATLAB矩阵算术运算
在这里先纠正一个错误,第一节中“Scope工具栏还原方法”中
set(gcf,'menubar','figure')重复了两遍,需要将第一条命令改为:
set(0,'ShowHiddenHandles','On')。
1、矩阵加减运算
同型矩阵通过“+”,“-”直接完成运算。
clcclearA = [1.1 + 0.2i 3.2 - 2.1i; 0.8 - 0.3i 9.3 + 0.6i];B = [1.9 + 0.9i 9.2 - 6.1i; 0.1 - 4.3i 5.3 + 4.6i];C = A + B;D = A - B;vpa(C,5)vpa(D,5)
运行结果
2、矩阵乘法运算
矩阵乘法分为直接相乘(A1*B1)和点乘(A.*B),直接相乘要求A矩阵的列数等于B矩阵的行数,点乘是两个同型矩阵对应元素相乘。
A1 = [1.1 + 0.2i 3.2 - 2.1i 0.6 - 4.4i;0.8 - 0.3i 9.3 + 0.6i 1.4 + 3.1i];B1 = [1.9 + 0.9i 9.2 - 6.1i;0.1 - 4.3i 5.3 + 4.6i;3.1 + 0.4i 5.2 - 1.3i];C1 = A1 * B1;D1 = A .* B;vpa(C1,5)vpa(D1,5)
运行结果
3、矩阵的除法矩阵除法分为左除(A1\B2)、右除(A1/B2)和点除(A1./B3)。左除是求解Ax=b的解、右除是求解xA=b的解、点除表示同型矩阵对应元素相除。
A1 = [1.1 + 0.2i 3.2 - 2.1i 0.6 - 4.4i; 0.8 - 0.3i 9.3 + 0.6i 1.4 + 3.1i; 2.8 - 0.8i 2.3 + 1.6i 1.9 + 2.1i];B2 = [4 2 7]';B3 = [4 1 3; 2 4 5; 7 3 8]';C2 = A1 \ B2;D2 = A1 / B3; E2 = A1 ./ B3;vpa(C2,5)vpa(D2,5)vpa(E2,5)
运行结果
其他运算不再举例参考书籍:1.MATLAB.&Simulink开发实例系列丛书 新编MATLAB/Simulink自学一本通2.MATLAB的工程数学应用3非齐次线性方程组求解1、非齐次线性方程求解问题
例:五元一次方程求解,形如Ax=b。
A1x=B4
A1 = [1.1 + 0.2i 0 0 0 0.6 - 4.4i; 0 9.3 + 0.6i 0 0 1.4 + 3.1i; 0 0 2.8 - 0.8i 0 1.9 + 2.1i; 0 0 4.6 - 0.2i 0 1.5 + 0.6i; 0 0 0 2.3 + 0.5i 2.3 + 9.2i];B4 = [2 4 1 6 3]';format rationalE3 = A1 \ B4; vpa(E3,5)
运行结果
其他形式不再举例。往期精选
MATLAB/simulink仿真入门(第一节)
LLC谐振变换器原理(第一部分)
LLC谐振变换器原理(第三部分)
LLC谐振变换器(第五部分)TL431
1kW LLC谐振参数计算书
对称半桥LLC工作过程分析
对称半桥与不对称半桥对比
end
您的点赞
就是我的动力
研途
你的“在看”就是最大的鼓励!
-
matlab非同秩矩阵相乘_MATLAB基本矩阵运算
2020-12-19 11:14:33学计算功能Abs(x)实数的绝对值或复数的幅值floor(x)对x朝-∞方向取整Acos(x)反余弦arcsinxgcd(m,n)求正整数m和n的最大公约数acosh(x)反双曲余弦arccoshximag(x)求复数x的虚部angle(x)在四象限内求复数x的相角lcm(m...学
计
算
功
能
Abs(x)
实数的绝对值或复数的幅值
floor(x)
对
x
朝
-
∞方向取整
Acos(x)
反余弦
arcsin
x
gcd(m
,
n
)
求正整数
m
和
n
的最大公约数
acosh(x)
反双曲余弦
arccosh
x
imag(x)
求复数
x
的虚部
angle(x)
在四象限内求复数
x
的相角
lcm(m
,
n)
求正整数
m
和
n
的最小公倍数
asin(x)
反正弦
arcsin
x
log(x)
自然对数(以
e
为底数)
asinh(x)
反双曲正弦
arcsinh
x
log10(x)
常用对数(以
10
为底数)
atan(x)
反正切
arctan
x
real(x)
求复数
x
的实部
atan2(x,y)
在四象限内求反正切
Rem(m
,
n)
求正整数
m
和
n
的
m/n
之余数
atanh(x)
反双曲正切
arctanh
x
round(x)
对
x
四舍五入到最接近的整数
ceil(x)
对
x
朝
+
∞方向取整
sign(x)
符号函数:求出
x
的符号
conj(x)
求复数
x
的共轭复数
sin(x)
正弦
sin
x
cos(x)
余弦
cos
x
sinh(x)
反双曲正弦
sinh
x
cosh(x)
双曲余弦
cosh
x
sqrt(x)
求实数
x
的平方根:
x
exp(x)
指数函数
xe
tan(x)
正切
tan
x
fix(x)
对
x
朝原点方向取整
tanh(x)
双曲正切
tanh
x
2
、常量与变量
系统的变量命名规则:
变量名区分字母大小写;
变量名必须以字母打头,
其后可以是任
意字母,
数字,
或下划线的组合。
此外,
系统内部预先定义了几个有特殊意义和用途的变量,
见下表:
特殊的变量、常量
取
值
-
MATLAB进行大容量复数矩阵(complex double matrix)运算时效率低的解决办法
2019-03-19 23:57:06今天遇到一个问题,有一个4333*1的**complex double 矩阵**,进行相关运算时候,发现matlab运行出不来结果,于是就开始着手解决这个问题,后来参考很多资料,总结了两种方案,比较得出第二种方案更佳: 首先思路都...今天遇到一个问题,有一个4333*1的**complex double 矩阵**,进行相关运算时候,发现matlab运行出不来结果,于是就开始着手解决这个问题,后来参考很多资料,总结了两种方案,比较得出第二种方案更佳: 首先思路都是先将这个变量矩阵保存为.dat的文件,然后下次用到时候再引用出来。用到语句是: fid_r=fopen('test_111.dat','w'); %创建文件test_111.dat fwrite(fid_r,rc_e,precision); %将rc_e变量写入fid_r,即存入变量test_111.dat中 fid_r=fopen('test_111.dat','r');%读数据文件 data_real = fread(fid_r,Nr,precision);%将数据文件test_111.dat写入data_real 1.一开始为了图省事,我把这个complex矩阵存到一个dat文件中,但是后面在for循环中调用时候,又会运行很慢! 这里面在存储dat文件时候,需要调用一个Des_conv函数,下面会说到。 2.另一种思路,把complex数据分成实部,虚部存到两个dat文件中,后面for循环用到时候也是先分别调用出来,再用y=data1+j*data2的形式构建原来complex数据。这样效率大大提高了! 当然在存储时候,也用到了Des_conv函数。 【Des_conv函数】:在size比较大的复数矩阵存储时候,如果直接存储会偶尔出错,并且每运行一次就有一次新结果。将文件A中的矩阵分成4块来转置存储到B中,实现了矩阵的快速存储。附上函数代码:
function RDS_conv(src,dst,row,column) % 实现将文件src中的矩阵分成4块来转置存储到dst中,不必考虑M是否为4的整数倍。 BYTE = 4; precision = 'float32'; SUB_NUM = 4; % 将矩阵分成4块来处理 block = fix(column/SUB_NUM); % 向零取整 reml = rem(column,SUB_NUM); % column/CON_LINE取余 fs = fopen(src,'r'); fd = fopen(dst,'w'); fseek(fs,0,-1); fseek(fd,0,-1); temp = zeros(row,block); for jj = 1 : SUB_NUM fseek(fs,0,-1); beginN = (jj - 1)*block*BYTE; endN = (SUB_NUM - jj)*block*BYTE + reml*BYTE; for ii = 1 : row fseek(fs,beginN,0); kkk = fread(fs,block,precision); temp(ii,:) = kkk.'; fseek(fs,endN,0); end fwrite(fd,temp,precision); end if (reml>0) temp_rem = zeros(row,reml); fseek(fs,0,-1); for ii = 1 : row fseek(fs,SUB_NUM*block*BYTE,0); ggg = fread(fs,reml,precision); temp_rem(ii,:) = ggg.'; end fwrite(fd,temp_rem,precision); end fclose('all'); disp('end of matrix_rotate')
最后把整个处理的大致代码附上:
fid_r=fopen('data_real.dat','r'); fid_i=fopen('data_image.dat','r'); /* 中间复数变量RC的计算过程 */ fwrite(fid_r,real(RC),precision); fwrite(fid_i,imag(RC),precision); RDS_conv('data_real.dat','data_real_ro.dat',Na,Nr_effect); %分块存储实部 RDS_conv('data_image.dat','data_image_ro.dat',Na,Nr_effect);%分块存储虚部 fid_r=fopen('data_real.dat','r'); fid_i=fopen('data_image.dat','r'); data_real_range= fread(fid_r,Nr,precision); data_image_range = fread(fid_i,Nr,precision); data_last=(data_real_range+1i*data_image_range).'; /* 后面计算过程 */
当然,这只是我遇到的matlab运行结果慢时候的一种情形解决方案,有其他问题导致运行效率低的同学,也可以参考这篇博文:提高matlab运行效率:https://blog.csdn.net/pursh0000/article/details/51314209
-
C语言实现实数和复数矩阵及其各种运算(一)
2020-08-15 15:52:42最近在企业实习,花了三个星期的时间肝了一个室内定位算法(雏形,还未优化),实现matlab和C的联写、联调,其难点我认为在于矩阵的各种运算,C++中有Eigen库可用,以前在学slam和做课题时候在Ubuntu下用过一段时间... -
C语言实现实数和复数矩阵及其各种运算(三)
2020-08-16 21:54:49本章开始,开始详细讲解实数和复数矩阵的转置、复制、行列式、代数余子式、逆等运算,并给出函数和测试demo的C代码,以及与matlab计算的结果; 并且,本章出现了我在编写函数、后期与matlab联调跑数据时候出现... -
C语言实现实数和复数矩阵及其各种运算(四)
2020-08-17 15:08:09本章开始,笔者将详细讲解实数和复数矩阵的模(范数)、协方差等运算,并给出函数和测试demo的C代码,以及与matlab计算的结果; 并且,本章也出现了我在编写函数、后期与matlab联调跑数据时候踩到的一个坑,读者稍微... -
C语言实现实数和复数矩阵及其各种运算(五)
2020-08-17 18:51:56本章开始,笔者将详细讲解矩阵的QR分解、特征值、特征向量等运算,并给出函数和测试demo的C代码,以及与matlab计算的结果; 并且,本章相当于前面几章的大杂烩,前面所有的结构体、宏定义、函数本章基本全部都有用到... -
Matlab笔记之符号运算中的矩阵转置
2020-12-14 15:03:43Matlab符号运算中的矩阵转置 转置向量或矩阵 B = A.' B = transpose(A) 说明 B =A.'返回A的非共轭转置,即每个元素的行和列索引都会互换。如果A包含复数元素,则A.'不会影响虚部符号。例如,如果A(3,2)是1+2i且... -
MATLAB—面向复数和数组的基本运算
2020-02-28 13:27:44文章目录一.MATLAB基本运算说明二.面向复数的计算特点1.基础知识2.对复数的基本操作3.复数的开方问题二.面向数组1....MATLAB面向复数设计,其所有运算都定义在复数域上,所以对于方根运算,运算只... -
复数矩阵的转置、共轭、共轭转置
2020-03-23 10:18:58复数矩阵的转置分【共轭转置】和【点转置】两种,如果不加说明默认指的是【共轭转置】。 在 MATLAB 中,点转置运算、共轭运算和共轭转置运算分别如下所示: ... -
怎样在matlab工作空间中导入txt文件里的复数矩阵?
2019-04-08 22:37:39如图这样的txt文档,我该如何导入到MATLAB的工作区,形成数组,然后对这些数进行运算。 如下是我找到的一段代码 ``` clc; clear; fin=fopen('222.txt','r'); result={}; while feof(fin)==0 str=fgetl... -
【MATLAB】MATLAB数据类型及矩阵运算
2020-07-12 12:37:19matlab数据类型 数值型数据 整数型: 带符号的整数 -128~127 不带符号的整数 0~255 浮点型数据: 单精度数据 双精度数据 数据类型的函数: single(x):将数据x转化为单精度数据的数值 double(x):将数据x... -
2021/3/1+MATLAB+基本的数学运算与矩阵运算笔记
2021-03-02 11:02:17MATLAB基本语法 变量 1.MATLAB中的变量不需要声明 2.使用 “ = ” 为变量赋值 变量名 1.与大多数编程语言相同,MATLAB中的变量名是大小写敏感的(也就是说大写A与...上一句的运算的结果(answer) i 和 j 复数算子 -
MATLAB学习笔记(二)——主要是MATLAB的矩阵知识
2019-10-05 11:20:40PS:主要是讲解矩阵的相应的实现方法,其实... (一)MATLAB矩阵 一、矩阵的建立 1、直接输入法创建: 还可以有复数矩阵的建立,有两种方法: (1)直接按照直接输入法来建立矩阵,但是元素可以直接打成复数的形... -
matlab中fft2计算复数矩阵和实际公式计算结果对不上是怎么回事?
2018-11-09 03:27:11Ez是一个关于phi和z的复数矩阵,假设行表示phi,列表示z,phi取值范围为-180~180(2度一个点),n取值范围为-90~90,z取值范围为-2.5~2.5(0.05一个点),h取值范围为-50~50,那么我根据公式求和运算计算结果和直接... -
MATLAB-S3数值运算
2020-08-21 15:36:36数值运算3 向量和矩阵3.1 向量3.1.1 向量的创建和引用3.1.2 向量的运算3.2 矩阵3.2.1 矩阵的创建3.2.2 矩阵的操作函数3.2.3 矩阵元素的引用3.2.4 矩阵的基本运算3.2.5 矩阵的操作函数3.2.5 求解线性方程组3.3 多项式... -
MATLAB(自动控制原理)第2章_MATLAB语言程序设计基础_03矩阵的代数运算
2020-08-01 20:28:59矩阵的共轭转置(也叫Hermite转置):代表共轭转置,即转置的同时,对每个复数做共轭处理。在MATLAB中的命令为:C = A’ 矩阵的直接转置:MATLAB中的命令为:C = A.’ 矩阵左除:如果A为非奇异方阵,那么得到的... -
MATLAB基础入门(数据类型、基本函数、矩阵运算、向量运算、字符串)
2019-07-23 23:32:28MATLAB基础2.1 基本概念2.1.1 MATLAB数据类型概述2.1.2 整数类型2.1.3 浮点数类型2.1.4 复数2.1.5 无穷量(Inf)和非数值量(NaN)2.1.6 数值类型的显示格式2.1.7 确定数值类型的函数2.1.8 常量与变量2.1.9 标量、向量、... -
MATLAB数据及其运算
2020-09-23 11:25:52MATLAB数据及其运算 数据特点 最基本、最重要的数据对象:矩阵。 数据类型: 整形:有符号、无符号 浮点型: 复数 -
matlab数组运算
2015-05-09 21:24:01一个个标量数据被组织成矩形或长方形的阵列集合,这就是数组(Array)。而每次调用命令将同时地加在数组所含的每个标量元素 上,构成所谓的数组运算。...MatLab是以复数矩阵作为基本的运算单元,向量和标量都作为特 -
matlab-数值数组及其运算.docx
2020-07-10 09:12:51数值数组(Numeric Array)和数组运算(Array Operation)是Matlab的核心运算 内容 一导言 二一维数组 (向量) 三二维数组矩阵 四高维数组 五MATLAB 的运算符 一导言 1数组的定义 数组是指一组实数或复数排成的长方阵列... -
MATLAB数据及其运算(一)
2020-07-01 21:20:16矩阵是MATLAB最基本,最重要的数据类型,MATLAB的大部分运算或命令都是在矩阵运算的意义下执行的,而且这种运算定义在复数域上。向量和单个数据都可以作为矩阵的特例来处理。 数据类型 1.矩阵 2.整型 带符号整数... -
MATLAB入门之矩阵的基本操作
2019-10-07 16:09:30二,简单的数乘运算 1,如果算式比较简单可以直接进行敲写 2,如果算式较为繁琐,可以使用变量,进行逐级运算 三,变量 1,大小写字母为不同的变量 2,变量命名不能用数字开头 四,一些关键字 ans i,j:复数 inf:∞... -
matlab基础----复数表示
2020-09-28 23:22:15复数矩阵的表示 直接创建: 由复数元素构造复数矩阵 利用两个矩阵分别做实部和虚部构造新的复数矩阵 复数绘图 直角坐标图 极坐标图 t=0:0.05:2*pi; y=t+i*t.*sin(t); r=abs(y); theta=angle(y); subplot(1,... -
matlab输入单行矩阵_MATLAB:基本操作和矩阵输入
2020-12-24 12:12:19思维导图四则运算:(^,*,/,+,-)不会使用的功能和函数通过:help+函数/功能查询。函数嵌套。变量变量不可以以数字开头(2A),但是变数开头可以有数字(A2)。区分大小写。who:查看已有变量;whos:查看已有变量大小... -
小白学习matlab基础运算
2020-12-05 16:26:18##Matlab中运算 (1)矩阵求逆 inv (2)求取矩阵行列式值 det (3)提取矩阵对角元素 diag (4)矩阵的转置 ‘ #矩阵的其他操作 1.求矩阵的尺寸 size(A) 2.求绝对值 abs,返回每个元素的绝对值 3. 矩阵每一列的... -
matlab计算一组数的函数值_「数学建模」MATLAB的数值计算
2020-12-20 03:58:01实验二:MATLAB的数值计算一、实验目的1、学习和掌握基于MATLAB的矩阵(数组)的创建、编辑与保存方法,加深对MATLAB矩阵、数组基本概念的理解,熟悉MATLAB创建矩阵(数组)的命令规则,掌握复数矩阵的创建与运用。...