MATLAB换成c语言最后计算结果不对,请大神帮忙看看!万分感谢!!!!
以下是我写的c语言
#include <stdio.h>
#include <math.h>
#define pi 3.1415926
int main(void)
{
double N=100,f1=50.00,f2=100.00,f3=150.00,N1=12;
double TS=0.02/N1,A1=100,A2=10,A3=30,a=0,b=0,sum1=0,sum2=0,a1=0,b1=0,U,aa;
float x[100];
int k;
for(k=1;k<=N;k++)
x[k]=A1*sin(2*pi*f1*k*TS-80/180*pi)+A2*sin(2*pi*f2*k*TS-30/180*pi)+A3*sin(2*pi*f3*k*TS-30/180*pi)+100;
for(k=1;k<=N;k++)
printf("%f ",x[k]);
for(sum1=0,k=1;k<=N1;k++){
a=x[k]*sin(2*pi/N1*k);
sum1+=a;}
for(sum2=0,k=1;k<=N1;k++){
b=x[k]*cos(2*pi/N1*k);
sum2+=b;}
a1=sum1*2/N1;
b1=(sum2+0)*2/N1;
U=sqrt(a1*a1+b1*b1);
aa=atan(b1/a1)/pi*180;
printf("a1=%f,b1=%f",a1,b1);
printf("U=%f",U);
printf("aa=%f",aa);
}
下面是matlab,因为是老师给的应该不会错
clc
close all;
N=100;
f1=50.00;
f2=100.00;
f3=150.00;
%t=f1*2*pi*Ts
N1=12;
Ts=0.02/N1;
A1=100;
A2=10;
A3=30;
a=0;b=0;sum1=0;sum2=0;a1=0;b1=0;
for k=1:N
x(k)=A1*sin(2*pi*f1*k*Ts-80/180*pi)+A2*sin(2*pi*f2*k*Ts-30/180*pi)+A3*sin(2*pi*f3*k*Ts-30/180*pi)+100
end
figure (1)
plot(x(1:100))
for k=1:N1
a=x(k)*sin(2*pi/N1*k);
sum1=sum1+a;
b=x(k)*cos(2*pi/N1*k);
sum2=sum2+b;
end
a1=sum1*2/N1
b1=(sum2+0)*2/N1
vecx1=(a1+sqrt(-1)*b1)/sqrt(2);
U=sqrt(a1^2+b1^2)
aa=atan(b1/a1)/pi*180
figure (2)
plot(x,'--rs','LineWidth',1,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',2);
C程序不需要画图,直接输出就行。想得到x(k)的100个点,还有a1,b1,U和a的值,万分感谢!!!!!!!!!!!
有一个明显的错
c语言下标从0开始有,你定义了
float x[100];
它只能用x[0]到x[99]
x[100]下标溢出了
数据类型不对,不应该定义成双精度,应该定义成实数