计算曲线上的点加权问题,在X值为10-53之间,三条曲线对应的Y都不为0,对三条曲线进行平均加权,在X值为53-54之间,只有后两条曲线Y不为0,对这两条进行加权。
这个是我的代码,运行之后报错,前面三段是画曲线的代码,没有问题,最后一段代码是加权的,有问题,请教一下大家是哪里出错了,谢谢了!
```c++
clear;
clc;
syms y
x =10:1:63.45842269
a =[]
for x1=x
if x1<=53.73870947
y11=-1.824e-5*x1.^3+0.05575*x1.^2-0.1125*x1-4.432;
else
y11=0;
end
a = [a,y11]
end
plot(x,a)
hold on
b =[]
for x2=x
if x2<=54.95367362
y12=-1.726e-5*x2.^3+0.05423*x2.^2-0.08238*x2-4.582;
else
y12=0;
end
b = [b,y12]
end
plot(x,b)
hold on
c =[]
for x3=x
if x3<=56.16863777
y13=-1.637e-5*x3.^3+0.05279*x3.^2-0.05384*x3-4.724;
else
y13=0;
end
c = [c,y13]
end
plot(x,c)
hold on
x =10:1:63.45842269;
if x<=53.73870947
y=(1/3)*(a+b+c)
elseif (53.73870947<=x)&&(x<=54.95367362)
y=(1/2)*(b+c)
else y=c
end
plot(x,y,'*')
代码中的问题是if-else语句只适用于标量或矢量条件。在这种情况下,条件是一个向量。为了将条件应用于所有元素,您可以使用元素级逻辑运算符(.<=,.>,.>=,.==,.~=)。
因此,您需要在if-else语句中添加“.”来执行元素级逻辑运算,如下所示:
if x<=53.73870947
y=(1/3)*(a+b+c);
elseif (53.73870947<=x)&(x<=54.95367362)
y=(1/2)*(b+c);
else
y=c;
end
此外,您需要将x作为一个向量处理。因此,您可以使用点运算符(.)来执行元素级运算,如下所示:
x = 10:1:63.45842269;
a = -1.824e-5*x.^3 + 0.05575*x.^2 - 0.1125*x - 4.432;
a(x>53.73870947) = 0;
b = -1.726e-5*x.^3 + 0.05423*x.^2 - 0.08238*x - 4.582;
b(x>54.95367362) = 0;
c = -1.637e-5*x.^3 + 0.05279*x.^2 - 0.05384*x - 4.724;
c(x>56.16863777) = 0;
y = zeros(size(x));
y(x<=53.73870947) = (1/3)*(a(x<=53.73870947)+b(x<=53.73870947)+c(x<=53.73870947));
y((53.73870947<=x)&(x<=54.95367362)) = (1/2)*(b((53.73870947<=x)&(x<=54.95367362))+c((53.73870947<=x)&(x<=54.95367362)));
y(x>56.16863777) = c(x>56.16863777);
plot(x,a)
hold on
plot(x,b)
hold on
plot(x,c)
hold on
plot(x,y,'*')