Fourier transform of symbolic function
27 ビュー (過去 30 日間)
古いコメントを表示
Hi, I want to conduct a frequenct analysis using the following code:
clear
syms t
syms y(t) z(t)
syms k m w J I
Dy = diff(y);
Dz = diff(z);
k = 4.5682;
m = 0.2;
w = 0.0014;
J = 0.0327;
I = 0.00362;
odes = [diff(y,2) == (-k/m)*y + (w/m)*z; diff(z,2) == (-J/I)*z + (w/I)*y];
cond1 = y(0) == 0.2;
cond2 = Dy(0) == 0;
cond3 = z(0) == 0;
cond4 = Dz(0) == 0;
conds = [cond1 cond2 cond3 cond4];
qwe = dsolve(odes, conds);
fplot(fft(qwe.y))
fplot(fft(qwe.z))
However, when I am using fft(), I need to use numerical data. Is there a way to conduct a symbolic fourier transform, or do I need to convert the symbolic function to numeric data?
If I do need to convert my symbolic function to numeric data, how do I do this?
0 件のコメント
採用された回答
Star Strider
2021 年 11 月 3 日
syms t omega T
syms y(t) z(t)
syms k m w J I
Dy = diff(y);
Dz = diff(z);
k = 4.5682;
m = 0.2;
w = 0.0014;
J = 0.0327;
I = 0.00362;
odes = [diff(y,2) == (-k/m)*y + (w/m)*z; diff(z,2) == (-J/I)*z + (w/I)*y];
cond1 = y(0) == 0.2;
cond2 = Dy(0) == 0;
cond3 = z(0) == 0;
cond4 = Dz(0) == 0;
conds = [cond1 cond2 cond3 cond4];
qwe = dsolve(odes, conds);
wilberforce_y = simplify(qwe.y, 500)
Fy = simplify(fourier(wilberforce_y), 500)
wilberforce_z = simplify(qwe.z, 500)
Fz = simplify(fourier(wilberforce_z), 500)
figure
fplot(wilberforce_y, [0 25])
grid
figure
fplot(fourier(wilberforce_y), [-10*pi 10*pi])
figure
fplot(wilberforce_z, [0 25])
grid
figure
fplot(fourier(wilberforce_z), [-10*pi, 10*pi])
That they are plotted as straight lines at 0 are likely due to the δ funcitons.
Integrating them manually as:
F2y = int(wilberforce_y * exp(1j*omega*t), t, -T, T)
F2y = vpa(simplify(F2y, 500), 5)
F2y = subs(F2y, T, 1)
figure
fplot(F2y, [-10*pi 10*pi])
grid
F2z = int(wilberforce_z * exp(1j*omega*t), t, -T, T)
F2z = vpa(simplify(F2z, 500), 5)
F2z = subs(F2z, T, 1)
figure
fplot(F2z, [-10*pi 10*pi])
grid
produces a more tractible result, without the δ functions.
.
3 件のコメント
Star Strider
2021 年 11 月 3 日
As always, my pleasure!
(It’s necessary to add ‘omega’ and ‘T’ to the original syms call.)
その他の回答 (2 件)
Paul
2021 年 11 月 3 日
Replicating the code:
clear
syms t
syms y(t) z(t)
syms k m w J I
Dy = diff(y);
Dz = diff(z);
k = 4.5682;
m = 0.2;
w = 0.0014;
J = 0.0327;
I = 0.00362;
odes = [diff(y,2) == (-k/m)*y + (w/m)*z; diff(z,2) == (-J/I)*z + (w/I)*y];
cond1 = y(0) == 0.2;
cond2 = Dy(0) == 0;
cond3 = z(0) == 0;
cond4 = Dz(0) == 0;
conds = [cond1 cond2 cond3 cond4];
qwe = dsolve(odes, conds);
Check the solutions, using vpa to better see their form:
vpa(qwe.y,5)
vpa(qwe.z,5)
So both soutions are simple sums of two cos functions. The Fourier transform of a cos() is the sum of two Dirac delta functions. So we should expect the Fourier transform of each solution to be the sum of four Dirac delta functions
vpa(fourier(qwe.y),5)
vpa(fourier(qwe.z),5)
which is exactly what they are.
What additional analysis might you be interested in?
0 件のコメント
Walter Roberson
2021 年 11 月 3 日
clear
syms t
syms y(t) z(t)
syms k m w J I
Dy = diff(y);
Dz = diff(z);
k = 4.5682;
m = 0.2;
w = 0.0014;
J = 0.0327;
I = 0.00362;
odes = [diff(y,2) == (-k/m)*y + (w/m)*z; diff(z,2) == (-J/I)*z + (w/I)*y];
cond1 = y(0) == 0.2;
cond2 = Dy(0) == 0;
cond3 = z(0) == 0;
cond4 = Dz(0) == 0;
conds = [cond1 cond2 cond3 cond4];
qwe = dsolve(odes, conds);
wilberforce_y = qwe.y
wyf = fourier(wilberforce_y)
wilberforce_z = qwe.z
wfz = fourier(wilberforce_z)
fplot(abs(wyf))
fplot(abs(wfz))
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Equation Solving についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!