params 参数怎么写_初入数值分析,如何写好代码?

351d14034f019d3cd45a0c5b3c81b6a8.png

我上第一节数值分析课时,老师着重解释着数学原理,对于如何实现这些算法只是留给我们一些伪代码。这些伪代码由基础运算和各种for loop组成。我想一段好的数值分析代码有无数种替代for loop的方法,更简洁和易读。

Sum

求和符号频繁的出现在各种公式里面。比如 Composite Simpson Rule:

我之前看到求和符号的第一反应是这儿又得用 for loop了。例如

可能会用以下的代码来计算。
sum=0
for i in range(1,n//2+1):
  sum = sum+f(a+(2*i-1)*h)
sum 

这是一个有点冗长,不清楚的写法。

Map

我们可以用np.summap函数来实现。

import numpy as np
np.sum(np.array(list(map(lambd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
空间收敛指的是当网格大小趋近于零时,数值解趋近于精确解的过程。要用Sigma语言实现空间收敛,需要进行以下步骤: 1. 定义网格大小和模型参数,例如有限元方法中的单元尺寸和材料参数。 2. 定义网格生成函数,生成不同网格大小下的网格。可以使用自适应网格生成算法,以确保在不同区域的网格精度均匀。 3. 定义求解器函数,使用有限元或有限差分等方法求解数值解。需要注意,对于不同网格大小,求解器需要进行相应的调整。 4. 定义误差计算函数,计算数值解与精确解之间的误差。可以使用 $L^2$ 或 $H^1$ 等范数来衡量误差。 5. 进行空间收敛测试,即在不同网格大小下,求解模型并计算误差。将误差与网格大小的关系绘制成图表,并分析其收敛性质。 以下是一个使用Sigma实现空间收敛的示例代码: ``` set n = 5; // 定义初始网格大小 def model_params = { mu = 1, lambda = 2 }; // 定义模型参数 def generate_mesh(n) = { // 定义网格生成函数 // 根据 n 生成网格 } def solve(model_params, mesh) = { // 定义求解器函数 // 使用有限元或有限差分等方法求解数值解 } def compute_error(solution, exact_solution) = { // 定义误差计算函数 // 计算数值解与精确解之间的误差,使用 L^2 或 H^1 等范数 } // 进行空间收敛测试 for (i = 0; i < 5; i++) { mesh = generate_mesh(n); // 生成网格 solution = solve(model_params, mesh); // 求解数值解 exact_solution = ...; // 计算精确解 error = compute_error(solution, exact_solution); // 计算误差 print("n = ", n, ", error = ", error); // 输出结果 n = n * 2; // 将网格大小加倍 } ``` 注意,以上代码仅为示例,实际应用中需要根据具体模型和求解方法进行相应的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值