2.10、matlab中字符、数字、矩阵、字符串和元胞合并为字符串并将字符串以不同格式写入读出excel

1、前言

在 MATLAB 中,可以使用不同的数据类型(字符、数字、矩阵、字符串和元胞)合并为字符串,然后将字符串以不同格式写入 Excel 文件。

以下是一个示例代码,展示如何将不同数据类型合并为字符串,并以不同格式写入 Excel 文件:

% 创建不同类型的数据 
strData = 'Hello, ';
 numData = 2021; matrixData = magic(3); 
strData2 = 'world!'; 
cellData = {strData, numData, matrixData, strData2}; 

% 合并不同类型的数据为一个字符串 
fullString = strcat(strData, num2str(numData), sprintf('\n'), strData2); 

% 创建一个 Excel 文件 
filename = 'output.xlsx'; sheet = 'Sheet1';

 % 写入数据到 Excel 文件 
xlswrite(filename, strData, sheet, 'A1'); 
xlswrite(filename, num2str(numData), sheet, 'A2'); 
xlswrite(filename, matrixData, sheet, 'A3'); xlswrite(filename, strData2, sheet, 'A7'); xlswrite(filename, cellData, sheet, 'A8'); xlswrite(filename, fullString, sheet, 'A12'); 

% 读取 Excel 文件中的数据 data = xlsread(filename, sheet); disp('数据已成功写入并读取。'); disp(data);

请注意,在上面的示例中,我们首先创建了不同类型的数据(字符、数字、矩阵、字符串和元胞),然后将它们合并为一个字符串 fullString。接着,我们使用 xlswrite 函数将这些数据以不同格式写入了 Excel 文件,并最后读取了写入的数据以进行验证。

在实际应用中,您可以根据需要调整数据类型和写入的位置。

2、不同数据类型的赋值

1)数字、字符、矩阵、元胞和字符串的赋值

说明

"="等号进行赋值运算

2)代码:

a=1%数字
b='2'%字符
c=[3,4]%矩阵
d={5}%元胞
e="陕"%字符串

a =
     1
b =
    '2'
c =
     3     4
d =
  1×1 cell 数组
    {[5]}
e = 
    "陕"

3、数字转换为字符

1)数字1转换为字符’1‘

num2str()函数简介

在 MATLAB 中,num2str() 函数用于将数值转换为相应的字符串形式。这个函数的语法如下:

str = num2str(number)

其中,number 是要转换为字符串的数值,可以是标量、向量、矩阵等。

num2str() 函数会将输入的数值转换为相应的字符串形式,并返回一个包含该字符串的字符数组(即字符串变量)。转换的字符串可能包含小数点、指数符号等,具体形式取决于输入的数值和 MATLAB 的默认格式设置。

以下是一个简单的示例,展示如何使用 num2str() 函数将数值转换为字符串:

% 定义一个数值 
number = 123.456; 

% 使用 num2str() 函数将数值转换为字符串 
str = num2str(number); disp(str);

在这个示例中,number 变量包含数值 123.456,num2str() 函数将这个数值转换为字符串并存储在变量 str 中,然后输出这个字符串。

通过 num2str() 函数,您可以方便地将数值转换为字符串,这在处理输出、文件写入等场景中非常有用。

2)代码:

a=1%数字
g=num2str(a)%数字转换为字符

a =
     1
g =
    '1'

4、 矩阵元素转换为字符

1)矩阵中的数字元素转换为字符

说明

num2str()函数实现

2)代码:

c=[3,4]%矩阵
g1=num2str(c(1,1))%矩阵数字转换为字符
g2=num2str(c(1,2))%矩阵数字转换为字符

c =
     3     4
g1 =
    '3'
g2 =
    '4'

 5、元胞转换为字符

1)元胞元素先转换为数字,再将数字转换为字符

cell2mat()函数简介

在 MATLAB 中,cell2mat() 函数用于将元胞数组中的元素连接成一个矩阵或者连接成一个字符数组。这个函数的语法如下:

M = cell2mat(C)

其中,C 是输入的元胞数组,M 是输出的矩阵或字符数组。

  • 如果输入的元胞数组 C 中的每一个元素都是同样大小的数值矩阵,cell2mat() 函数将这些矩阵按列连接成一个更大的矩阵,并返回这个矩阵。
  • 如果输入的元胞数组 C 中的每一个元素都是字符数组,cell2mat() 函数将这些字符数组连接成一个更大的字符数组,并返回这个字符数组。

以下是一个简单示例,展示如何使用 cell2mat() 函数:

% 创建一个包含数值矩阵的元胞数组 
numCell = { [1, 2; 3, 4], [5, 6; 7, 8] }; 
% 使用 cell2mat() 将数值矩阵连接成一个更大的矩阵 
numMat = cell2mat(numCell); disp(numMat); 
% 创建一个包含字符数组的元胞数组 
strCell = { 'hello', 'world' }; 
% 使用 cell2mat() 将字符数组连接成一个更大的字符数组 
strArray = cell2mat(strCell); 
disp(strArray);

在这个示例中,我们首先创建了两个元胞数组,一个包含数值矩阵,一个包含字符数组。然后,我们分别使用 cell2mat() 函数将数值矩阵连接成一个更大的矩阵,将字符数组连接成一个更大的字符数组,并输出结果。

通过 cell2mat() 函数,您可以方便地将元胞数组中的元素连接为矩阵或字符数组,便于进行后续的处理或操作。

2)代码:

d={5}%元胞
g3=cell2mat(d)%元胞变数字
g4=num2str(g3)

d =
  1×1 cell 数组
    {[5]}
g3 =
     5
g4 =
    '5'

6、字符合并

1)strcat()函数合并字符为字符串

strcat()函数简介

在 MATLAB 中,strcat() 函数用于连接字符串数组或字符向量,生成一个新的字符串。这个函数的语法如下:

str = strcat(s1, s2, s3, ...)

其中,s1, s2, s3, ... 是要连接的字符串数组或字符向量。

  • 如果输入参数是字符串数组,则 strcat() 函数将按顺序连接这些字符串,生成一个新的字符串。
  • 如果输入参数是字符向量,则 strcat() 函数将连接这些字符向量,生成一个新的字符串。

以下是一个简单的示例,展示如何使用 strcat() 函数:

% 连接字符串数组 
str1 = 'Hello, '; 
str2 = 'World!'; 
str = strcat(str1, str2); 
disp(str); % 连接字符向量 
s1 = 'Mat'; s2 = 'lab'; 
str_result = strcat(s1, s2); 
disp(str_result);

在这个示例中,我们首先通过连接两个字符串数组来生成一个新的字符串,然后通过连接两个字符向量来生成另一个新的字符串,最后输出结果。

通过 strcat() 函数,您可以轻松地连接字符串数组或字符向量,形成新的字符串,方便在处理文本数据时进行字符串的操作和处理。

2)代码:

a=1;%数字
b='2';%字符
c=[3,4];%矩阵
d={5};%元胞
e="陕";%字符串
% a=1%数字
g=num2str(a);%数字转换为字符
% c=[3,4]%矩阵
g1=num2str(c(1,1));%矩阵数字转换为字符
g2=num2str(c(1,2));%矩阵数字转换为字符
% d={5}%元胞
g3=cell2mat(d);%元胞变数字
g4=num2str(g3);
h=strcat(e,g,b,g1,g2,g4)

h = 
    "陕12345"

2)sprintf()函数合并字符

sprintf()函数简介

在 MATLAB 中,sprintf() 函数用于按指定格式将数据转换为字符串。这个函数的语法如下:

str = sprintf(format, A)

其中,format 是指定输出格式的格式化控制字符串,A 是要格式化的数据。

  • format 中可以包含格式化指令,例如 %d 表示整数,%f 表示浮点数,%s 表示字符串等。通过在 format 中使用这些格式化指令,可以指定如何将数据转换为字符串。
  • A 可以是单个值、向量、矩阵等 MATLAB 数据结构,sprintf() 函数将根据指定的格式化控制字符串将这些数据转换为字符串。

以下是一个示例,展示如何使用 sprintf() 函数:

% 使用 sprintf() 将整数和浮点数转换为字符串 
num = 42; 
str_num = sprintf('The number is %d', num); 
disp(str_num); 
pi_value = pi; 
str_pi = sprintf('The value of pi is %.2f', pi_value); disp(str_pi);

在这个示例中,我们使用了 sprintf() 函数将整数和浮点数转换为字符串,并在字符串中插入一些描述性文本。输出结果会根据指定的格式化控制字符串进行格式化。

通过 sprintf() 函数,您可以方便地将数据转换为特定格式的字符串,便于输出、存储或其他操作。

2)代码:

a=1;%数字
b='2';%字符
c=[3,4];%矩阵
d={5};%元胞
e="陕";%字符串
% a=1%数字
g=num2str(a);%数字转换为字符
% c=[3,4]%矩阵
g1=num2str(c(1,1));%矩阵数字转换为字符
g2=num2str(c(1,2));%矩阵数字转换为字符
% d={5}%元胞
g3=cell2mat(d);%元胞变数字
g4=num2str(g3);
% h=strcat(e,g,b,g1,g2,g4)
i=sprintf('%c%c%c%d%d%d',e,g,b,c(1,1),c(1,2),g3)% d表示整型 c表示字符

i =
    '陕12345'

 7、字符串赋值和日期获取

datestr()函数简介

在 MATLAB 中,datestr() 函数用于将日期和时间数据转换为字符串表示形式。这个函数的语法如下:

str = datestr(date)

其中,date 是包含日期和时间信息的 MATLAB 日期向量或日期字符串。

  • 如果输入参数 date 是 MATLAB 日期向量,datestr() 函数将根据默认格式将日期和时间信息转换为字符串。
  • 如果输入参数 date 是日期字符串,datestr() 函数将尝试解析该字符串,并返回相应的日期格式字符串。

除了日期向量和日期字符串之外,datestr() 函数还可以接受其他可接受的日期和时间值,例如 MATLAB 序列号或日期和时间部分。您可以根据需要指定附加的格式选项来定制输出的日期时间格式。

以下是一个示例,展示如何使用 datestr() 函数:

% 将当前日期转换为字符串 
current_date = datestr(now); 
disp(current_date);
 % 将指定日期向量转换为字符串,并指定输出格式 
specific_date = [2022, 9, 20, 14, 30, 0]; 
formatted_date = datestr(specific_date, 'yyyy-mm-dd HH:MM:SS'); 
disp(formatted_date);

在这个示例中,我们使用了 datestr() 函数将当前日期和指定日期向量转换为字符串,并分别展示了两种不同的输出格式。

通过 datestr() 函数,您可以方便地将日期和时间数据转换为字符串,以便于输出、显示或其他操作。

实现代码:

str1='陕H123456'%字符串类型

str1 =
    '陕H123456'
tr2=datestr(now)%字符串类型

str2 =
    '28-May-2024 12:23:03'

8、字符串以字符形式写入EXCEL

xlswrite()函数简介

在 MATLAB 中,xlswrite() 函数用于将数据写入 Excel 文件。这个函数的语法如下:

xlswrite(filename, A)

其中,filename 是要写入的 Excel 文件的文件名,A 是要写入 Excel 文件的数据。

除了上述基本语法之外,xlswrite() 函数还提供了其他格式的调用方式,允许用户指定写入的数据范围、工作表名称以及是否追加数据等选项。

下面是一个示例,展示如何使用 xlswrite() 函数将数据写入 Excel 文件:

% 创建一个要写入 Excel 文件的数据
 data = [1, 2, 3; 4, 5, 6; 7, 8, 9]; 
% 指定要写入的 Excel 文件名 
filename = 'example.xlsx'; 
% 使用 xlswrite() 函数将数据写入 Excel 文件 
xlswrite(filename, data);

在这个示例中,我们创建了一个简单的数据矩阵 data,并将其写入了一个名为 example.xlsx 的 Excel 文件中。

xlswrite() 函数可以帮助您将 MATLAB 中的数据快速写入 Excel 文件,方便数据处理和共享。然而,需要注意的是,xlswrite() 函数在一些新版 MATLAB 中被替代了,推荐使用 writematrix() 或 writecell() 函数来替代对 Excel 文件的写入操作。

代码:

xlswrite('C:\Users\16023\Desktop\例程\data.xlsx',str1,'Sheet1','A1');%以字符写入数据
xlswrite('C:\Users\16023\Desktop\例程\data.xlsx',str2,'Sheet1','A2');%以字符写入数据

效果:
 

9、 字符串以元胞形式写入EXCEL

代码:

xlswrite('C:\Users\16023\Desktop\例程\data.xlsx',{str1},'Sheet1','A1');%以元胞写入数据
xlswrite('C:\Users\16023\Desktop\例程\data.xlsx',{str2},'Sheet1','B1');%以元胞写入数据

 效果:

10、将EXCEL中数据以数字形式导入matlab 

xlsread()函数简介

xlsread() 函数是 MATLAB 中用于从 Excel 文件读取数据的函数。这个函数的基本语法如下:

[num,txt,raw] = xlsread(filename)

其中,filename 是要读取数据的 Excel 文件名。num 返回数值数据,txt 返回文本数据,raw 返回原始数据(包含数值和文本)。

您也可以使用其他选项来调用 xlsread() 函数,以指定读取的数据范围、工作表名称等。

下面是一个示例,展示如何使用 xlsread() 函数从 Excel 文件中读取数据:

% 指定要读取数据的 Excel 文件名 
filename = 'example.xlsx'; 
% 使用 xlsread() 函数读取 Excel 文件中的数据 
[data,txt,raw] = xlsread(filename); % 显示读取的数据 
disp(data);
% 显示数值数据 
disp(txt); % 显示文本数据 
disp(raw); % 显示原始数据

在这个示例中,我们使用了 xlsread() 函数从名为 example.xlsx 的 Excel 文件中读取了数据,然后分别展示了数值数据、文本数据和原始数据。

通过 xlsread() 函数,您可以方便地从 Excel 文件中读取数据,并在 MATLAB 中进行进一步处理和分析。需要注意的是,xlsread() 函数也有一些局限性,例如无法读取包含公式的单元格等情况。在某些情况下,您可能需要考虑使用更灵活的工具,如 readtable() 函数来读取 Excel 文件中的数据。

代码:

STR1=xlsread('C:\Users\16023\Desktop\例程\data.xlsx')%数字形式导入

STR1 =
   NaN   NaN     1     2     3     4     5     6   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
     2     8   NaN   NaN   NaN   NaN   NaN     2     0     2     4   NaN     1     2   NaN     3     8   NaN     1     2


11、将EXCEL中数据以元胞形式导入matlab 

代码:

STR2=readcell('C:\Users\16023\Desktop\例程\data.xlsx')%元胞形式导入

STR2 =

  2×20 cell 数组

  列 1 至 10

    {'陕'}    {'H'}    {[1]}    {[2]}    {[3]}    {[4]}    {[5]}    {[6]}    {1×1 missing}    {1×1 missing}
    {[ 2]}    {[8]}    {'-'}    {'M'}    {'a'}    {'y'}    {'-'}    {[2]}    {[        0]}    {[        2]}

  列 11 至 17

    {1×1 missing}    {1×1 missing}    {1×1 missing}    {1×1 missing}    {1×1 missing}    {1×1 missing}    {1×1 missing}
    {[        4]}    {0×0 char   }    {[        1]}    {[        2]}    {':'        }    {[        3]}    {[        8]}

  列 18 至 20

    {1×1 missing}    {1×1 missing}    {1×1 missing}
    {':'        }    {[        1]}    {[        2]}

12、将EXCEL中数据以结构体形式导入matlab 

importdata()函数简介

importdata() 函数是 MATLAB 中的一个通用函数,用于从文件中导入数据。这个函数可以读取文本文件、CSV 文件、Excel 文件等不同格式的数据,并将其存储在一个结构数组中。

下面是 importdata() 函数的基本语法:

data = importdata(filename)

其中,filename 是要导入数据的文件名,data 是包含了文件数据的结构数组。结构数组的具体内容取决于导入的文件类型,可以是数值数据、文本数据、甚至是混合数据。

下面是一个示例,展示如何使用 importdata() 函数从文本文件中读取数据:

% 指定要导入数据的文本文件名 
filename = 'example.txt'; 
% 使用importdata()函数导入文本文件中的数据 
data = importdata(filename); % 显示导入的数据
 disp(data);

在这个例子中,我们使用 importdata() 函数从名为 example.txt 的文本文件中读取了数据,并将其存储在结构数组 data 中。

请注意,importdata() 函数对于简单的数据导入是非常便利的,但对于复杂的数据格式或需要更多控制的情况,可能需要使用更专门的函数,如 readtable()xlsread() 等。

代码:

STR3=importdata('C:\Users\16023\Desktop\例程\data.xlsx')%结构体形式导入

STR3 = 

  包含以下字段的 struct:

        data: [2×20 double]
    textdata: {2×18 cell}


 

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

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

相关文章

AQS源码解析(ReentrantLock)

什么是AQS:Juc中的大多数同步器都是围绕着一些相同的基础行为,比如等待队列,条件队列,共享,独占获取变量这些行为,抽象出来就是基于AQS(AbstractQueuedSynchronizer)实现的。所以可以把AQS看成这…

windows qt编译报错 无法打开包括文件: “EGL/egl.h”: No such file or directory

windows mingw32 qt creator QtAV 推荐ffmpeg依赖包 QT5.14.2 如果出现:无法打开包括文件: “EGL/egl.h”: No such file or directory 可能是Qt6的问题.在QT5上安装。 编译步骤: git clone https://github.com/wang-bin/QtAV.git cd QtAV &&…

Mysql-错误处理: Found option without preceding group in config file

1、问题描述 安装MYSQL时,在cmd中“初始化”数据库时,输入命令: mysqld --initialize --consolecmd报错: D:\mysql-5.7.36-winx64\bin>mysql --initialize --console mysql: [ERROR] Found option without preceding group …

Qt基础 | Qt全局定义 | qglobal头文件中的数据类型、函数、宏定义

文章目录 一、数据类型定义二、函数三、宏定义 QtGlobal头文件包含了 Qt 类库的一些全局定义 ,包括基本数据类型、函数和宏,一般的Qt类的头文件都会包含该文件。 详细内容可参考:https://doc.qt.io/qt-5/qtglobal.html 一、数据类型定义 为了…

【扩散模型(五)】IP-Adapter 源码详解3-推理代码

系列文章目录 【扩散模型(一)】中介绍了 Stable Diffusion 可以被理解为重建分支(reconstruction branch)和条件分支(condition branch)【扩散模型(二)】IP-Adapter 从条件分支的视…

花几千上万学习Java,真没必要!(十一)

1、跳转控制语句&#xff1a; 测试代码1&#xff1a; package com.continuetest; public class ControlFlowDemo { // break语句 public void demonstrateBreak() { for (int i 0; i < 10; i) { if (i 5) { break; // 当i等于5时&#xff0c;跳出循环 } System.o…

【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow

一、项目介绍 眼疾识别系统&#xff0c;使用Python作为主要编程语言进行开发&#xff0c;基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法&#xff0c;通过对眼疾图片4种数据集进行训练&#xff08;‘白内障’, ‘糖尿病性视网膜病变’, ‘青光眼’, ‘正常’&…

项目管理进阶之RACI矩阵

前言 项目管理进阶系列续新篇。 RACI&#xff1f;这个是什么矩阵&#xff0c;有什么用途&#xff1f; 在项目管理过程中&#xff0c;如Team规模超5以上时&#xff0c;则有必要采用科学的管理方式&#xff0c;满足工作需要。否则可能事倍功半。 Q&#xff1a;什么是RACI矩阵 …

SongComposer:让大模型像人类一样具有音乐创作力

人工智能咨询培训老师叶梓 转载标明出处 大模型在翻译、复杂语言环境中的推理等任务中展现出了人类级别的能力。这引发了一个问题&#xff1a;这些模型能否在更具情感、抽象性以及需要专业技能的领域中&#xff0c;如音乐创作&#xff0c;展现出人类的创造力呢&#xff1f;香港…

一招轻松解决猫毛 最值得买的浮毛空气净化器排名

作为一名6年资深铲屎官&#xff0c;我常常被朋友问到关于宠物空气净化器的各种问题。有的人认为这是个神器&#xff0c;而有的人则认为这完全是花钱买智商税。其实我刚开始对购买宠物空气净化器也持怀疑态度&#xff0c;心想这么多钱花下去真的有效吗&#xff1f;但使用后&…

Linux文本工具之-Vim(二)

一、编辑 快捷键功能描述i在当前光标所在位置插入&#xff0c;光标后的文本相应向右移动I在光标所在行的行首插入&#xff0c;行首是该行的第一个非空白字符&#xff0c;相当于光标移动到行首执行 i 命令o在光标所在行的下插入新的一行。光标停在空行首&#xff0c;等待输入文…

王牌站士Ⅶ--理解大型语言模型LLM的参数

模型的大小并不一定决定其成功 在学习任何大型语言模型 (LLM) 时&#xff0c;您首先会听到的事情之一就是给定模型有多少个参数。如果您查看下面的图表&#xff0c;您会注意到参数大小范围很广 - 一个模型可能有 10 亿或 20 亿个参数&#xff0c;也可能有超过 1.75 万亿个参数。…

MongoDB综合实战篇(超容易)

一、题目引入 在MongoDB的gk集合里插入以下数据&#xff1a; 用语句完成如下功能&#xff1a; &#xff08;1&#xff09;查询张三同学的成绩信息 &#xff08;2&#xff09;查询李四同学的语文成绩 &#xff08;3&#xff09;查询没有选化学的同学 &#xff08;4&#xf…

EasyPhoto - 一键训练并生成人像写真,支持参考图生成 独立版 本地一键整合包下载

EasyPhoto最早是作为AI绘画软件StableDiffusion的一款插件备受大家喜爱&#xff0c;今天分享的是 EasyPhoto 的独立版本一键整合包&#xff0c;无需安装StableDiffusion即可解压即用。 和之前分享的腾讯开源的 PhotoMaker 和 阿里开源的 FaceChain 类似&#xff0c;EasyPhoto操…

ArkUI组件——循环控制/List

循环控制 class Item{name: stringprice:number}private items:Array<Item> [new Item("A0",2399),new Item("BE",1999),new Item("Ro",2799)] ForEach(this.items,(item:Item) > {})List组件 列表List是一种复杂的容器&#xff0c;…

C++动态内存的管理

今天来分享C动态内存管理相关知识&#xff0c;闲言勿谈&#xff0c;直接上干货。 1. 动态内存的开辟和销毁(new和delete) (1)前置知识&#xff1a;我们知道c语言有malloc和calloc和realloc三个函数可以进行动态的开辟内存&#xff0c;那么它们有什么区别呢&#xff1f;首先是…

乘积量化pq:将高维向量压缩 97%

向量相似性搜索在处理大规模数据集时&#xff0c;往往面临着内存消耗的挑战。例如&#xff0c;即使是一个包含100万个密集向量的小数据集&#xff0c;其索引也可能需要数GB的内存。随着数据集规模的增长&#xff0c;尤其是高维数据&#xff0c;内存使用量会迅速增加&#xff0c…

自适应巡航控制(ACC)功能—巡航车速控制功能介绍

自适应巡航控制中的跟车行驶功能详解 自适应巡航控制&#xff08;ACC&#xff09;功能—巡航车速控制功能介绍 自适应巡航控制&#xff08;ACC&#xff09;中的跟车车距控制功能&#xff1a;详解与应用 自适应巡航控制中的Cut in & Cut out功能详解 自适应巡航控制中的Stop…

为什么在芯片制造中不能用机械磨削(grinding)代替cmp?

知识星球里的学员问&#xff1a;为什么只有在晶圆背面减薄时会使用griniding工艺&#xff1f;在芯片制程中并未看到该工艺&#xff0c;同样有减薄作用&#xff0c;为什么在芯片制程中用的是cmp&#xff1f; Grinding与cmp的原理&#xff1f; Grinding&#xff0c;机械磨削&…

AV1技术学习:Affine Motion Compensation

一、Affine Model Parameter 除了传统的平移运动补偿&#xff0c;AV1 还支持仿射变换模型&#xff0c;将当前像素点 (x, y) 通过以下方式投影到参考帧中的预测像素点 (x, y). 参数 (h13, h23) 对应于平移模型中使用的常规运动向量。 参数 h11 和 h22 控制垂直和水平轴上的比例…