gpt4 book ai didi

J:高斯-乔丹消去法

转载 作者:行者123 更新时间:2023-12-02 17:39:20 26 4
gpt4 key购买 nike

编写求解线性代数方程组的高斯-乔丹方法的任务是我选择用来推进学习 J 的一项练习。系统为 Ax=b,其中 An-by-n 矩阵,b 和未知的 xn-向量。首先,我从带有控制结构的最简单形式开始:

   gj0 =: dyad :0 NB. usage is same to %.
y=.y,.b
for_d.i.#y do.
for_r.i.#y do.
if.r=d do.continue.end. NB. do not eliminate d'th row
t=.%/ (<"1(r,d),:(d,d)) { y
for_c.d}.>:i.#y do.
y=.(((<r,c){y)-(t*(<d,c){y)) (<r,c)} y
end.
y=.0 (<r,d)} y NB. ensure zero
end.
end. NB. now A is diagonal but not identity matrix, so:
x=.{:"1 y NB. x = b
for_r.i.#y do.
x=.((r{x)%(<r,r){y) r} x NB. divide by coefficients on diagonal
end.
)
Ab =: (".;._2) 0 :0
0.25 _0.16 _0.38 0.17
0.19 _0.22 _0.02 0.41
0.13 0.08 _0.08 _0.13
0.13 _0.1 _0.32 0.65
)
b =: 0.37 0.01 0.01 1.51
(,.".&.>)('A';'b';'gj0 A,.b';'b %. A')
┌────────┬──────────────────────┐
│A │0.25 _0.16 _0.38 0.17│
│ │0.19 _0.22 _0.02 0.41│
│ │0.13 0.08 _0.08 _0.13│
│ │0.13 _0.1 _0.32 0.65│
├────────┼──────────────────────┤
│b │0.37 0.01 0.01 1.51 │
├────────┼──────────────────────┤
│b gj0 A │_1 3 _2 2 │
├────────┼──────────────────────┤
│b %. A │_1 3 _2 2 │
└────────┴──────────────────────┘

正确!接下来我决定摆脱尽可能多的控制结构:

   gj1 =:dyad :0
y=.y,.b
for_d.i.#y do.
for_r.d ({.,]}.~[:>:[) i.#y do. NB. for indices without d
t=.%/ (<"1(r,d),:(d,d)) { y
y=.((r{y)-(t*d{y)) r}y NB. no need to iterate for each column
y=.0 (<r,d)} y
end.
end.
({:"1 y)%(+/}:"1 y) NB. b divide by sum of each item of A (drop zeroes)
)
b gj1 A
_1 3 _2 2

好吧,现在我可以尝试将 for_r.-loop 翻译成默认形式...但看起来会更麻烦,而且我认为我走错了路 --但什么是没有错误的学习呢?我真的很想将 Gauss-Jordan 方法默认编码为:

  • J 编码练习
  • 看看性能是否更好
  • 几周后尝试理解代码:)

帮我写到最后或者指出更好的方法。

最佳答案

感谢 Eelvex,他建议我查看 addons/math/misc/linear.ijs,我用这个漂亮的代码完成了任务:

   gj=: monad :0
I=. i.#y
for_i. I do. y=. y - (col - i=I) */ (i{y) % i{col=. i{"1 y end.
)
gj Ab
1 0 0 0 _1
0 1 0 0 3
0 0 1 0 _2
0 0 0 1 2

理解 Linear.ijs 中的动词 pivot 需要一些时间 - 但铅笔纸方法会有所帮助。

关于J:高斯-乔丹消去法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26317674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com