【课后作业01】初等模型 隐藏答案 | 返回首页

作者:欧新宇(Xinyu OU)
当前版本:Release v1.0
开发平台:Python3.11
运行环境:Intel Core i7-7700K CPU 4.2GHz, nVidia GeForce GTX 1080 Ti
本教案所涉及的数据集仅用于教学和交流使用,请勿用作商用。

最后更新:2024年3月2日


【知识点】

差分方程、微分方程

【作业要求】

使用word文档或Markdown文档进行作答,使用Python编写程序,最终结果合并为一个word文档或Markdown文档,并另存为PDF格式进行提交。

注意:可以使用手机拍照文档进行提交,但请不要使用word文档直接进行提交。

【问题描述】

1. [习题2.9-P52] 求下列方程组的符号解和数值解:

{x2yx=3x+3y=2\begin{cases} x^2 - y - x = 3 \\ x + 3y = 2\end{cases}

要求:使用Python进行编程求解,并适当撰写说明文字。

备注:求数值解时,只能求得一组数值解。

答案及解析:

A. 符号解:

{x1=1343y1=5+349,{x2=1+343y2=5349\begin{cases} x_1 = \frac{1 - \sqrt{34}}{3} \\ y_1 = \frac{5 + \sqrt{34}}{9} \end{cases}, \begin{cases} x_2 = \frac{1 + \sqrt{34}}{3} \\ y_2 = \frac{5 - \sqrt{34}}{9} \end{cases}

Python代码如下:

import sympy

sympy.var('x,y')
equ1 = sympy.Eq(3, x**2 - y - x)
equ2 = sympy.Eq(2, x + 3 * y)

solutions = sympy.solve((equ1, equ2), (x, y))
print(solutions)
[(1/3 - sqrt(34)/3, 5/9 + sqrt(34)/9), (1/3 + sqrt(34)/3, 5/9 - sqrt(34)/9)]

B. 数值解:

(1)根据Python编程习惯,定义一个数组变量 xx 来表示 x,yx, y,其形式为 x=[x,y]x = [x, y]

(2)将方程组转换为齐次方程组:

{x[0]2x[1]x[0]=3x[0]+3x[1]=2\begin{cases} x[0]^2 - x[1] - x[0] = 3 \\ x[0] + 3x[1] = 2\end{cases}

(3)使用Python编程求解可得(备注:求数值解时,只能求得一组数值解):

x1=1.6103,y1=1.2034x_1 = -1.6103, y_1 = 1.2034x2=2.2770,y2=0.0923x_2 = 2.2770, y_2 = -0.0923

from scipy.optimize import fsolve
import numpy as np

f = lambda x:[x[0]**2 - x[1] - x[0] - 3, 
            x[0] + 3*x[1] - 2]
solutions = fsolve(f, np.random.randn(2))
print(np.round(solutions, 4))

[ 2.277 -0.0923]

2. [习题2.11-P52] 已知 f(x)=(x+1x1)/2+sinx,g(x)=(x+3x3)/2+cosxf(x) = (|x+1| - |x-1|)/2 + \sin x, g(x) = (|x+3| - |x-3|)/2 + \cos x,求下列方程组的数值解。

{2x1=3f(y1)+4g(y2)13x2=2f(y1)+6g(y2)2y1=f(x1)+3g(x2)35y2=4f(x1)+6g(x2)1\begin{cases} 2x_1 = 3f(y_1) + 4g(y_2) - 1 \\ 3x_2 = 2f(y_1) + 6g(y_2) - 2 \\ y_1 = f(x_1) + 3g(x_2) - 3 \\ 5y_2 = 4f(x_1) + 6g(x_2) - 1 \end{cases}

要求使用Python进行求解。

答案及解析:

(1)根据python的编程习惯,定义一个数组变量 zz 用来表示 x1,x2,y1,y2x_1, x_2, y_1, y_2,其形式为 z=[x1,x2,y1,y2]z = [x_1, x_2, y_1, y_2]

(2)将方程组转换为齐次方程组:

{3f(z2)+4g(z3)12z0=02f(z2)+6g(z3)23z1=0f(z0)+3g(z1)3z2=04f(z0)+6g(z1)15z3=0\begin{cases} 3f(z_2) + 4g(z_3) - 1 - 2z_0 = 0 \\ 2f(z_2) + 6g(z_3) - 2 - 3z_1 = 0 \\ f(z_0) + 3g(z_1) - 3 - z_2 = 0 \\ 4f(z_0) + 6g(z_1) - 1 - 5z_3 = 0 \end{cases}

(3)使用Python编程求解可得:

x1=0.8588,x2=0.3022,y1=0.8451,y2=0.0156x_1 = -0.8588, x_2 = -0.3022, y_1 = -0.8451, y_2 = 0.0156

from scipy.optimize import fsolve
import numpy as np

f = lambda x: (abs(x+1) - abs(x-1))/2 + np.sin(x)
g = lambda x: (abs(x+3) - abs(x-3))/2 + np.cos(x)
equs = lambda z:[3*f(z[2]) + 4*g(z[3]) - 1 - 2*z[0],
                2*f(z[2]) + 6*g(z[3]) - 2 - 3*z[1],
                f(z[0]) + 3*g(z[1]) - 3 - z[2],
                4*f(z[0]) + 6*g(z[1]) - 1 -5*z[3]]
solutions = fsolve(equs, np.random.rand(4))
print(np.round(solutions, 4))

[-0.8588 0.3022 -0.8451 0.0156]

【课后作业01】初等模型 隐藏答案 | 返回首页