请教高手matlab程序有什么问题
if x<=0.321;
y1=0;
y2=18680*x.^2;
else if 0.321<x && x<=0.5;
y1=7748.3787878804037959911770145058*x-685.1130034828012147069381932417-39054.092938262777960624195721650*x.^4+58843.381520178245750847142977912*x.^3-32353.868458882699128814436387114*x.^2;
y2=1924.8-23145.125983108015250690089800020*x.^4-1842.9520616256456692238628023802+19804.155307322093441798636950595*x.^3+13913.382016939457782648063242968*x.^2;
else
y1=15.15;;
y2=4589.1+17195.*x-6524.3750000000000000000000000000-8292.5000000000000000000000000000*x.^2;
end
plotyy(x,y1,x,y2)
hold on
end 展开
你在计算过程中遇到什么样的问题了呢?!
我试了一下,主要由以下问题:
1)lzmatlab语法有点小问题,如果使用if-else-end结构则缺少一个end标识;如果使用if-elseif-else-end,则需要将else if中间空格去掉,写成elseif,现在一般高版本的matlab都会提示错误;
2)y1=15.15;;多写了一个分号;
其实这段程序完全不需要这么写,这里不评论编程水平问题。这段程序经过上面两点修改后运行没有问题,为了减少运算量,我使用x=0:1/100:1.037;同时没有使用plotyy,而使用plot(x,y1,'r.',x,y2,'b-'),本质上对结果没有影响。结果如下:
我认为之所以出现错误应该是使用for循环每次计算y1和y2的值后分别作图,而图的参数是自动设置的,导致坐标发生多次重叠。作图显得毫无规律。
我简单将你的程序改成下面这种,直接计算全部y1,y2,然后绘图~就没有问题了!下面程序可以优化使用向量化的方式计算更简洁~
clear
x=0:1/1000:1.037;
m=size(x,2);
y1=1:1:m;
y2=1:1:m;
for n=1:1:m
if x(n)<=0.321
y1(n)=0;
y2(n)=18680*x(n).^2;
elseif 0.321<x(n) && x(n)<=0.5;
y1(n)=7748.3787878804037959911770145058*x(n)-685.1130034828012147069381932417-...
39054.092938262777960624195721650*x(n).^4+58843.381520178245750847142977912*x(n).^3-32353.868458882699128814436387114*x(n).^2;
y2(n)=1924.8-23145.125983108015250690089800020*x(n).^4-1842.9520616256456692238628023802+19804.155307322093441798636950595*x(n).^3+...
13913.382016939457782648063242968*x(n).^2;
else
y1(n)=15.15;
y2(n)=4589.1+17195*x(n)-6524.3750000000000000000000000000-8292.5000000000000000000000000000*x(n).^2;
end
end
plotyy(x,y1,x,y2)