我是 Julia 的初学者,我正在使用Nemo库在有限域上做一些事情。
我想计算给定有限域的特征,为此我必须计算类似的数量
exp(2*pi*im*absolute_tr(a)/p)
然而, 的类型absolute_tr(a)
是 FqFieldElem,因为它是有限域的素数子域(此处为 Z/pZ)的元素,因此这会引发错误。
我想将这个整数模 p 转换为 int 但我找不到任何方法来执行此操作(尽管它作为整数打印在控制台上......)。
我正在尝试在 lua 中编写一个 uint32_to_float 函数,其中我在条件中使用 math.ldexp 。使用 luacheck 检查脚本后,出现以下错误:
scripts/CAN test.lua:58:21: accessing undefined field ldexp of global math
我该如何解决这个问题,有人可以建议我使用替代方案吗?
我正在实现使用角手柄旋转形状的功能。旋转对于方形形状效果很好,但我遇到了非方形形状(纵横比不同于 1:1 的矩形)的问题。当通过拖动角手柄来旋转这些形状时,它们会意外地“捕捉”或旋转,而不考虑形状的纵横比。这会导致光标的初始单击点和形状的旋转行为之间不对齐。
我怀疑问题出在我的旋转计算上,没有考虑纵横比,导致旋转时角度偏移不正确。
如何正确计算旋转,同时考虑形状的长宽比,以确保用户旋转非方形形状时平滑且符合预期的行为?
也许我也在尝试解决问题的问题,所以我想解决的核心问题基本上是如何通过角手柄绕中心旋转矩形。您可以在此视频中看到该行为。
代码:
pub fn handle_rotating(
composition: &CompositionRes,
selected_nodes_query: &mut Query<
(
&mut RelativeTransformMixin,
&AbsoluteTransformMixin,
&mut DimensionMixin,
),
With<Selected>,
>,
event: &CursorMovedOnComposition,
corner: u8,
initial_rotation: f32,
) {
let CursorMovedOnComposition {
position: cursor_position,
..
} = event;
let cursor_position = transform_point_to_view_box(composition, cursor_position, true);
selected_nodes_query.for_each_mut(
|(mut relative_transform_mixin, absolute_transform_mixin, dimension_mixin)| {
let relative_pivot_point = Vec2::new(
dimension_mixin.width as f32 / 2.0,
dimension_mixin.height as f32 / 2.0,
);
let absolute_pivot_point =
apply_transform_to_point(absolute_transform_mixin.0, relative_pivot_point);
// Determine rotation offset based on corner
let rotation_offset_in_radians: f32 = match corner {
_ if corner == (HandleSide::Top as u8 | HandleSide::Left as u8) => {
(-135.0 as f32).to_radians()
}
_ if corner == (HandleSide::Top as u8 | HandleSide::Right as u8) => {
(-45.0 as f32).to_radians()
}
_ if corner == (HandleSide::Bottom as u8 | HandleSide::Right as u8) => {
(45.0 as f32).to_radians()
}
_ if corner == (HandleSide::Bottom as u8 | HandleSide::Left as u8) => {
(135.0 as f32).to_radians()
}
_ => 0.0,
};
// Calculate rotation based on the corner
let rotation_angle =
calculate_rotation(initial_rotation, &cursor_position, &absolute_pivot_point);
let final_rotation_angle =
rotation_angle + rotation_offset_in_radians - initial_rotation;
relative_transform_mixin.0 = set_rotation(
relative_transform_mixin.0,
final_rotation_angle,
relative_pivot_point,
);
},
);
}
fn calculate_rotation(
initial_angle_in_radians: f32,
cursor_point: &Vec2,
pivot_point: &Vec2,
) -> f32 {
// Calculate the angle from the pivot point to the current cursor position
let current_angle = (cursor_point.y - pivot_point.y).atan2(cursor_point.x - pivot_point.x);
// Calculate the raw angle difference
let angle_diff = current_angle - initial_angle_in_radians;
return -angle_diff;
}
我是 Rust 新手,我正在尝试使用 Rust 对多个矩阵执行顺序克罗内克积,即我想做
在Python中,我知道我能做到
import numpy as np
from functools import reduce
X = np.array([[0, 1], [1, 0])
matrices = [X for _ in range(8)]
product = reduce(np.kron, matrices)
并得到想要的结果。如何在 Rust 中做同样的事情?
我的 Rust 代码目前如下所示:
use ndarray::{array, ArrayBase, OwnedRepr, Dim};
use ndarray::linalg::kron;
use num::complex::Complex64 as Complex;
fn X() -> ArrayBase<OwnedRepr<Complex>, Dim<[usize; 2]>> {
array![
[Complex::new(0.0, 0.0), Complex::new(1.0, 0.0)],
[Complex::new(1.0, 0.0), Complex::new(0.0, 0.0)]
]
}
fn main() {
let mut matrices = Vec::new();
for _ in 0..8 {
matrices.push(X());
}
let product = matrices
.iter()
.reduce(|g1, g2| kron(g1, g2));
}
这是我得到的误差矩阵:
这是我不明白的事情:
我想知道如何解决这个问题,如果有任何关于如何使用 Rust 进行科学计算的初学者级示例文件的建议,我将不胜感激。
在 VSCode 中运行 Jupyter 笔记本时,我遇到了 Cython 不受保护的除法指令的奇怪行为。使用 启动会话%load_ext cython
,运行:
%%cython
import math
cimport cython
@cython.cdivision(True)
def simpleTest(int d):
cdef double c = 1/math.exp(math.log(math.sqrt(2/d)))
return c
现在运行simpleTest(x)
,对于x
>= 3 的任何值,我得到:
ValueError:数学域错误
但在没有该@cython.cdivision(True)
指令的情况下运行,它对所有x
> 0 都可以正常工作,正如它应该的那样。为什么该指令会破坏这种计算?有更好的方法吗?
在图片上,抛物线 n^2 x=1000 将对应 y=1。还是必须有一些系数?是a*N^2还是(aN)^2?纯数学如何正确解题?
我正在使用 nalgebra,我想通过将一个矩阵设置为另一个具有兼容尺寸的列来修改一个矩阵,如下所示:
let zero: T = convert(0.0);
let mut basis = DMatrix::from_element(rows, rank, zero);
// matrix is an input with dimensions rows x cols
for i in 0..location.len()
{
basis.column_mut(i) = matrix.column(location[i]);
}
我还尝试过取消引用分配的双方,并寻找某种“分配”方法,但没有成功。
set_column
不起作用,因为DMatrix
没有实施DimName
我目前的工作是这样的,但我一点也不喜欢它:
// Construct basis vectors initialized to 0.
let zero: T = convert(0.0);
let mut basis = DMatrix::from_element(rows, rank, zero);
for i in 0..location.len()
{
// Copy the pivot column from the matrix.
let col = location[i];
for r in 0..matrix.nrows()
{
basis[(r, i)] = matrix[(r, col)];
}
}