- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为一个项目实现松弛迭代求解器。我们创建的函数应该接受两个输入:矩阵 A 和向量 B,并且应该返回近似解 Ax = b 的迭代向量 X。
书中的伪代码在这里: enter image description here
我是Python新手,所以我在实现这个方法时遇到了很大的困难。这是我的代码:
def SOR_1(A,b):
k=1
n = len(A)
xo = np.zeros_like(b)
x = np.zeros_like(b)
omega = 1.25
while (k <= N):
for i in range(n-1):
x[i] = (1.0-omega)*xo[i] + (1.0/A[i][i])[omega(-np.sum(A[i][j]*x[j]))
-np.sum(A[i][j]*xo[j] + b[i])]
if ( np.linalg.norm(x - xo) < 1e-9):
print (x)
k = k + 1.0
for i in range(n-1):
xo[i] = x[i]
return x
我的问题是如何实现 for 循环并根据伪代码正确生成数组。
最佳答案
欢迎使用Python!
Python 中的变量区分大小写,因此定义了 n
,但未定义 N
。如果它们应该是不同的变量,我看不出您的 N
值是什么。
您有了一个良好的开端,但以下行大部分仍然是伪代码:
x[i] = (1.0-omega)*xo[i] + (1.0/A[i][i])[omega(-np.sum(A[i][j]*x[j]))
-np.sum(A[i][j]*xo[j] + b[i])]
在教科书的伪代码中,方括号被用作分组符号,但在Python中,它们被保留用于创建和访问列表(这就是Python所说的数组)。另外,Python 中没有隐式乘法,因此您必须编写类似 (1 + 2)*(3*(4+5))
而不是 (1 + 2)[3 (4+5)]
另一个主要问题是您没有定义 j。您可能需要一个看起来像这样的 for 循环:
for j in range(1, i):
或者如果你想内联进行
sum(A[i][j]*x[j] for j in range(1, i))
请注意,range 有两个参数,从哪里开始以及在什么值之前停止,因此 range(1, i) 相当于从 1 到 i - 1 的总和
我认为您正在为该行而苦苦挣扎,因为该行发生了太多事情。看看您是否可以使用单独的变量来计算出其中的一部分,或者将一些工作转移到单独的函数中。
类似于:x[i] =a + b * c * d() - e()
,但给出 a、b、c、d 和 e 有意义的名称。然后,您必须正确设置每个变量并定义每个函数,但至少您正在尝试解决单独的问题,而不是解决一个巨大的复杂问题。
此外,请确保您的选项卡正确无误。 k = k + 1.0
不应位于 for 循环内,而应位于 while 循环内。
编码是一个迭代过程。首先让 while 循环工作。不要尝试在其中执行任何操作(除了打印出变量以便您可以看到它正在工作)。接下来让 for 循环在 while 循环内工作(同样,只是打印变量)。接下来让 (1.0-omega)*xo[i] 工作。在此过程中,您将发现并解决诸如 (1.0-omega)*xo[i] 计算结果为 0 之类的问题,因为 xo 是一个以全零开头的 NumPy 列表。
您可以从以下内容开始:
k = 1
N = 3
n = 3
xo = [1, 2, 3]
while (k <= N):
for i in range(n):
print(k, i)
omega = 1.25
print((1.0-omega)*xo[i])
k += 1
慢慢地使用越来越多的松弛解算器,直到一切正常。
关于python - 如何根据伪代码正确实现求和和数组迭代。 PYTHON松弛法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49808783/
我有一个盒子,上面有一个溢出卷轴。当你到达盒子的尽头时;我想触发一个事件(滚动到页面的下一部分)。 下面的代码有效,但是,我希望其中有一些“松弛”。因此它不需要在您到达框的末尾时直接触发,而仅在您坚持
有时当我尝试打开一个松弛模式时,它会在生产中给出一个 expired_trigger_id 错误。我如何调试并找出它发生的原因?我在 js 中使用 slack bolt 来创建聊天机器人。 最佳答案
我的问题很简单,我认为创建这个程序只需要几个小时。但是现在我整天都在研究它,试图弄清楚我可能做错了什么。 我想做的就是使用他们的 postMessage api 将消息发布到 slack .我已经能够
A 有一个脚本可以完美地将消息发送到松弛 channel 。该脚本放置在具有以下 curl 版本的测试服务器上: curl --version curl 7.15.5 (x86_64-redhat-l
我使用 node.js 构建我的 Slack 机器人。我使用了@slack/client。它工作正常。现在我有一个通过 slack message builder 获得的 JSON 格式的数据。像这样
看起来没有选项可以将包含表格的消息发布到 slack。我正在尝试使用文本格式构建表格。在下面的示例中,文本未对齐,因为第一行包含文本 ROW1,第二行包含文本 ROW。有没有办法在 ROW 之后添加空
我正在使用 slack_nagios.pl 脚本。 Ubuntu 14.05 和 Nagios 4.4.5 https://raw.githubusercontent.com/tinyspeck/se
我想检索在我的团队松弛域中发送的所有消息。虽然我更喜欢以 XML 或 JSON 形式接收数据,但我能够以任何形式处理数据。 如何检索所有这些消息?是否可以?如果没有,我可以检索特定 channel 的
在使用 CPLEX C API 进行 MIP 优化期间,是否可以检索当前节点(即每 n 个节点)的线性松弛(双变量、降低的成本等)? 我注册了一个回调函数 (CPXsetsolvecallbackfu
我正在使用 Python 和它的 Slacker API 将消息发布到松弛 channel ,并且它发布消息的效果很好。 现在我想做的是创建一个按钮,上面写着更多信息,当它被点击时,我想显示一个项目列
我目前正在尝试使用 SlackConnector 库在 C# 中开发应用程序。 SlackConnector 应用程序将接收消息并将消息发送到松弛 channel 和 DM。 (我能够使用测试 tok
给定一个松弛 channel 的名称,有没有办法检索该 channel 中所有成员的电子邮件列表?我尝试查看 slack api 文档,但找不到实现此目的所需的方法 (https://api.slac
我已经构建了一个 receives events 的应用程序. 默认情况下,范围 channels:history让它接收添加应用程序的用户的所有公共(public) channel 中的所有消息的事
我正在使用模态来收集数据。我通过以下代码打开了一个 View : view = { "type": "modal", "title": { "type": "plain
我正在使用模态来收集数据。我通过以下代码打开了一个 View : view = { "type": "modal", "title": { "type": "plain
我的问题有点复杂。它是这样的:我通过 HTTPClient 从(在我的例子中)“Slack”-API 获得答案。此数据作为 JSON 发送,因此我将其反序列化为我为此编写的合适对象(类)。到目前为止,
我正在尝试使用他们的 Web API 将 Slack 与我们的应用程序集成。我需要使用 chat.postMessage具有自定义用户名并设置 as_user = false 的端点。我可以发布消息,
我正在开发一款 Slack 应用程序,用户可以使用 Slack 的 Oauth 流程将其安装到工作区。安装和配置应用程序后,我使用 Oauth 允许用户登录并对应用程序配置进行更改。 新用户的流程使用
如何使用事件 API 检测消息是否来自在私有(private) channel (只有机器人的 DM)中与我的机器人聊天的用户? 最佳答案 检查 channel ID 中的第一个字母。如果它以 D 开
我是一名优秀的程序员,十分优秀!