Skip to content

Commit

Permalink
Tunging scale factor of symmetrig sigmoid function
Browse files Browse the repository at this point in the history
  • Loading branch information
manumerous committed May 3, 2021
1 parent a1db934 commit dcd4b29
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 8 deletions.
Expand Up @@ -41,21 +41,21 @@ def compute_main_wing_feature(self, v_airspeed, angle_of_attack):

# Compute Drag force coeffiecients:
F_xz_aero_frame[0, 0] = -(
1 - sym_sigmoid(angle_of_attack, self.stall_angle))*v_xz**2
1 - sym_sigmoid(angle_of_attack, x_offset=self.stall_angle, scale_fac=25))*v_xz**2
F_xz_aero_frame[0, 1] = -(
1 - sym_sigmoid(angle_of_attack, self.stall_angle))*angle_of_attack*v_xz**2
1 - sym_sigmoid(angle_of_attack, x_offset=self.stall_angle, scale_fac=25))*angle_of_attack*v_xz**2
F_xz_aero_frame[0, 2] = -(
1 - sym_sigmoid(angle_of_attack, self.stall_angle))*angle_of_attack**2*v_xz**2
1 - sym_sigmoid(angle_of_attack, x_offset=self.stall_angle, scale_fac=25))*angle_of_attack**2*v_xz**2
F_xz_aero_frame[0, 3] = -(sym_sigmoid(angle_of_attack,
self.stall_angle))*math.sin(angle_of_attack)*v_xz**2
x_offset=self.stall_angle, scale_fac=25))*math.sin(angle_of_attack)*v_xz**2

# Compute Lift force coefficients:
F_xz_aero_frame[2, 4] = -(
1 - sym_sigmoid(angle_of_attack, self.stall_angle))*angle_of_attack*v_xz**2
1 - sym_sigmoid(angle_of_attack, x_offset=self.stall_angle, scale_fac=25))*angle_of_attack*v_xz**2
F_xz_aero_frame[2, 5] = -(
1 - sym_sigmoid(angle_of_attack, self.stall_angle))*v_xz**2
1 - sym_sigmoid(angle_of_attack, x_offset=self.stall_angle, scale_fac=25))*v_xz**2
F_xz_aero_frame[2, 6] = -2 * \
sym_sigmoid(angle_of_attack, self.stall_angle) \
sym_sigmoid(angle_of_attack, x_offset=self.stall_angle, scale_fac=25) \
* math.sin(angle_of_attack)*math.cos(angle_of_attack)*v_xz**2

# Transorm from stability axis frame to body FRD frame
Expand Down
20 changes: 19 additions & 1 deletion Tools/parametric_model/src/tools/math_tools.py
Expand Up @@ -4,18 +4,36 @@

import math
import numpy as np
import matplotlib.pyplot as plt
from numpy.core.function_base import linspace


def sym_sigmoid(x, x_offset=0, scale_fac=1):
def sym_sigmoid(x, x_offset=0, scale_fac=25):
# computes a logistic sigmoid function which is symmetric
# around zero and crosses the 0.5 mark at +- x_offset
y = 1 - (math.exp(scale_fac*(x+x_offset))) / \
((1+math.exp(scale_fac*(x-x_offset)))*(1+math.exp(scale_fac*(x+x_offset))))
return y


def plot_sym_sigmoid(scale_fac, x_offset=0.35, x_range=90):
N = x_range*2+1
x = np.linspace(-x_range, x_range, N)
x_rad = x*math.pi/180.0
y = np.zeros(N)
for i in range(N):
y[i] = sym_sigmoid(x_rad[i], x_offset, scale_fac)
plt.plot(x, y)
plt.show()


def rmse_between_numpy_arrays(np_array1, np_array2):
difference_array = np.subtract(np_array1, np_array2)
squared_array = np.square(difference_array)
mse = squared_array.mean()
return math.sqrt(mse)


if __name__ == "__main__":
# run this script to find suitable values for the scale_factor of the symmetric sigmoid function
plot_sym_sigmoid(25, x_range=50)

0 comments on commit dcd4b29

Please sign in to comment.