知道方程式和很多x值 怎样求对应的很多个y值 用matlab编程

2024-11-27 08:45:19
推荐回答(2个)
回答1:

%{
楼主的函数:
f(x) = a0 + a1*cos(x*w) + b1*sin(x*w) +
a2*cos(2*x*w) + b2*sin(2*x*w) + a3*cos(3*x*w) + b3*sin(3*x*w) +
a4*cos(4*x*w) + b4*sin(4*x*w) + a5*cos(5*x*w) + b5*sin(5*x*w) +
a6*cos(6*x*w) + b6*sin(6*x*w) + a7*cos(7*x*w) + b7*sin(7*x*w) +
a8*cos(8*x*w) + b8*sin(8*x*w)
%}
% 楼主做的是8阶Fourier级数展开旁瞎纤.
a = rand(1,9); % a是9个常数构成的向量,楼主在此替换自己的a值;
b = rand(1,8); % b是8个常数构成的向量,楼主在此运仿替换自己的b值;
w = rand; % w是个常数,楼主在此替换自己的w值;
f = @(x)a(1) + ...
a(2)*cos(x*w) + b(1)*sin(x*w) + ...
a(3)*cos(2*x*w) + b(2)*sin(2*x*w) + ...
a(4)*cos(3*x*w) + b(3)*sin(3*x*w) + ...
a(5)*cos(4*x*w) + b(4)*sin(4*x*w) + ...
a(6)*cos(5*x*w) + b(5)*sin(5*x*w) + ...
a(7)*cos(6*x*w) + b(6)*sin(6*x*w) + ...
a(8)*cos(7*x*w) + b(7)*sin(7*x*w) + ...
a(9)*cos(8*x*w) + b(8)*sin(8*x*w);
x = rand(32,1);% 楼主在此替换自己的x值;
y = f(x);

或者 更一般地,有
%{
楼主的函数:
f(x) = a0 + a1*cos(x*w) + b1*sin(x*w) +
a2*cos(2*x*w) + b2*sin(2*x*w) + a3*cos(3*x*w) + b3*sin(3*x*w) +
a4*cos(4*x*w) + b4*sin(4*x*w) + a5*cos(5*x*w) + b5*sin(5*x*w) +
a6*cos(6*x*w) + b6*sin(6*x*w) + a7*cos(7*x*w) + b7*sin(7*x*w) +
a8*cos(8*x*w) + b8*sin(8*x*w)
%}
% 楼主做的是8阶Fourier级数展开.

function y = funfourier(x)
n = 9; % Fourier级数展开阶数;
a = rand(1,n); % a是n个常数构神渗成的向量,楼主在此替换自己的a值;
b = rand(1,n); % b是n个常数构成的向量,楼主在此替换自己的b值;
w = rand; % w是个常数,楼主在此替换自己的w值;
s = 0;
for k = 1:n
s = s + a(k)*cos((k-1)*w*x) + b(k)*sin((k-1)*w*x);
end
y = s;

回答2:

将方程式编写为一个函数,比如fun函数;
将x值放在某一个数组逗销隐斗贺中,比如X数组:x=[x1,x2,x3,...,xn];
将y值存放在另一个数组中,山厅比如Y数组:y=[y1,y2,y3,...,yn];
则有以下编程:
x=[x1,x2,x3,...,xn];
n=length(x);
y=zeros(1,n);
for k=1:n
y(k)=fun(x(k));
end