Anpassungstheorie mit experimentellen Daten [geschlossen]Python

Python-Programme
Anonymous
 Anpassungstheorie mit experimentellen Daten [geschlossen]

Post by Anonymous »

Ich möchte an experimentelle Daten passen. Welchen Algorithmus verwende ich, um eine gute Anpassung und MSE für jeden Parameter zu erhalten, der sehr klein ist.

Code: Select all

    N = len(y)
error = (np.sum(y**2) - 2 * np.sum(y * y_t_fit) + np.sum(y_t_fit**2)) / N
< /code>
Dies mein Code < /p>
import numpy as np
import matplotlib.pyplot as plt

#data
time = np.array([
0.000,
0.034,
0.068,
0.101,
0.135,
0.169,
0.203,
0.236,
0.270,
0.304,
0.338,
0.372,
0.405,
0.439,
0.473,
0.507,
0.541,
0.574,
0.608,
0.642,
0.676,
0.709,
0.743,
0.777,
0.811,
0.845,
0.878,
0.912,
0.946,
0.980,
1.013,
1.047,
1.081,
1.115,
1.149,
1.182,
1.216,
1.250,
1.284,
1.317,
1.351,
1.385,
1.419,
1.453,
1.486,
1.520,
1.554,
1.588,
1.622,
1.655,
1.689,
1.723,
1.757,
1.790,
1.824,
1.858,
1.892,
1.926,
1.959,
1.993,
2.027,
2.061,
2.094,
2.128,
2.162,
2.196,
2.230,
2.263,
2.297,
2.331,
2.365,
2.398,
2.432,
2.466,
2.500,
2.534,
2.567,
2.601,
2.635,
2.669,
2.703,
2.736,
2.770,
2.804,
2.838,
2.871,
2.905,
2.939,
2.973,
3.007,
3.040,
3.074,
3.108,
3.142,
3.145
])

y = np.array([
0.827,
0.828,
0.827,
0.817,
0.798,
0.769,
0.731,
0.692,
0.651,
0.607,
0.561,
0.510,
0.469,
0.435,
0.397,
0.368,
0.344,
0.325,
0.316,
0.314,
0.324,
0.333,
0.346,
0.372,
0.399,
0.429,
0.457,
0.485,
0.519,
0.545,
0.566,
0.585,
0.602,
0.618,
0.628,
0.650,
0.636,
0.619,
0.608,
0.592,
0.576,
0.559,
0.538,
0.513,
0.493,
0.478,
0.460,
0.444,
0.429,
0.422,
0.415,
0.413,
0.413,
0.417,
0.430,
0.441,
0.450,
0.465,
0.478,
0.493,
0.506,
0.518,
0.529,
0.536,
0.543,
0.550,
0.548,
0.546,
0.544,
0.539,
0.530,
0.520,
0.510,
0.504,
0.496,
0.486,
0.476,
0.471,
0.469,
0.463,
0.457,
0.456,
0.458,
0.459,
0.464,
0.471,
0.479,
0.484,
0.489,
0.497,
0.505,
0.507,
0.511,
0.517,
0.516
])

y -= 0.5

# find the max
def max_p (y):
result = []
for i in range(1,len(y)-1):
if y[i-1] < y[i] > y[i+1]:
result.append(i)
return result
max = max_p(y)

#T1
y0 = y[max[0]]
yT = y[max[1]]
T = time[max[1]] - time[max[0]]

#T2
y1 = y[max[1]]
yT1 = y[max[2]]
T = time[max[2]] - time[max[1]]

max = max_p(y)

peak_values = [y[i] for i in max]

#Parameter
A = 0.32
b = 0.5
k = 4
m = 1

w = np.sqrt(k/m - (b/2*m)**2)
T = 2*np.pi/w

y_t = np.exp((-b/(2*m))*t) * (A*np.cos(w*t))

plt.plot(time,y,label='experiment',linestyle='-')
plt.scatter(time[max], peak_values, color='red', marker='o', s=100, label="Max")
plt.plot(t,y_t,"r--")
plt.legend()
plt.grid()
plt.show()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post