#2.1

import numpy as np
import matplotlib.pyplot as plt

# 定义 x 的范围
x = np.linspace(-2, 2, 400)

# 计算各个函数的 y 值
y_chx = np.cosh(x)
y_shx = np.sinh(x)
y_exp_scaled = 0.5 * np.exp(x)

# 创建图形
plt.figure(figsize=(10, 6))

# 绘制 y = chx
plt.plot(x, y_chx, label='y = ch(x)', color='blue')

# 绘制 y = shx
plt.plot(x, y_shx, label='y = sh(x)', color='red')

# 绘制 y = 0.5 * e^x
plt.plot(x, y_exp_scaled, label='y = 0.5 * e^x', color='green')

# 添加标题和标签
plt.title('Functions: y = ch(x), y = sh(x), y = 0.5 * e^x')
plt.xlabel('x')
plt.ylabel('y')

# 添加图例
plt.legend()

# 显示图形
plt.grid(True)
plt.show()

#2.2

from scipy.special import gamma
import pylab as plt
import numpy as np
plt.rc('text',usetex=True)

x=np.linspace(-5,5,100)
plt.plot(x,gamma(x),c='k')
plt.xlabel('$x$')
plt.ylabel('$\Gamma(x)$');plt.show()

#2.3

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 400)  # 生成x坐标
for k in range(1, 7):
    y = k * x**2 + 2 * k
    plt.plot(x, y, label=f'y={k}x²+2{k}')

plt.xlabel('x')
plt.ylabel('y')
plt.title('曲线图')
plt.legend()
plt.grid(True)
plt.show()

#2.4

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 400)

fig, axs = plt.subplots(2, 3, figsize=(15, 10))  # 创建2行3列的子窗口
axs = axs.flatten()  # 将子窗口数组展平,方便遍历

for k in range(1, 7):
    y = k * x**2 + 2 * k
    axs[k-1].plot(x, y)
    axs[k-1].set_title(f'y={k}x²+2{k}')
    axs[k-1].grid(True)

plt.tight_layout()
plt.show()

#2.5

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 定义范围和网格
x = np.linspace(-10, 10, 400)
y = np.linspace(-10, 10, 400)
X, Y = np.meshgrid(x, y)

# 单叶双曲面: x²/4 + y²/10 - z²/8 = 1
# 改写为 z² = 8 * (x²/4 + y²/10 - 1)
Z1 = np.sqrt(8 * (X**2 / 4 + Y**2 / 10 - 1))

# 椭圆抛物面: z = x²/4 + y²/6
Z2 = X**2 / 4 + Y**2 / 6

fig = plt.figure(figsize=(14, 7))

# 单叶双曲面
ax1 = fig.add_subplot(1, 2, 1, projection='3d')
ax1.plot_surface(X, Y, Z1, cmap='viridis', alpha=0.6)
ax1.plot_surface(X, Y, -Z1, cmap='viridis', alpha=0.6)  # 画出双面
ax1.set_title('单叶双曲面: x²/4 + y²/10 - z²/8 = 1')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
ax1.set_zlabel('Z')

# 椭圆抛物面
ax2 = fig.add_subplot(1, 2, 2, projection='3d')
ax2.plot_surface(X, Y, Z2, cmap='inferno')
ax2.set_title('椭圆抛物面: z = x²/4 + y²/6')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_zlabel('Z')

plt.tight_layout()
plt.show()

#2.7

import numpy as np

# 方程组 1(有无穷多解)
A1 = np.array([[4, 2, -1],
               [3, -1, 2],
               [11, 3, 0]])
b1 = np.array([2, 10, 8])

# 使用最小二乘法求解方程组 1 的解
x1, residuals, rank, s = np.linalg.lstsq(A1, b1, rcond=None)
print("方程组 1 最小二乘解:", x1)

# 方程组 2(唯一解)
A2 = np.array([[2, 3, 1],
               [1, -2, 4],
               [3, 8, -2],
               [4, -1, 9]])
b2 = np.array([4, -5, 13, -6])

# 使用最小二乘法求解方程组 2 的解(由于方程数多于未知数)
x2, residuals, rank, s = np.linalg.lstsq(A2, b2, rcond=None)
print("方程组 2 最小二乘解:", x2)

#2.8

import numpy as np 
from numpy.linalg import inv
a=4*np.eye(1000)+np.eye(1000,k=-1)+np.eye(1000,k=1)
b=np.arange(1,1001).reshape(1000,1)
x=inv(a)@b;print(x)

#2.9

import sympy as sp

# 定义符号
x, y = sp.symbols('x y')

# 定义方程
eq1 = x**2 - y - x - 3
eq2 = x - 3
eq3 = y - 2

# 求解方程组
solutions = sp.solve([eq1, eq2, eq3], (x, y))

print("Symbolic solution:", solutions)

#2.10

import numpy as np  
import matplotlib.pyplot as plt  
  
# 绘制上半部分(抛物线部分)  
y = np.linspace(1, 3, 400)  
x = np.sqrt(4*y - y**2)  
plt.plot(x, y, 'b-', lw=2, label='Upper Part (Parabola)')  
plt.plot(-x, y, 'b-', lw=2)  
  
# 绘制下半部分(半球部分,但只显示其轮廓在y=1处的圆)  
circle_x = np.linspace(-2, 2, 400)  
circle_y = np.ones_like(circle_x)  # 创建一个全为1的数组,表示y=1  
plt.plot(circle_x, circle_y, 'r-', lw=2, label='Lower Part (Circle at y=1)')  
  
# 为了更清楚地看到圆,我们可以稍微增加它的半径并绘制一个虚线圆  
# 注意:这只是一个视觉辅助,不是容器的实际部分  
expanded_circle_x = 2.2 * np.cos(np.linspace(0, 2*np.pi, 400))  
expanded_circle_y = 1.2 * np.ones_like(expanded_circle_x)  
plt.plot(expanded_circle_x, expanded_circle_y, 'r--', lw=1)  
  
# 设置坐标轴范围和标签  
plt.xlim(-3, 3)  
plt.ylim(0, 3.5)  
plt.xlabel('x')  
plt.ylabel('y')  
plt.title('Container Cross-Section')  
plt.legend()  
plt.axis('equal')  # 确保x轴和y轴比例相同  
plt.grid(True)  
plt.show()


import numpy as np  
import scipy.integrate as spi  
  
def radius(y):  
    return np.sqrt(4*y - y**2)  
def volume_paraboloid(y):  
    return 2 * np.pi * y * radius(y)  
V_paraboloid, _ = spi.quad(volume_paraboloid, 1, 3)  
V_hemisphere = (1/2) * (4/3) * np.pi * 2**3  
   
print(f"容器的体积(只考虑抛物面部分): {V_paraboloid}")  
print(f"半球面部分(0≤y≤1)的体积: {V_hemisphere}")

#2.11

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fsolve

# 定义 f(x) 和 g(x)
def f(x):
    return (np.abs(x + 1) - np.abs(x - 1)) / 2 + np.sin(x)

def g(x):
    return (np.abs(x + 3) - np.abs(x - 3)) / 2 + np.cos(x)

# 定义方程组
def equations(x):
    return [f(x), g(x)]

# 多次尝试不同的初始猜测
initial_guesses = [-5, -1, 0, 1, 5]
solutions = []

for guess in initial_guesses:
    try:
        sol = fsolve(equations, guess)
        # 验证解是否符合要求
        if np.allclose(equations(sol), [0, 0]):
            solutions.append(sol[0])
    except Exception as e:
        print(f"Error with initial guess {guess}: {e}")

# 去重并输出解决方案
solutions = np.unique(solutions)
print("Numerical solutions:", solutions)

# 可视化 f(x) 和 g(x)
x = np.linspace(-10, 10, 400)
plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.plot(x, f(x), label='$f(x)$')
plt.axhline(0, color='black', linewidth=0.5)
plt.title('$f(x)$')
plt.xlabel('$x$')
plt.ylabel('$f(x)$')
plt.grid(True)

plt.subplot(1, 2, 2)
plt.plot(x, g(x), label='$g(x)$', color='orange')
plt.axhline(0, color='black', linewidth=0.5)
plt.title('$g(x)$')
plt.xlabel('$x$')
plt.ylabel('$g(x)$')
plt.grid(True)

plt.tight_layout()
plt.show()

#2.12

import sympy as sp

# 定义符号矩阵
A = sp.Matrix([[-1, 1, 0],
               [-4, 3, 0],
               [1, 0, 2]])

# 计算特征值和特征向量
eigenvalues = A.eigenvals()
eigenvectors = A.eigenvects()

print("特征值:", eigenvalues)
print("特征向量:", eigenvectors)

#2..13

import numpy as np  
from scipy.optimize import least_squares  
  
# 定义函数  
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)  
  
# 定义方程组  
eqs = 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],  
    f(z[3]) + g(z[1]) - 2 - z[0] - z[2],  
    2 * f(z[0]) - 10 * g(z[2]) - 5 - z[1] - 3 * z[3]  
]  
  
# 初始猜测值  
initial_guess = np.array([1.0, 1.0, 1.0, 1.0])  # 可以根据问题调整  
  
# 使用 least_squares 求解方程组  
result = least_squares(eqs, initial_guess)  
  
# 打印结果  
print(result.x)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐