【线代&NumPy】第六章 - 向量1课后练习 | 向量计算 | 求两向量夹角 | 求正投影 | 简述并提供代码

【线代&NumPy】第六章 - 向量1课后练习 | 向量计算 | 求两向量夹角 | 求正投影 | 简述并提供代码,第1张

【线代&NumPy】第六章 - 向量1课后练习 | 向量计算 | 求两向量夹角 | 求正投影 | 简述并提供代码

 例1:向量计算

import numpy as np

def getVector(mag, deg): # 大小,方向,生成对应的向量
    vec = np.zeros(2)
    vec[0] = mag*np.cos(deg*2*np.pi/360)
    vec[1] = mag*np.sin(deg*2*np.pi/360)
    return vec

def getMagDeg(vec): # 计算向量的大小和方向
    mag = np.sqrt(vec[0]*vec[0]+vec[1]*vec[1])
    deg = np.arctan(vec[1]/vec[0]) * 360/(2*np.pi)
    return mag, deg

F1 = getVector(100, 30) # 大小 100N, 方向 30˚
F2 = getVector(120, 60) # 大小 120N, 方向 60˚
Fsum = F1 + F2
magn, angle = getMagDeg(Fsum)
print("大小: ", magn)
print("方向: ", angle)

 运行结果:

大小:  212.56671821060448
方向:  46.395392948206855

 例2:中间角,正投影

import numpy as np

def angle2vectors(v, w): # 计算两向量之间的夹角
    vnorm = np.linalg.norm(v)
    wnorm = np.linalg.norm(w)
    vwdot = np.dot(v.T, w)
    angle = np.arctan(vwdot/(vnorm*wnorm))*360/np.pi
    return angle

def orthProj(u, x): # 计算正投影
    xu_dot = np.dot(x.T, u)
    uu_dot = np.dot(u.T, u)
    projux = (xu_dot/uu_dot)*u
    return projux

A = np.array([[2], [4], [1]])
B = np.array([[1], [-1], [3]])
angle = angle2vectors(A, B)
projAB = orthProj(B, A)
print("A和B的夹角 : ", angle)
print("A和B上方的正投影 : n", projAB)

 运行结果:

A和B的夹角 :  [[7.52871961]]
A和B上方的正投影 :
 [[ 0.09090909]
 [-0.09090909]
 [ 0.27272727]]


参考文献

Introduction to Linear Algebra, International 4 th Edition by Gilbert Strang, Wellesley Cambridge Press.

百度百科[EB/OL]. []. https://baike.baidu.com/.

本篇完。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5571659.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存