页次 1
和ai一起想了想,得出一些有一定可行性的方案:
1.可以將ρ,C,S看作長方體的三條棱長,0.5v²看作一個與長方體體積相關的係數。此時就可以類比爲長方體體積乘以係數0.5v²。若從幾何角度看,就是要找到滿足體積乘以係數大於M(所受重力)的長方體棱長各自的取值範圍。
2.根據公式構造超曲面,算出超曲面“上方”對應的各變量取值。
3.構造向量(ρ,C,S,v)和由f(ρ,C,S,v)=\frac{1}{2}ρCSv²(ρ,C,S,v均大於0)得來的變換規則。
4.代碼硬算求解當f(ρ,C,S,v)大於M時各變量的取值範圍(或者說組合?我想不出來合適的值了),不過似乎還得加權重以免出現升力係數取到幾十上百的情況。
看了看發現好像沒一個是我現在水平能得出具體答案的,包括第4個方案,如果少一個變量或許還可能用帶函數圖像顯示的程序直觀顯示……
若有謬誤,務必告知。
离线
搞了個py程序暴力遍歷大量值 :
import numpy as np
import plotly.graph_objects as go
# 固定参数
rho = 1.225
# 生成参数范围
C_values = np.linspace(0.5, 2.0, 16) # C从0.5到2.0,步距0.1
S_values = np.arange(5, 51, 1) # S从5到50,步距1
v_values = np.arange(5, 41, 1) # v从5到40,步距1
# 预计算全局F的范围
all_F = []
for c in C_values:
S_mesh, v_mesh = np.meshgrid(S_values, v_values)
F = 0.5 * rho * c * S_mesh * v_mesh**2
all_F.append(F.flatten())
max_F = np.max(all_F)
min_F = np.min(all_F)
# 创建每个C值的曲面轨迹
traces = []
for c in C_values:
S_mesh, v_mesh = np.meshgrid(S_values, v_values)
F = 0.5 * rho * c * S_mesh * v_mesh**2
traces.append(go.Surface(
x=S_mesh,
y=v_mesh,
z=F,
name=f'C = {c:.1f}',
visible=False,
colorscale='Viridis',
cmin=min_F,
cmax=max_F,
colorbar=dict(title='Force F')
))
# 设置第一个轨迹可见
traces[0].visible = True
# 创建滑块组件
steps = []
for i, c in enumerate(C_values):
step = dict(
method="update",
args=[{"visible": [False] * len(traces)},
{"title": f"空气动力 F (ρ=1.225) - C={c:.1f}"}],
label=f"{c:.1f}"
)
step["args"][0]["visible"][i] = True
steps.append(step)
sliders = [dict(
active=0,
currentvalue={"prefix": "升力系数 C: "},
pad={"t": 50},
steps=steps
)]
# 设置图表布局
layout = go.Layout(
title='空气动力 F (ρ=1.225) - 选择C值查看对应曲面',
scene=dict(
xaxis_title='投影面积 S',
yaxis_title='速度 v',
zaxis_title='空气动力 F',
camera=dict(eye=dict(x=1.5, y=-1.5, z=0.5))
),
sliders=sliders,
width=1000,
height=800
)
fig = go.Figure(data=traces, layout=layout)
fig.show()
有 1 位朋友喜欢这篇文章:龍爪翻書
若有謬誤,務必告知。
离线
页次 1