【问题标题】:MATLAB: convert from euler (complex fourier) to sinus function (bn coefficients)MATLAB:从欧拉(复傅立叶)转换为正弦函数(bn系数)
【发布时间】:2025-11-29 10:25:01
【问题描述】:

我有以下脚本

clc; clear all; close all;

syms x n
f = x;
L = 1;

subplot(2,1,1)
h = ezplot(f,[-L,L])
set(h, 'Color','r','LineWidth',1)

a0 = (1/L) * int(f * cos(0* pi*x/L),-L,L)
an = (1/L) * int(f * cos(n* pi*x/L),-L,L)
bn = (1/L)* int(f* sin(n* pi*x/L),-L,L)
fx = a0/2 + symsum((an* cos(n*pi*x/L) + bn* sin(n*pi*x/L)),n,1,5)
% for n =5, the answer: fx = (2*sin(pi*x))/pi - sin(2*pi*x)/pi + 
%(2*sin(3*pi*x))/(3*pi) - sin(4*pi*x)/(2*pi) + (2*sin(5*pi*x))/(5*pi)

hold on
h = ezplot(fx,[-L,L])
grid on

%Solution with complex Fourier
c0 = (1/(2*L))*int(f*exp(-j*0*pi*x/L),-L,L)
cn = (1/(2*L))*int(f*exp(-j*n*pi*x/L),-L,L)

subplot(2,1,2)
h = ezplot(f,[-L,L])
set(h, 'Color','r','LineWidth',1)

fx_c = c0 + symsum(cn*exp(j*n*pi*x/L),n,-5,-1) + ...
          symsum(cn*exp(j*n*pi*x/L),n,1,5) % n for complex -5,5

hold on
h = ezplot(fx_c,[-L,L])
grid on

我的问题:因为 fx 的答案应该等于 fx_c(复傅立叶)。我们可以从这两个函数产生的数字中看出。他们是一样的。但是

    fx =
(2*sin(pi*x))/pi - sin(2*pi*x)/pi + (2*sin(3*pi*x))/(3*pi) - sin(4*pi*x)/(2*pi) + (2*sin(5*pi*x))/(5*pi)

fx_c =
exp(-pi*x*i)*((pi*i - 1)/(2*pi^2) + (pi*i + 1)/(2*pi^2)) - exp(pi*x*i)*((pi*i - 1)/(2*pi^2) + (pi*i + 1)/(2*pi^2)) - exp(-pi*x*2*i)*((pi*2*i - 1)/(8*pi^2) + (pi*2*i + 1)/(8*pi^2)) + exp(pi*x*2*i)*((pi*2*i - 1)/(8*pi^2) + (pi*2*i + 1)/(8*pi^2)) + exp(-pi*x*3*i)*((pi*3*i - 1)/(18*pi^2) + (pi*3*i + 1)/(18*pi^2)) - exp(pi*x*3*i)*((pi*3*i - 1)/(18*pi^2) + (pi*3*i + 1)/(18*pi^2)) - exp(-pi*x*4*i)*((pi*4*i - 1)/(32*pi^2) + (pi*4*i + 1)/(32*pi^2)) + exp(pi*x*4*i)*((pi*4*i - 1)/(32*pi^2) + (pi*4*i + 1)/(32*pi^2)) + exp(-pi*x*5*i)*((pi*5*i - 1)/(50*pi^2) + (pi*5*i + 1)/(50*pi^2)) - exp(pi*x*5*i)*((pi*5*i - 1)/(50*pi^2) + (pi*5*i + 1)/(50*pi^2))

如何将fx_c 转换为fx

【问题讨论】:

    标签: matlab series


    【解决方案1】:

    它们通过Euler's formula 关联。可以通过rewrite command查看:

    >> rewrite(exp(1i*x), 'cos')
    
    ans =
    
    cos(x) + sin(x)*1i
    

    将其应用于您的函数并稍微简化一下,您可以得到相同的表达式:

    >> expand(rewrite(fx_c, 'cos'), 'ArithmeticOnly', true)
    
    ans =
    
    (2*sin(pi*x))/pi - sin(2*pi*x)/pi + (2*sin(3*pi*x))/(3*pi) - sin(4*pi*x)/(2*pi) + (2*sin(5*pi*x))/(5*pi)
    
    >> fx
    
    fx =
    
    (2*sin(pi*x))/pi - sin(2*pi*x)/pi + (2*sin(3*pi*x))/(3*pi) - sin(4*pi*x)/(2*pi) + (2*sin(5*pi*x))/(5*pi)
    

    【讨论】:

    • 你好 ibancg。非常感谢。已经解决了!最好的问候
    • @User1961 如果它解决了您的问题,请确保将此答案标记为已接受。
    • @ibancg,它解决了我的问题。我接受这个答案。最好的问候
    • @User1961 要将答案标记为已接受,请单击答案旁边的复选标记(分数下方)将其从空心切换为绿色,如图所示here。我还建议您通过tour page。我希望这对你有帮助:)