Python多语言欧拉法和预测校正器实现

news2024/11/26 10:03:49

📜流体力学电磁学运动学动力学化学和电路中欧拉法

📜流体力学电磁学运动学动力学化学和电路中欧拉法示例:Python重力弹弓流体晃动微分方程模型和交直流电阻电容电路
在这里插入图片描述

✒️多语言实现欧拉法和修正欧拉法

在数学和计算科学中,欧拉方法(也称为前向欧拉方法)是一种用于求解具有给定初值的常微分方程的一阶数值程序。考虑一个微分方程 d y / d x = f ( x , y ) d y / d x=f(x, y) dy/dx=f(x,y),初始条件为 y ( x 0 ) = y 0 y(x 0)=y 0 y(x0)=y0,则该方程的逐次逼近可由下式给出:
y ( n + 1 ) = y ( n ) + h ∗ f ( x ( n ) , y ( n ) ) y(n+1)=y(n)+h * f(x(n), y(n)) y(n+1)=y(n)+hf(x(n),y(n))
其中 h = ( x ( n ) − x ( 0 ) ) / n h=(x(n)-x(0)) / n h=(x(n)x(0))/n, $h $表示步长。选择较小的 h h h​ 值会导致更准确的结果和更多的计算时间。

例如,考虑微分方程 d y / d x = ( x + y + x y ) d y / d x=(x+y+x y) dy/dx=(x+y+xy),初始条件为 y ( 0 ) = 1 y (0)=1 y(0)=1,步长为 h = 0.025 h =0.025 h=0.025。求 y ( 0.1 ) y(0.1) y(0.1)​。

解: f ( x , y ) = ( x + y + x y ) f(x, y)=(x+y+x y) f(x,y)=(x+y+xy)

x 0 = 0 , y 0 = 1 , h = 0.025 x 0=0, y 0=1, h=0.025 x0=0,y0=1,h=0.025

现在我们可以使用欧拉公式计算 y 1 y_1 y1
y 1 = y 0 + h ∗ f ( x 0 , y 0 ) y 1 = 1 + 0.025 ∗ ( 0 + 1 + 0 ∗ 1 ) y 1 = 1.025 y ( 0.025 ) = 1.025. \begin{aligned} & y_1=y 0+h * f(x 0, y 0) \\ & y_1=1+0.025 *(0+1+0 * 1) \\ & y_1=1.025 \\ & y(0.025)=1.025 . \end{aligned} y1=y0+hf(x0,y0)y1=1+0.025(0+1+01)y1=1.025y(0.025)=1.025.
类似地我们可以计算 y ( 0.050 ) , y ( 0.075 ) , … y(0.050), y(0.075), \ldots y(0.050),y(0.075), y ( 0.1 ) y(0.1) y(0.1)

y ( 0.1 ) = 1.11167 y(0.1)=1.11167 y(0.1)=1.11167

Python实现:

def func( x, y ):
	return (x + y + x * y)
	
def euler( x0, y, h, x ):
	temp = -0

	while x0 < x:
		temp = y
		y = y + h * func(x0, y)
		x0 = x0 + h

	print("Approximate solution at x = ", x, " is ", "%.6f"% y)
	
x0 = 0
y0 = 1
h = 0.025
x = 0.1

euler(x0, y0, h, x)

C++实现:

#include <iostream>
using namespace std;

float func(float x, float y)
{
	return (x + y + x * y);
}

void euler(float x0, float y, float h, float x)
{
	float temp = -0;

	while (x0 < x) {
		temp = y;
		y = y + h * func(x0, y);
		x0 = x0 + h;
	}

	cout << "Approximate solution at x = "
		<< x << " is " << y << endl;
}

int main()
{

	float x0 = 0;
	float y0 = 1;
	float h = 0.025;

	float x = 0.1;

	euler(x0, y0, h, x);
	return 0;
}

C#实现:

using System;

class GFG {

	static float func(float x, float y)
	{
		return (x + y + x * y);
	}

	static void euler(float x0, float y, float h, float x)
	{

		while (x0 < x) {
			y = y + h * func(x0, y);
			x0 = x0 + h;
		}

		Console.WriteLine("Approximate solution at x = "
						+ x + " is " + y);
	}

	public static void Main()
	{

		float x0 = 0;
		float y0 = 1;
		float h = 0.025f;
		float x = 0.1f;

		euler(x0, y0, h, x);
	}
}

Java实现:

import java.io.*;

class Euler {
	float func(float x, float y)
	{
		return (x + y + x * y);
	}

	void euler(float x0, float y, float h, float x)
	{
		float temp = -0;
		while (x0 < x) {
			temp = y;
			y = y + h * func(x0, y);
			x0 = x0 + h;
		}

		System.out.println("Approximate solution at x = "
						+ x + " is " + y);
	}

	public static void main(String args[]) throws IOException
	{
		Euler obj = new Euler();
		float x0 = 0;
		float y0 = 1;
		float h = 0.025f;
		float x = 0.1f;

		obj.euler(x0, y0, h, x);
	}
}

JavaScript实现:

<script>

	function func(x, y)
	{
		return (x + y + x * y);
	}

	function euler(x0, y, h, x)
	{
		let temp = -0;

		while (x0 < x) {
			temp = y;
			y = y + h * func(x0, y);
			x0 = x0 + h;
		}
		document.write("Approximate solution at x = "
						+ x + " is " + y);
	}

	let x0 = 0;
	let y0 = 1;
	let h = 0.025;

	let x = 0.1;

	euler(x0, y0, h, x);

</script>

预测校正器或修正欧拉法

Python实现

def f(x, y):
	v = y - 2 * x * x + 1;
	return v;

def predict(x, y, h):
	
	y1p = y + h * f(x, y);
	return y1p;


def correct(x, y, x1, y1, h):
	

	e = 0.00001;
	y1c = y1;

	while (abs(y1c - y1) > e + 1):
		y1 = y1c;
		y1c = y + 0.5 * h * (f(x, y) + f(x1, y1));

	return y1c;

def printFinalValues(x, xn, y, h):
	while (x < xn):
		x1 = x + h;
		y1p = predict(x, y, h);
		y1c = correct(x, y, x1, y1p, h);
		x = x1;
		y = y1c;


	print("The final value of y at x =",
					int(x), "is :", y);


if __name__ == '__main__':

	x = 0; y = 0.5;
	xn = 1;
	h = 0.2;

	printFinalValues(x, xn, y, h);

C++实现

#include <bits/stdc++.h>
using namespace std;

double f(double x, double y)
{
	double v = y - 2 * x * x + 1;
	return v;
}

double predict(double x, double y, double h)
{
	double y1p = y + h * f(x, y);
	return y1p;
}

double correct(double x, double y,
			double x1, double y1,
			double h)
{

	double e = 0.00001;
	double y1c = y1;

	do {
		y1 = y1c;
		y1c = y + 0.5 * h * (f(x, y) + f(x1, y1));
	} while (fabs(y1c - y1) > e);

	return y1c;
}

void printFinalValues(double x, double xn,
					double y, double h)
{

	while (x < xn) {
		double x1 = x + h;
		double y1p = predict(x, y, h);
		double y1c = correct(x, y, x1, y1p, h);
		x = x1;
		y = y1c;
	}

	cout << "The final value of y at x = "
		<< x << " is : " << y << endl;
}

int main()
{
	double x = 0, y = 0.5;
	double xn = 1;
	double h = 0.2;

	printFinalValues(x, xn, y, h);

	return 0;
}

C#实现

using System;

class GFG
{
	
static double f(double x, double y)
{
	double v = y - 2 * x * x + 1;
	return v;
}

static double predict(double x, double y, double h)
{
	double y1p = y + h * f(x, y);
	return y1p;
}

static double correct(double x, double y,
			double x1, double y1,
			double h)
{

	double e = 0.00001;
	double y1c = y1;

	do
	{
		y1 = y1c;
		y1c = y + 0.5 * h * (f(x, y) + f(x1, y1));
	}
	while (Math.Abs(y1c - y1) > e);

	return y1c;
}

static void printFinalValues(double x, double xn,
					double y, double h)
{

	while (x < xn) 
	{
		double x1 = x + h;
		double y1p = predict(x, y, h);
		double y1c = correct(x, y, x1, y1p, h);
		x = x1;
		y = y1c;
	}

	Console.WriteLine("The final value of y at x = "+
						x + " is : " + Math.Round(y, 5));
}

static void Main()
{

	double x = 0, y = 0.5;
	double xn = 1;
	double h = 0.2;

	printFinalValues(x, xn, y, h);
}
}

Java实现

import java.text.*;

class GFG
{

static double f(double x, double y)
{
	double v = y - 2 * x * x + 1;
	return v;
}

static double predict(double x, double y, double h)
{
	double y1p = y + h * f(x, y);
	return y1p;
}

static double correct(double x, double y,
					double x1, double y1,
					double h)
{
	double e = 0.00001;
	double y1c = y1;

	do
	{
		y1 = y1c;
		y1c = y + 0.5 * h * (f(x, y) + f(x1, y1));
	}
	while (Math.abs(y1c - y1) > e);

	return y1c;
}

static void printFinalValues(double x, double xn,
					double y, double h)
{

	while (x < xn) 
	{
		double x1 = x + h;
		double y1p = predict(x, y, h);
		double y1c = correct(x, y, x1, y1p, h);
		x = x1;
		y = y1c;
	}

	DecimalFormat df = new DecimalFormat("#.#####");
	System.out.println("The final value of y at x = "+
						x + " is : "+df.format(y));
}

public static void main (String[] args) 
{

	double x = 0, y = 0.5;
	double xn = 1;
	double h = 0.2;

	printFinalValues(x, xn, y, h);
}
}

JavaScript实现

<script>
	function f(x , y) {
		var v = y - 2 * x * x + 1;
		return v;
	}

	function predict(x , y , h) {
		var y1p = y + h * f(x, y);
		return y1p;
	}

	function correct(x , y , x1 , y1 , h) {

		var e = 0.00001;
		var y1c = y1;

		do {
			y1 = y1c;
			y1c = y + 0.5 * h * (f(x, y) + f(x1, y1));
		} while (Math.abs(y1c - y1) > e);
		return y1c;
	}

	function printFinalValues(x , xn , y , h) {

		while (x < xn) {
			var x1 = x + h;
			var y1p = predict(x, y, h);
			var y1c = correct(x, y, x1, y1p, h);
			x = x1;
			y = y1c;
		}

		document.write("The final value of y at x = " + x + " is : " + y.toFixed(5));
	}

		var x = 0, y = 0.5;
		var xn = 1;

		var h = 0.2;
		printFinalValues(x, xn, y, h);
</script>

👉参阅:计算思维 | 亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1845625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用群辉NAS打造影视墙(Video Station篇)

目录 一、群辉套件Video Station 1、安装 2、进入系统 3、配置刮削器 4、获取TMDB网站API密钥 5、配置DNS (1)开启SSH (2)使用终端工具连接到NAS (3)修改hosts文件 (4)再次测试连接 6、设置目录 二、手机端APP设置 三、电视端APP 四、解决影视信息错误 N…

数仓开发那些事_番外

一位神州的正式员工&#xff08;没错&#xff0c;就是之前文章中出现的实习生&#xff09;&#xff1a;一闪&#xff0c;你今年涨工资了吗&#xff1f; 一闪&#xff1a;mad&#xff0c;一年辛苦到头只涨了500米 神州员工&#xff1a;你去年绩效不是优秀吗&#xff0c;怎么就涨…

洛杉矶裸机云服务器怎么用

洛杉矶裸机云服务器是一种结合了物理服务器性能和云服务灵活性的高性能计算服务。它为用户提供了高效、安全的计算和存储能力&#xff0c;特别适合需要大量数据处理和快速响应的应用。具体分析如下&#xff0c;rak部落小编为您整理发布洛杉矶裸机云服务器怎么用。 1. 硬件配置选…

openstack-同一物理机中透传不同GPU时的nova配置记录

文章目录 前言一、不同加速卡的型号信息二、计算节点增加配置信息1.nova-compute服务的nova.conf 三、控制节点增加配置信息1.nova-conductor服务的nova.conf2.nova-scheduler服务的nova.conf3.nova-api服务的nova.conf 四、准备实例模版五、进行测试&#xff0c;创建虚拟机、检…

从零开始:视频直播美颜SDK和API开发接入详解

在当今数字化时代&#xff0c;视频直播已经成为了社交媒体和在线娱乐的重要组成部分。而美颜功能作为视频直播的一个关键特性&#xff0c;可以显著提升用户体验&#xff0c;吸引更多观众参与。因此&#xff0c;了解如何从零开始开发和接入视频直播美颜SDK和API&#xff0c;对于…

领域驱动设计(DDD)微服务架构模式总结

part1. Domain Driven Design(Strategic Design,Tactical Design) Top Down focus on business or activityy domain Ubiquitous Language:统一语言 Tactical Design Tools&#xff1a;战术性设计工具 Implementing Domain Driven Design(Event storming,DDD in code) DDD总结…

mysql model_path longblob 类型文件操作

在 MySQL 中&#xff0c;如果你有一个表包含一个 LONG BLOB 类型的字段&#xff08;例如 model_path&#xff09;&#xff0c;你可以使用 SQL 查询来提取该字段中的二进制数据&#xff0c;并将其下载为文件。以下是一个完整的步骤来实现这个过程&#xff1a; 步骤1&#xff1a;…

虚拟3D沉浸式展会编辑平台降低了线上办展的门槛

在数字化浪潮的引领下&#xff0c;VR虚拟网上展会正逐渐成为企业展示品牌实力、吸引潜在客户的首选平台。我们与广交会携手走过三年多的时光&#xff0c;凭借优质的服务和丰富的经验&#xff0c;赢得了客户的广泛赞誉。 面对传统展会活动繁多、企业运营繁忙的挑战&#xff0c;许…

redis.conf 参数详解,方便进行性能优化配置

以下是redis.conf中一些常见参数的详细说明&#xff1a; daemonize&#xff1a;是否以后台进程运行&#xff0c;默认为no&#xff1b; pidfile&#xff1a;如以后台进程运行&#xff0c;则需指定一个pid&#xff0c;默认为/var/run/redis.pid&#xff1b;bind&#xff1a;绑定主…

微信小程序登录流程详情及Java代码

一、流程图 说明&#xff1a; 调用 wx.login() 获取 临时登录凭证code &#xff0c;并回传到开发者服务器。 调用 auth.code2Session 接口&#xff0c;换取 用户唯一标识 OpenID 和 会话密钥 session_key。 获取手机号&#xff0c;调用wx.getPhoneNumber() &#xff0c;获取加密…

AI口语练习APP的开发流程

开发AI口语练习APP是一个持续的过程&#xff0c;需要多学科团队的紧密合作&#xff0c;包括产品经理、UI/UX设计师、前后端开发者、机器学习工程师、测试工程师和市场运营人员等。随着技术的发展和用户需求的变化&#xff0c;开发流程可能需要相应地进行调整和优化。AI口语练习…

【Python机器学习实战】 | 基于支持向量机(Support Vector Machine, SVM)进行分类和回归任务分析

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

zynq qspi启动、无SD卡、格式化分区emmc、调试全过程

1 背景 使用黑金开发板&#xff0c;全部开发流程避开使用SD卡调试&#xff0c;zynq开发过程中很多资料都是基于SD启动。这样就对新板卡调试带来了一定的困难&#xff0c;因为新板卡基本上没有设计SD卡。这里就一步一步实现qspi启动内核&#xff0c;格式化分区emmc&#xff0c;…

leetCode40组合总和(回溯)

题目 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次示例 : 输入: candidates [2,5,2,1,2], target 5, 输出: [ [1,2,2], [5] ]回溯一般模…

[package-view] RegisterGUI.java-自用

java GUI : frame---> panel --> components[button/输入框/标签] JFrame-->JPanel---> [JButton/JTextField/JLabel] /** This code sets up a registration window using Swing. * The window includes input fields for the users name, ID,* and password, …

vue3 自定义指令-积分埋点

自用笔记&#xff0c;内容可能不全 // package.json "sunshine-track": "^1.0.0-beta.2",// track index.jsimport Track from sunshine-trackconst options {projectKey: test-project, // 项目的keyuserId: digger, // 用户idreport: {url: http://exam…

uniapp app打开微信客服

按钮触发 uni.share({provider: "weixin",openCustomerServiceChat: true,customerUrl: https://work.weixin.qq.com/kfid/*************, //企业微信地址corpid: ww13edaa**********, //企业idsuccess: (res) > {console.log("success:" JSON.string…

Redis精要

一、什么是缓存击穿、缓存穿透、缓存雪崩&#xff1f; 缓存穿透 【针对大量非法访问的请求&#xff0c;缓存中没有&#xff0c;直接访问DB】 缓存穿透指的查询缓存和数据库中都不存在的数据&#xff0c;这样每次请求直接打到数据库&#xff0c;就好像缓存不存在 一样。 对于系…

【经验分享】Ubuntu24.04安装微信

【经验分享】Ubuntu24.04安装微信(linux官方2024universal版) 文章如下&#xff0c;22.04和24.04微信兼容 【经验分享】Ubuntu22.04安装微信(linux官方2024universal版) 实测Ubuntu24.04LTS版本可以兼容。

cenots 出现 curl 外网地址很慢,或者微信授权很慢

用 curl 访问链接&#xff0c;很慢才显示接口、或者微信授权很慢&#xff0c; 微信授权&#xff0c;很慢才授权成功&#xff0c;平均延时 5s 可能是 dns配置问题&#xff0c;直接修改 sudo vim /etc/resolv.conf 的 nameserver 改为 114.114.114.114 即可 其他…