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

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

📜流体力学电磁学运动学动力学化学和电路中欧拉法示例: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>

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HNU OS实验五

本内容针对湖南大学特色os实验前言 — os2024 lab 文档

无约束动态矩阵控制(DMC)

0、前言 动态矩阵控制&#xff08;Dynamic Matrix Control&#xff0c;DMC&#xff09;是一种典型的模型预测控制方法&#xff0c;其不需要被控对象的数学模型&#xff0c;只需要获取被控对象的阶跃响应序列即可实现控制效果&#xff0c;但其需要被控对象是渐近稳定的。 1、稳…

Unity做一个剪辑声音的工具 在编辑器模式实时剪辑声音

Unity音频剪辑工具的实现 在游戏开发中&#xff0c;音频是一个至关重要的元素。音频剪辑工具能够帮助开发者高效地编辑和管理音频文件。本文将解析一个基于Unity编辑器的音频剪辑工具的实现方法 效果 工具功能 该音频剪辑工具允许用户在Unity编辑器中加载音频片段&#xff0…

【django问题集】django.db.utils.OperationalError: (1040, ‘Too many connections‘)

一、报错内容 django.db.utils.OperationalError: (1040, Too many connections) 主要体现&#xff1a;就是请求不了后台&#xff0c;登录都登录不了。 二、代码优化 原生django配置的mysql连接是没有连接池的功能&#xff0c;会导致mysql连接创建过多导致连接数超过了mysql服…

解决安全规模问题:MinIO 企业对象存储密钥管理服务器

在强大可靠的存储解决方案领域&#xff0c;MinIO 作为持久层脱颖而出&#xff0c;为组织提供安全、持久和可扩展的存储选项。MinIO 通常负责处理关键任务数据&#xff0c;在确保高可用性方面发挥着至关重要的作用&#xff0c;有时甚至在全球范围内。存储数据的性质&#xff0c;…

内核模块的各种概念及示例

基本概念 (1)模块本身不被编译入内核映像&#xff0c;从而控制了内核镜像的大小。模块一旦insmod&#xff0c;它就和内核中的其他部分完全一样 (2)内核中已加载模块的信息也存在于/sys/module目录下&#xff1b;内核中将包含/sys/module/test_mod目录 (3)modprobe在加载某模…

单图创造虚拟世界只需10秒!斯坦福MIT联合发布WonderWorld:高质量交互生成

文章链接&#xff1a;https://arxiv.org/pdf/2406.09394 项目地址: https://WonderWorld-2024.github.io/ 本文介绍了一种新颖的框架—— WonderWorld&#xff0c;它可以进行交互式三维场景外推&#xff0c;使用户能够基于单张输入图像和用户指定的文本探索和塑造虚拟环境。尽…

Vue3插件安装

一、volar插件安装 volar&#xff1a;Vue文件的语法提示和高亮提醒。volar已经更名为Vue - Official&#xff0c;其安装步骤如下。 (1)打开vscode&#xff0c;点击扩展面板&#xff0c;在搜索窗口中输入volar&#xff0c;选择Vue - Official进行安装。 &#xff08;2&#xff0…

ES 8.14 向量搜索优化

参考&#xff1a;https://blog.csdn.net/UbuntuTouch/article/details/139502650 检索器&#xff08;standard、kNN 和 RRF&#xff09; 检索器&#xff08;retrievers&#xff09;是搜索 API 中的一种新抽象概念&#xff0c;用于描述如何检索一组顶级文档。检索器被设计为可以…

安卓系统安装linux搭建随手服务器termux平替软件介绍

引言 旧手机丢可惜&#xff0c;可以用ZeroTermux&#xff08;一款代替termux&#xff09;的超级终端&#xff0c;来模拟Linux&#xff08;甚至你可以模拟Win&#xff0c;只要性能够用&#xff09; ps&#xff1a;此软件只是termux的增强版&#xff0c;相当于增加右边菜单&…

vue2 + Lodop 制作可视化设计页面 实现打印设计功能(一)

前言&#xff1a; 此功能的来源来自于当时需要制作一个便于客户操作的打印设计功能&#xff0c;然后就有了这个项目。这个帖子主要是用于分享与谈论&#xff0c;相互学习。 目标&#xff1a; 能在vue页面中拖拽组件支持批量操作拖动通过拖拽组件列表里的组件到page进行添加实…

物联网技术-第5章-物联网数据处理

目录 1.物联网数据特征 2.物联网数据处理 &#xff08;1&#xff09;数据清洗 &#xff08;2&#xff09;数据存储 &#xff08;3&#xff09;数据融合 &#xff08;4&#xff09;数据挖掘 3.大数据基本概念 4.云计算基本概念 &#xff08;1&#xff09;背景 &#xf…

leetcode 动态规划 (基础版) 下降路径最小和

题目&#xff1a; 题解&#xff1a; 这题和三角型路径和相似&#xff0c;但这题无法在像哪一题一样通过换一个方向逃避下标特判。所以这道题就写一个下标特判的方案。特殊的下标是每一行的第一个元素和最后一个元素&#xff0c;它们由头上的一个元素和左上和右上中的其中一个…

HTML(17)——圆角和盒子阴影

盒子模型——圆角 作用&#xff1a;设置元素的外边框为圆角 属性名&#xff1a;border-radius 属性值&#xff1a;数字px/百分比 也可以每个角设置不同的效果&#xff0c;从左上角顺时针开始赋值&#xff0c;没有取值的角与对角取值相同。 正圆 给正方形盒子设置圆角属性…

极验行为式验证码适配Harmony 鸿蒙SDK下载

现阶段&#xff0c;越来越多的开发者正在积极加入鸿蒙生态系统。随着更多开发者的参与&#xff0c;早在去年9月&#xff0c;极验就成为首批拥有鸿蒙NEXT内测版本和手机系统测试机会的验证码供应商。 为了提高各开发者及企业客户集成鸿蒙版本行为验4.0的效率&#xff0c;方便大家…

土壤墒情监测系统的工作原理

TH-TS600土壤墒情监测系统是一种能够实时、连续监测土壤湿度和水分状况的设备系统。以下是关于土壤墒情监测系统的详细介绍&#xff1a; 土壤墒情监测系统通常由以下几个部分组成&#xff1a;用于实时监测土壤湿度、温度等关键参数。传感器可以根据需要布置在不同的深度和位置…

OceanMind海睿思参与编写的《数据智能白皮书(2024年)》正式发布!

近日&#xff0c;由中国通信标准化协会大数据技术标准推进委员会&#xff08;CCSA TC601&#xff09;牵头和组织&#xff0c;中新赛克海睿思作为TC601-WG16人工智能数据工作组合作伙伴参与编写的《数据智能白皮书&#xff08;2024年&#xff09;》正式发布。 中新赛克的卢云川、…

多波束测线问题

多波束测线问题 问题的背景是海洋测深技术&#xff0c;特别是涉及单波束测深和多波束测深系统。这些系统利用声波传播原理来测量水体深度。 单波束测深系统通过向海底发射声波信号并记录其返回时间来测量水深。该系统的特点是每次只有一个波束打到海底&#xff0c;因此数据分布…

秋招突击——6/17——复习{整理昨天的面试资料}——新作{删除链表倒数第n个节点}

文章目录 引言复习新作删除链表倒数第N个节点题目描述个人实现参考实现 总结 引言 主管面&#xff0c;面的很凄惨&#xff0c;不过无所谓了&#xff0c;我已经尽力了。上午都在整理的面经&#xff0c;没有复习算法&#xff0c;而且这两天要弄一下论文&#xff0c;二十号就要提…

小电流接地系统单向故障仿真分析

基于Matlab/simulink的小电流接地系统单向故障仿真分析&#xff0c;涵盖了中性点不接地系统仿真和中性点经消弧线圈接地系统仿真模型。 在电力系统中&#xff0c;接地方式的选择至关重要。小电流接地系统&#xff0c;也称为非有效接地系统&#xff0c;在发生单相接地故障时&am…