Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >python代码在区间(0 ~ 10)上用Euler方法求解以下常微分方程初值问题

python代码在区间(0 ~ 10)上用Euler方法求解以下常微分方程初值问题
EN

Stack Overflow用户
提问于 2022-01-15 07:42:31
回答 2查看 665关注 0票数 0

我有个问题

编写一个python代码,用Euler方法在区间(0 ~ 10)上用10个时间步长求解以下初值问题--常微分方程。( A) y'= -y -y^2;y(0)=1,如果这个精确解是y(t) = 1/(-1+2e^t),那么y(10)的绝对误差是多少。现在我已经写了这段代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def pow_t(x,b):  
    t=1; 
    while (b):
        t*=x 
        b=b-1
    return t


def  absolute(): 
    y=[x for x in range(1,11)]
    
    h=0.0001 
    for i in range(1,10) :
       y[i]=y[i-1]+(h*(-1*y[i-1]-pow_t(y[i-1],2)))
       print("y",i,"=",y[i]) 
    
    exact = 0.0000227
    approx = y[9]
    absolute = exact - approx 
    print("abbsolute erroe = exact - approx ")
    print("abbsolute erroe = ",absolute)
   

print(absolute())

预期的输出如下

这是我得到的实际结果

我需要将y列表的第一个索引设置为1,然后通过for循环填充列表的其余部分,我如何编码呢?

EN

回答 2

Stack Overflow用户

发布于 2022-01-15 11:07:39

您的输出基本上是正确的,但是移动了1(例如,您的y10是预期输出所称的y9),而不是四舍五入到小数点后4位。

y有10个更新,但要打印11个值。这样做的方法是要么在循环之前打印第一个y,要么在循环之后打印最终的y。下面的代码显示了第二种方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y = 1
t = 0
h = 0.0001
iterates = [1]

for i in range(10):
    print(f'y{i} = {y:.4f}')
    y = y+h*(-y-y**2)
    iterates.append(y)
    t += h
print(f'y10 = {y:.4f}')

注意,这段代码只使用标量变量y作为欧拉方法中的变量(而不是数组中的条目)。说到底,这是一个品味的问题,但这样的代码似乎更干净。

产出如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y0 = 1.0000
y1 = 0.9998
y2 = 0.9996
y3 = 0.9994
y4 = 0.9992
y5 = 0.9990
y6 = 0.9988
y7 = 0.9986
y8 = 0.9984
y9 = 0.9982
y10 = 0.9980

它与预期的输出相匹配。

票数 1
EN

Stack Overflow用户

发布于 2022-01-15 09:48:14

如果您可以在开始之前知道封闭表单解决方案,这会有所帮助。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Equation: y' + y + y^2 = 0
Initial condition: y(0) = 1

这是伯努利方程。

闭形解是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y(t) = -e^C1 / (e^C1 - e^t)

应用常量C1解的初始条件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y(0) = -e^C1 / (e^C1 - 1) = 1

C1的解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
e^C1 = 1/2
C1 = ln(1/2)

替换给出了最终的解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y(t) = 1/(2*(e^t - 1/2))

绘制封闭形式的解决方案,并使用它来评估数值积分解决方案。

您可以在y(10)得到精确的解,以便与数值结果进行比较:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y(0)  = 1
y(1)  = 0.225399674
y(2)  = 0.072578883
y(3)  = 0.025529042
y(4)  = 0.009242460
y(5)  = 0.003380362
y(6)  = 0.001240914
y(7)  = 0.000456149
y(8)  = 0.000671038
y(9)  = 0.000061709
y(10) = 1/(2*(e^(10)) - 1/2)) = 0.000022700

我爱Kotlin。我认为Python的简单性和简洁性相匹配,但给了我更多的Java和JVM的b/c。下面是Kotlin实现的样子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    fun main() {
        var y = 1.0
        var t = 0.0
        val dt = 0.005
        val tmax = 10.0
        do {
            println("y(${t.format(5)}) = ${y.format(10)}")
            y += dt*(-y-y*y)
            t += dt
        } while (t < tmax)
    }

fun Double.format(digits: Int) = "%.${digits}f".format(this)

通过采取更小的步骤,您可以越来越好地与封闭表单解决方案达成一致。使用dt值来了解我的意思。

您正在使用一个显式的Euler集成方案,它可能会在步长上受到稳定性限制。您可以选择更精确和稳定的集成方案,如5阶龙格库塔

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70722927

复制
相关文章
【Android Gradle 插件】Gradle 自动化构建 ① ( Gradle 构建工具简介 | Gradle 构建工具用途 )
在最开始 Android 开发时 , 使用 Eclipse + ADT 进行开发 , 使用的是 Ant 构建工具 进行构建 ;
韩曙亮
2023/03/30
5410
Gradle构建提速
提速法则一览 以上优化方案基于android gradle tools 3.0-alpha 关于Santa Tracker Project 9 个模块,包括Wear 500 多个Java文件 170
我就是马云飞
2018/02/05
1.4K0
Gradle构建提速
gradle中的增量构建
在我们使用的各种工具中,为了提升工作效率,总会使用到各种各样的缓存技术,比如说docker中的layer就是缓存了之前构建的image。在gradle中这种以task组合起来的构建工具也不例外,在gradle中,这种技术叫做增量构建。
程序那些事
2021/02/25
1.1K0
gradle中的增量构建
gradle中的增量构建
在我们使用的各种工具中,为了提升工作效率,总会使用到各种各样的缓存技术,比如说docker中的layer就是缓存了之前构建的image。在gradle中这种以task组合起来的构建工具也不例外,在gradle中,这种技术叫做增量构建。
子润先生
2021/06/21
8030
gradle中的增量构建
在我们使用的各种工具中,为了提升工作效率,总会使用到各种各样的缓存技术,比如说docker中的layer就是缓存了之前构建的image。在gradle中这种以task组合起来的构建工具也不例外,在gradle中,这种技术叫做增量构建。
程序那些事
2021/02/17
1.8K0
Gradle 构建脚本
Gradle提供了一种领域特定语言,目前同时支持 Groovy 和 Kotlin 。
佛系编码
2019/12/11
9030
Gradle 构建脚本
Gradle教程和指南 – 创建Gradle构建
遵循本指南,你将创建一个Gradle项目,调用一些基本的Gradle命令,并了解Gradle如何管理项目。
全栈程序员站长
2022/09/14
1.9K0
Gradle教程和指南 – 创建Gradle构建
gradle构建工具的使用前言:一、gradle简介:二、gradle的安装:三、eclipse中配置gradle:四、使用gradle构建项目:总结:
gradle是构建工具,类似于ant和maven,也许目前maven还是主流,但是gradle却是综合了ant和maven的优点,发展速度很快,所以很有必要了解一下。
贪挽懒月
2018/08/02
2.8K0
gradle构建工具的使用前言:一、gradle简介:二、gradle的安装:三、eclipse中配置gradle:四、使用gradle构建项目:总结:
Gradle 构建多种版本
开发APP时,会有生成不同版本的需求。比如测试版本和发布版本。不同版本之间通常有不同的设置。
AnRFDev
2021/02/01
6220
如何使用Docker构建运行时间较长的脚本
我想我已经找到了一个非常不错的Docker使用案例。你是不是会觉得这是一篇写Docker有多好多好的文章,开始之前我想和你确认,这篇文章会介绍如何把文件系统作为持久性的数据结构。
星哥玩云
2022/07/03
1.5K0
【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ① ( 触发 Android Studio 工程构建 | Gradle 构建脚本执行顺序 )
最近将 Android Studio 更新到了 Android Studio Dolphin | 2021.3.1 Patch 1 版本 , 发现创建的 Android 工程中 生成的 Gradle 脚本 不一样了 , 在这里 梳理下新版本的 Gradle 执行流程 ;
韩曙亮
2023/03/28
1.2K0
【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ① ( 触发 Android Studio 工程构建 | Gradle 构建脚本执行顺序 )
Gradle构建springBoot项目
你肯定会说为什么不用maven呢,我想说,要学就学自己不会的,这样才能会的更多,不是吗。
崔笑颜
2020/07/20
2.4K0
【Android Gradle 插件】Gradle 构建生命周期 ② ( Gradle 类的添加构建生命周期监听器函数 | Gradle#addListener 函数 )
org.gradle.api.Project 配置 ( build.gradle 根配置 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
韩曙亮
2023/03/30
7120
Gunicorn运行Python的网站非常简单
Gunicorn运行Python的网站真是非常简单了,这里介绍下django如何使用,和apache复杂配置相比,这个配置少得真不是一个数量级。
星哥玩云
2022/06/29
5150
【Android Gradle 插件】Gradle 基础配置 ② ( Gradle 空白项目构建示例演示 )
在任意一个空白目录 , 创建 build.gradle 构建脚本 , 该脚本是 Gradle 构建的入口 ;
韩曙亮
2023/03/30
5960
【Android Gradle 插件】Gradle 基础配置 ② ( Gradle 空白项目构建示例演示 )
【Android Gradle 插件】Gradle 构建工具简介 ② ( Android 项目构建打包流程 | 构建工具发展 -> 手动配置 -> Ant -> Maven -> Gradle )
① 使用 AAPT 工具 打包资源文件 , 生成 R.java , resources.ap 文件 ;
韩曙亮
2023/03/30
7490
【Android Gradle 插件】Gradle 构建工具简介 ② ( Android 项目构建打包流程 | 构建工具发展 -> 手动配置 -> Ant -> Maven -> Gradle )
Gradle For Android(4)--构建不同的版本
当构建App的时候,通常都会有不同的版本。比如说测试版本,正式版本,Debug版本等等。而这些版本通常有不同的配置,比如说服务器的域名,Log开关,付费开关等等特性。
None_Ling
2018/10/24
2K0
Gradle For Android(4)--构建不同的版本
【Android Gradle 插件】Gradle 构建机制 ① ( 空白工程 Gradle 构建文件 | IntelliJ IDEA 工程构建文件 | Android Studio 工程构建文件 )
Gradle 构建工具 的本质是 Java 应用程序 , 是运行在 Java 虚拟机 上的 ; 在空白的目录中 执行该 Gradle 构建工具 , 可以 生成一系列的构建文件 ;
韩曙亮
2023/03/30
6010
【Android Gradle 插件】Gradle 构建机制 ① ( 空白工程 Gradle 构建文件 | IntelliJ IDEA 工程构建文件 | Android Studio 工程构建文件 )
【Android Gradle 插件】Gradle 构建机制 ④ ( Gradle 构建生命周期 | 初始阶段 | 配置阶段 | 执行阶段 )
Gradle 构建生命周期 完整流程 : 下图中的函数 , 都可以作为 HOOK 点 , 监听拦截 Gradle 的执行流程 ;
韩曙亮
2023/03/30
7500
【Android Gradle 插件】Gradle 构建机制 ④ ( Gradle 构建生命周期 | 初始阶段 | 配置阶段 | 执行阶段 )
gradle构建android项目详解
1、用Gradle构建 1.1 工程结构 如图所示,这是一个不能更普通的Android的Gradle工程了。 根目录下面的settings.gradle当中主要是用来include子模块的,比如我
xiangzhihong
2018/02/01
2.3K0
gradle构建android项目详解

相似问题

gradle构建时间长- Android

07

在中构建非常长的时间

45

颤振非常长的构建时间

18

SSRS“不在”运行需要非常长的时间。

22

Gradle构建非常慢

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文