Euler公式2

import matplotlib.pyplot as plt
import numpy as np
x1 = np.zeros(100)
y1 = np.ones(100)
for i in range(1, 100):
    y1[i] = 1.1*y1[i-1]-0.2*x1[i-1]/y1[i-1]
    x1[i] = x1[i-1] + 0.1

    y1[i] = y1[i-1] + 0.5 * 0.1 * (y1[i-1] - 2 * x1[i-1] / y1[i-1] + y1[i] - 2 * x1[i] / y1[i])

    print('('+str(x1[i]),','+str(y1[i])+')')

plt.plot(x1, y1)
plt.show()

(0.1 ,1.095909090909091)
(0.2 ,1.1840965692429972)
(0.30000000000000004 ,1.2662013608757763)
(0.4 ,1.3433601514839986)
(0.5 ,1.4164019285369094)
(0.6 ,1.485955602415669)
(0.7 ,1.5525140913261455)
(0.7999999999999999 ,1.6164747827520576)
(0.8999999999999999 ,1.6781663636751858)
(0.9999999999999999 ,1.7378674010354138)
(1.0999999999999999 ,1.795819744910657)
(1.2 ,1.8522385990502925)
(1.3 ,1.9073204178377563)
(1.4000000000000001 ,1.9612493906319577)
(1.5000000000000002 ,2.0142030360599446)
(1.6000000000000003 ,2.066357283013655)
(1.7000000000000004 ,2.1178913249274696)
(1.8000000000000005 ,2.1689924782789043)
(1.9000000000000006 ,2.2198612426004756)
(2.0000000000000004 ,2.2707167397657666)
(2.1000000000000005 ,2.32180269966453)
(2.2000000000000006 ,2.373394153728064)
(2.3000000000000007 ,2.4258049938401265)
(2.400000000000001 ,2.479396548830104)
(2.500000000000001 ,2.5345873206656235)
(2.600000000000001 ,2.5918640039575958)
(2.700000000000001 ,2.651793881429891)
(2.800000000000001 ,2.715038640456334)
(2.9000000000000012 ,2.7823695879838817)
(3.0000000000000013 ,2.854684151012614)
(3.1000000000000014 ,2.933023438205294)
(3.2000000000000015 ,3.0185905110668165)
(3.3000000000000016 ,3.1127688834370595)
(3.4000000000000017 ,3.2171406572597903)
(3.5000000000000018 ,3.3335036404708074)
(3.600000000000002 ,3.463886814144074)
(3.700000000000002 ,3.610563653263825)
(3.800000000000002 ,3.7760630779598796)
(3.900000000000002 ,3.963178213525007)
(4.000000000000002 ,4.17497362733908)
(4.100000000000001 ,4.414792214087622)
(4.200000000000001 ,4.686263321770158)
(4.300000000000001 ,4.993313958871075)
(4.4 ,5.340184940330469)
(4.5 ,5.7314536139138195)
(4.6 ,6.172064414060678)
(4.699999999999999 ,6.667368012258601)
(4.799999999999999 ,7.223169376499372)
(4.899999999999999 ,7.845784702735557)
(4.999999999999998 ,8.542106985508674)
(5.099999999999998 ,9.319679958975977)
(5.1999999999999975 ,10.186780237956594)
(5.299999999999997 ,11.152507679941849)
(5.399999999999997 ,12.226884230333258)
(5.4999999999999964 ,13.420961769562064)
(5.599999999999996 ,14.746939729248737)
(5.699999999999996 ,16.21829347387519)
(5.799999999999995 ,17.84991465230496)
(5.899999999999995 ,19.658264913448846)
(5.999999999999995 ,21.661544558967222)
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于Euler公式,Matlab代码如下: syms theta euler = exp(i*theta) == cos(theta) + 1i*sin(theta) 这段代码使用了符号变量来表示复数中的theta,并使用了符号计算工具箱中的exp函数。然后使用三角函数cos和sin来表示实部和虚部。输出结果为: euler = exp(i*theta) == cos(theta) + 1i*sin(theta) 对于改进的Euler公式,Matlab代码如下: syms theta euler_improved = exp(i*theta) == cos(theta) + 1i*sin(theta) - (1/2)*exp(-i*theta)*((cos(theta))^2 + (sin(theta))^2) 这段代码同样使用了符号变量来表示复数中的theta,并使用了改进的Euler公式。输出结果为: euler_improved = exp(i*theta) == cos(theta) - (cos(theta)^2*exp(-i*theta))/2i - (sin(theta)^2*exp(-i*theta))/2i + sin(theta) ### 回答2: Euler公式和改进Euler公式是求解常微分方程数值解的重要方法。 Euler公式是一种简单的数值积分方法,其基本思想是通过离散化的步长逐步逼近微分方程的解。给定一个微分方程dy/dx = f(x, y),可以通过对初始条件y(x0)=y0进行迭代计算,得到一系列离散点的近似解。 Euler公式的近似计算公式为:yn+1 = yn + h * f(xn, yn), 其中,h为步长,xn和yn分别表示当前的x值和对应的近似解y值。 改进Euler公式是在基本Euler公式的基础上做了改进,通过使用初始点和迭代点之间的斜率的平均值来计算近似解。改进Euler公式的近似计算公式为:yn+1 = yn + h * (f(xn, yn) + f(xn+1, yn+h*f(xn, yn))) / 2, Matlab代码实现Euler公式的示例: ``` function [x, y] = eulerMethod(f, x0, y0, h, n) x = zeros(1, n+1); y = zeros(1, n+1); x(1) = x0; y(1) = y0; for i = 1:n x(i+1) = x(i) + h; y(i+1) = y(i) + h * f(x(i), y(i)); end end ``` Matlab代码实现改进Euler公式的示例: ``` function [x, y] = improvedEulerMethod(f, x0, y0, h, n) x = zeros(1, n+1); y = zeros(1, n+1); x(1) = x0; y(1) = y0; for i = 1:n x(i+1) = x(i) + h; y_temp = y(i) + h * f(x(i), y(i)); y(i+1) = y(i) + h * (f(x(i), y(i)) + f(x(i+1), y_temp)) / 2; end end ``` 以上是利用Matlab实现Euler公式和改进Euler公式的简单示例代码。根据实际需求,可以根据微分方程的形式和要求进行相应的改进和扩展。 ### 回答3: Euler公式是数学中的一个重要公式,可以用于近似计算微分方程的解。Euler公式通过把微分方程的导数近似为差商来进行计算,具体实现如下: 1. 首先,定义微分方程的初始条件,并确定时间步长和计算时间总长。 2. 使用一个循环来迭代计算微分方程的近似解。在每一步循环中,根据当前时间和解的值,计算微分方程的导数。 3. 根据导数计算差商,并根据差商和当前解的值,更新解的值。通过不断迭代,最终可以得到微分方程的近似解。 改进Euler公式是对Euler公式的一种改进,通过在计算差商时使用更准确的导数值来提高近似解的精度。具体实现如下: 1. 首先,定义微分方程的初始条件,并确定时间步长和计算时间总长。 2. 使用一个循环来迭代计算微分方程的近似解。在每一步循环中,根据当前时间和解的值,计算微分方程的导数。 3. 根据当前时间和解的值,计算导数的值,并将其作为差商的近似值。 4. 根据差商和当前解的值,更新解的值。通过不断迭代,最终可以得到微分方程的近似解。 改进Euler公式相比于普通Euler公式的优势在于,它使用更准确的导数值来进行近似计算,能够得到更精确的解。但是改进Euler公式的计算复杂度较高,因此在某些情况下可能并不适用。实际应用中,需要根据具体情况选择合适的数值方法来进行微分方程的近似计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值