第十三周Scipy

import numpy as np
from scipy.optimize import leastsq

m = 20
n = 12

A = np.random.randint(1, 100, size = (m , n))
b = np.random.randint(1, 100, size = (m, 1))
x0 = np.random.randint(1, 100, size = (1, n))
A = np.mat(A)
b = np.mat(b)

def func(x):
    x = x.reshape(n , 1)
    x = np.mat(x)
    
    r = A * x - b
    r = np.array(r)
    
    return np.array(r.T).reshape(m)

l = leastsq(func, x0)

x = l[0].reshape(n, 1)
print('x = ', x)
print('residal = ', A * np.mat(x) - b)
print('norm = ', np.linalg.norm(A * np.mat(x) - b))

运行

x =  [[ 0.80420686]
 [ 0.62469073]
 [-0.19798721]
 [-0.24153484]
 [-0.09265393]
 [ 0.76398557]
 [ 0.22034202]
 [-0.17669824]
 [ 0.04719834]
 [-0.06067864]
 [-0.64575209]
 [ 0.19693909]]
residal =  [[ -3.33044561]
 [  9.29616319]
 [ 11.38514723]
 [-22.06835924]
 [  5.98869136]
 [ 11.43222131]
 [-20.964829  ]
 [  9.52452761]
 [ 10.66786616]
 [-15.4983632 ]
 [-13.98776675]
 [ 13.83945544]
 [-30.41646446]
 [ 15.19362674]
 [  6.14056642]
 [  3.24390932]
 [-13.7308669 ]
 [ 21.8667791 ]
 [-19.56388707]
 [  8.93166629]]
norm =  66.97451994397635


------------------
(program exited with code: 0)

请按任意键继续. . .



      求函数f(x)的最大值

import numpy as np
import math
import scipy.optimize as sc

f = lambda x : -math.pow( math.sin(x-2), 2) * math.pow(math.e , -x*x)

b = sc.minimize(f, 0)

print('在 x = ' , b.x[0], ' 处有最大值 ', -b.fun)

在函数前加上一个负号后求的最小值的相反数就是原函数的最大值。

运行结果

在 x =  0.21624131913960304  处有最大值  0.9116854118471545

import numpy as np
from scipy.spatial.distance import pdist

n = 5
m = 4
X = []
for i in range(1, m + 1):
    x =  [i for y in range(n)]
    X.append(x)
    
X = np.array(X)
print(X)
d = pdist(X, metric = 'euclidean')
count = 0
for i in range(1, m):
    for j in range(i + 1, m+1):
        print(X[i-1],' and ',X[j-1], ' distance = ', d[count])
        count += 1

运行结果

[[1 1 1 1 1]
 [2 2 2 2 2]
 [3 3 3 3 3]
 [4 4 4 4 4]]
[1 1 1 1 1]  and  [2 2 2 2 2]  distance =  2.23606797749979
[1 1 1 1 1]  and  [3 3 3 3 3]  distance =  4.47213595499958
[1 1 1 1 1]  and  [4 4 4 4 4]  distance =  6.708203932499369
[2 2 2 2 2]  and  [3 3 3 3 3]  distance =  2.23606797749979
[2 2 2 2 2]  and  [4 4 4 4 4]  distance =  4.47213595499958
[3 3 3 3 3]  and  [4 4 4 4 4]  distance =  2.23606797749979


------------------
(program exited with code: 0)

请按任意键继续. . .







05-09
### SciPy 库简介 SciPy 是一个基于 Python 的开源科学计算库,它建立在 NumPy 之上并扩展了其功能。SciPy 提供了许多用于数值积分、优化、插值、傅里叶变换和其他科学计算任务的模块[^1]。 以下是关于如何安装和使用 SciPy 的一些基本指导: #### 安装 SciPy 要安装 SciPy,可以使用 `pip` 或者 Anaconda 来完成。推荐的方式如下所示: ```bash pip install scipy ``` 如果你正在使用 Anaconda,则可以通过以下命令来安装: ```bash conda install scipy ``` #### 使用 SciPy 进行科学计算 下面是一些常见的 SciPy 功能及其对应的子模块说明: ##### 数值积分 (scipy.integrate) 通过 `scipy.integrate.quad()` 函数实现一维定积分的功能。 ```python from scipy import integrate result, error = integrate.quad(lambda x: x**2, 0, 1) print(result) # 输出结果应接近于 1/3 ``` ##### 插值 (scipy.interpolate) 利用 `scipy.interpolate.interp1d()` 可以创建线性或者高阶多项式的插值函数。 ```python import numpy as np from scipy import interpolate x = np.linspace(0, 10, num=11, endpoint=True) y = np.cos(-x**2 / 9.0) f = interpolate.interp1d(x, y, kind='cubic') new_x = np.linspace(0, 10, num=41, endpoint=True) new_y = f(new_x) ``` ##### 线性代数操作 (scipy.linalg) 相比 NumPy 中的基础矩阵运算,`scipy.linalg` 提供更全面且高效的线性代数工具集。 ```python from scipy import linalg A = np.array([[1, 2], [3, 4]]) b = np.array([5, 6]) solution = linalg.solve(A, b) print(solution) # 解方程 Ax=b ``` ##### 统计分析 (scipy.stats) 提供广泛的统计分布以及测试方法。 ```python from scipy import stats rvs = stats.norm.rvs(loc=0, scale=1, size=1000) mean_value = rvs.mean() std_deviation = rvs.std(ddof=1) ``` #### 文档资源链接 官方文档提供了详尽的例子和技术细节,强烈建议查阅:https://docs.scipy.org/doc/scipy/ --- ### 注意事项 为了能够高效地运用 SciPy 编写性能良好的代码,熟悉 NumPy 是非常必要的,因为它构成了 SciPy 数据结构的核心部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值