Bắt đầu với một đa thức tham số bậc 5, đối xứng bậc 5 khác nhau:
f(x)=a0x1+a1x3+a2x5=x(a0+a1x2+a2x4)=x(a0+x2(a1+a2x2))
Bây giờ chúng tôi đặt một số ràng buộc về chức năng này. Biên độ nên là 1 tại các đỉnh, nói cách khác f(1)=1 . Thay thế 1 cho x cho:
a0+a1+a2=1(1)
Đó là một hạn chế. Độ dốc tại các đỉnh núi nên không, hay nói cách khác f′(1)=0 . Đạo hàm của f(x) là
a0+3a1x2+5a2x4
và thay thế 1 cho x đưa ra ràng buộc thứ hai của chúng tôi:
a0+3a1+5a2=0(2)
Bây giờ chúng ta có thể sử dụng hai khó khăn của chúng tôi để giải quyết cho a1 và a2 về a0 .
a1=52−2a0a2=a0−32(3)
Tất cả những gì còn lại là để tinh chỉnh a0 để có được một sự phù hợp thoải mái. Ngẫu nhiên, a0 (và độ dốc tại gốc) kết thúc lên được ≈π2 , như chúng ta có thể thấy từ mộtâm mưucủa hàm.
Tối ưu hóa thông số
Dưới đây là một số tối ưu hóa của các hệ số, dẫn đến các biên độ tương đối của các sóng hài so với tần số cơ bản (sóng hài thứ 1):
Trong loạt Fourier phức tạp :
∑k=−∞∞ckei2πPkx,
của P- dạng sóng định kỳ có P=4 và đối xứng thời gian khoảng x=1 và với nửa chu kỳ được xác định bởi hàm lẻ f(x) trên −1≤x≤1, hệ số của sóng hài bậc mũ phức tạp thứ kth là:
ck=1P∫−1+P−1({f(x)−f(x−2)if x<1if x≥1)e−i2πPkxdx.
Do mối quan hệ 2cos(x)=eix+e−ix (xem: Công thức của Euler ), biên độ của một sóng hài hình sin thực với k>0 là 2|ck|, gấp hai lần độ lớn của số mũ phức tạp của cùng tần số. Điều này có thể được tạo thành một dạng giúp cho một số phần mềm toán học tượng trưng dễ dàng hơn để đơn giản hóa tích phân:
2|ck|=24∣∣∣∫3−1({f(x)−f(x−2)if x<1if x≥1)e−i2π4kxdx∣∣∣=12∣∣∣∫1−1f(x)e−iπ2kxdx−∫31f(x−2)e−iπ2kxdx∣∣∣=12∣∣∣∫1−1f(x)e−iπ2kxdx−∫1−1f(x+2−2)e−iπ2k(x+2)dx∣∣∣=12∣∣∣∫1−1f(x)e−iπ2kxdx−∫1−1f(x)e−iπ2k(x+2)dx∣∣∣=12∣∣∣∫1−1f(x)(e−iπ2kx−e−iπ2k(x+2))dx∣∣∣=12∣∣∣eiπ2x∫1−1f(x)(e−iπ2kx−e−iπ2k(x+2))dx∣∣∣=12∣∣∣∫1−1f(x)(e−iπ2k(x−1)−e−iπ2k(x+1))dx∣∣∣
Ở trên tận dụng lợi thế đó |eix|=1 cho x. thực . Một số hệ thống đại số máy tính sẽ dễ dàng hơn để đơn giản hóa tích phân bằng cách giả sử k là số thực và đơn giản hóa thành số nguyên k ở cuối. Wolfram Alpha có thể tích hợp các số hạng riêng của tích phân cuối cùng tương ứng với các số hạng của đa thức f(x) . Đối với các hệ số đã cho trong phương trình. 3 chúng tôi nhận được biên độ:
=∣∣∣48((−1)k−1)(16a0(π2k2−10)−5×(5π2k2−48))π6k6∣∣∣
Lệnh thứ 5, đạo hàm liên tục
Chúng tôi có thể giải quyết cho giá trị của a0 cung cấp cho biên độ bằng 2|ck|của hài bậc 3 và 5. Sẽ có hai giải pháp tương ứng với sóng hài bậc 3 và bậc 5 có các pha bằng hoặc ngược nhau. Giải pháp tốt nhất là giải pháp giảm thiểu biên độ cực đại của sóng hài bậc 3 trở lên và tương đương biên độ tương đối lớn nhất của sóng hài bậc 3 trở lên so với tần số cơ bản (sóng hài bậc 1):
a0=3×(132375π2−130832)16×(15885π2−16354)≈1.569778813,a1=52−2a0=79425π2−654168×(−15885π2+16354)≈−0.6395576276,a2=a0−32=15885π216×(15885π2−16354)≈0.06977881382.
1367961615885π6−16354π4≈1.00007142018906−78.99 dBkth(1−(−1)k)∣∣8177k2−79425∣∣142496k6.
Lệnh thứ 7, đạo hàm liên tục
Tương tự, xấp xỉ đa thức bậc 7 tối ưu với cùng các ràng buộc ban đầu và điều hòa thứ 3, 5 và 7 ở mức bằng nhau thấp nhất có thể là:
f(x)=a0x1+a1x3+a2x5+a3x7=x(a0+a1x2+a2x4+a3x7)=x(a0+x2(a1+x2(a2+a3x2)))
a0=2a2+4a3+32≈1.570781972,a1=−4a2+6a3+12≈−0.6458482979,a2=347960025π4−405395408π216×(281681925π4−405395408π2+108019280)≈0.07935067784,a3=−16569525π416×(281681925π4−405395408π2+108019280)≈−0.004284352588.
2293523251200281681925 πsố 8- 405395408 π6+ 108019280 π4≈ 0,999983752 ,11555395≈ - 123.8368 dBk th( 1-(-1 )k) ||1350241 k4- 50674426 k2+ 347.960.025 ||597271680 ksố 8
Đơn hàng thứ 5
{ 3 , 5 , 7 , 9 }
f( x ) = a0x1+ một1x3+ một2x5một0= 1 - một1- một2≈ 1.570034357một1= 3 × ( 2436304 π2- 2172825 π4)8 × ( 1303695 π4- 1827228 π2+ 537160 )≈ - 0,6425216143một2= 1303695 π416 × ( 1303695 π4- 1827228 π2+ 537160 )≈ 0,07248725712
10804305921303695 π6- 1827228 π4+ 537160 π2≈ 0,9999773320.7263777≈ - 91,52 dB ,72608331033100273≈−92.6 dBkth(1−(−1)k)∣∣67145k4−2740842k2+19555425∣∣33763456k6.
x=±1x≈±1.002039940.x=10.004905799828k,
Đơn hàng thứ 7
Một xấp xỉ bậc 7 mà không có đạo hàm liên tục có thể được tìm thấy tương tự. Cách tiếp cận yêu cầu thử nghiệm 120 giải pháp khác nhau và được kịch bản Python tự động hóa ở cuối câu trả lời này. Giải pháp tốt nhất là:
f(x)=a0x1+a1x3+a2x5+a3x7a0=1−a1−a2−a3≈1.5707953785726114835a1=−5×(4374085272375π6−6856418226992π4+2139059216768π2)16×(2124555703725π6−3428209113496π4+1336912010480π2−155807094720)≈−0.64590724797262922190a2=2624451163425π6−3428209113496π416×(2124555703725π6−3428209113496π4+1336912010480π2−155807094720)≈0.079473610232926783079a3=−124973864925π616×(2124555703725π6−3428209113496π4+1336912010480π2−155807094720)≈−0.0043617408329090447344
169918012823961602124555703725π8−3428209113496π6+1336912010480π4−155807094720π2≈1.0000024810802368487.502400688077≈−133.627 dB.kth(1−(−1)k)∣∣−162299057k6+16711400131k4−428526139187∗k2+2624451163425∣∣4424948250624k8.
Nguồn Python
from sympy import symbols, pi, solve, factor, binomial
numEq = 3 # Number of equations
numHarmonics = 6 # Number of harmonics to evaluate
a1, a2, a3, k = symbols("a1, a2, a3, k")
coefficients = [a1, a2, a3]
harmonicRelativeAmplitude = (2*pi**4*a1*k**4*(pi**2*k**2-12)+4*pi**2*a2*k**2*(pi**4*k**4-60*pi**2*k**2+480)+6*a3*(pi**6*k**6-140*pi**4*k**4+6720*pi**2*k**2-53760)+pi**6*k**6)*(1-(-1)**k)/(2*k**8*(2*pi**4*a1*(pi**2-12)+4*pi**2*a2*(pi**4-60*pi**2+480)+6*a3*(pi**6-140*pi**4+6720*pi**2-53760)+pi**6))
harmonicRelativeAmplitudes = []
for i in range(0, numHarmonics) :
harmonicRelativeAmplitudes.append(harmonicRelativeAmplitude.subs(k, 3 + 2*i))
numCandidateEqs = 2**numHarmonics
numSignCombinations = 2**numEq
useHarmonics = range(numEq + 1)
bestSolution = []
bestRelativeAmplitude = 1
bestUnevaluatedRelativeAmplitude = 1
numSolutions = binomial(numHarmonics, numEq + 1)*2**numEq
solutionIndex = 0
for i in range(0, numCandidateEqs) :
temp = i
candidateNumHarmonics = 0
j = 0
while (temp) :
if (temp & 1) :
if candidateNumHarmonics < numEq + 1 :
useHarmonics[candidateNumHarmonics] = j
candidateNumHarmonics += 1
temp >>= 1
j += 1
if (candidateNumHarmonics == numEq + 1) :
for j in range(0, numSignCombinations) :
eqs = []
temp = j
for n in range(0, numEq) :
if temp & 1 :
eqs.append(harmonicRelativeAmplitudes[useHarmonics[0]] - harmonicRelativeAmplitudes[useHarmonics[1+n]])
else :
eqs.append(harmonicRelativeAmplitudes[useHarmonics[0]] + harmonicRelativeAmplitudes[useHarmonics[1+n]])
temp >>= 1
solution = solve(eqs, coefficients, manual=True)
solutionIndex += 1
print "Candidate solution %d of %d" % (solutionIndex, numSolutions)
print solution
solutionRelativeAmplitude = harmonicRelativeAmplitude
for n in range(0, numEq) :
solutionRelativeAmplitude = solutionRelativeAmplitude.subs(coefficients[n], solution[0][n])
solutionRelativeAmplitude = factor(solutionRelativeAmplitude)
print solutionRelativeAmplitude
solutionWorstRelativeAmplitude = 0
for n in range(0, numHarmonics) :
solutionEvaluatedRelativeAmplitude = abs(factor(solutionRelativeAmplitude.subs(k, 3 + 2*n)))
if (solutionEvaluatedRelativeAmplitude > solutionWorstRelativeAmplitude) :
solutionWorstRelativeAmplitude = solutionEvaluatedRelativeAmplitude
print solutionWorstRelativeAmplitude
if (solutionWorstRelativeAmplitude < bestRelativeAmplitude) :
bestRelativeAmplitude = solutionWorstRelativeAmplitude
bestUnevaluatedRelativeAmplitude = solutionRelativeAmplitude
bestSolution = solution
print "That is a new best solution!"
print
print "Best Solution is:"
print bestSolution
print bestUnevaluatedRelativeAmplitude
print bestRelativeAmplitude