Fortran Coder

查看: 149|回复: 6

[求助] 关于矩阵转置的尝试

[复制链接]

6

帖子

2

主题

0

精华

入门

F 币
54 元
贡献
20 点
发表于 2020-7-21 20:59:19 | 显示全部楼层 |阅读模式
试着写了下用于N*N矩阵的转置

forall (i = 1:N, j = 1:N) X(i,j) = X(j,i)

但是不知道是否正确,因为不知道如何查看矩阵,所以想请教一下这一段的思路是否正确,以及fortran有没有直观显示矩阵的输出方式


比如像这样3*3

1 2 3
4 5 6
7 8 9

的形式
回复

使用道具 举报

159

帖子

14

主题

0

精华

大宗师

F 币
3906 元
贡献
767 点
发表于 2020-7-22 02:09:49 | 显示全部楼层
矩阵转置有现成的transpose函数,没必要自己写吧?
至于显示,确实没有什么好办法,只能自己写代码显示

6

帖子

2

主题

0

精华

入门

F 币
54 元
贡献
20 点
 楼主| 发表于 2020-7-22 20:07:54 | 显示全部楼层
liudy02 发表于 2020-7-22 02:09
矩阵转置有现成的transpose函数,没必要自己写吧?
至于显示,确实没有什么好办法,只能自己写代码显示 ...

翻例题的时候发现一种写法

write( * , '(10i4)' ) array

可以直接显示一个10*10的矩阵,感觉很历害,请教下这种写法里面'(10i4)'代表什么啊

159

帖子

14

主题

0

精华

大宗师

F 币
3906 元
贡献
767 点
发表于 2020-7-23 07:58:56 | 显示全部楼层
爾果 发表于 2020-7-22 20:07
翻例题的时候发现一种写法

write( * , '(10i4)' ) array

这是fortran的 I/O格式啊……
i4是以四个空格的宽度显示整数,10是连续10个的意思
因为后面的矩阵中元素数量多于10个,就会重复用10i4的格式输出,每一次一行
对于固定大小的矩阵倒是可以这么用,但是如果是不定大小的矩阵就很麻烦了
那样还需要用一段代码来产生类似于 "(nI4)"的格式,n是个整数变量
我感觉,实则不如内循环语句好

832

帖子

0

主题

0

精华

宗师

F 币
1316 元
贡献
735 点

规矩勋章元老勋章新人勋章水王勋章

QQ
发表于 2020-7-23 08:31:05 | 显示全部楼层
输出二维数组比较“流行”的写法是:
[Fortran] 纯文本查看 复制代码
Do i = 1 , size(array,2)
  write( * , '(*(i4,1x))' ) array(:,i)
End Do

6

帖子

2

主题

0

精华

入门

F 币
54 元
贡献
20 点
 楼主| 发表于 2020-7-23 16:26:29 | 显示全部楼层
liudy02 发表于 2020-7-23 07:58
这是fortran的 I/O格式啊……
i4是以四个空格的宽度显示整数,10是连续10个的意思
因为后面的矩阵中元素 ...

谢谢指点!正好也看到这一部分了,其中一个例子
[Fortran] 纯文本查看 复制代码
write(11, '(2x, f0.8, 2x, f0.8)' )  x, y

我理解是输出到11号文件,f0.8是默认宽度,小数点后8位,但是2x代表什么呢

还有一种写法
[Fortran] 纯文本查看 复制代码
write(11, '( 2(2x, f0.8) )' ) x, y

似乎和上面是等效的,那这个2(2x, f0.8)是不是表示(2x, f0.8)重复一遍啊

832

帖子

0

主题

0

精华

宗师

F 币
1316 元
贡献
735 点

规矩勋章元老勋章新人勋章水王勋章

QQ
发表于 2020-7-24 08:35:29 | 显示全部楼层
2x 代表输出2个空格。
2(2x,f0.8) 代表括号里的格式重复2次。

多看书~
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2020-8-7 00:39

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表