我正在研究一个项目,该项目在y轴上绘制deltaL,在x轴上绘制Fnet。脚本如下:
%Variables for delta L
L=518;
E=1040000000;
A=0.0020268;
%Variables for Form Drag
Ad=25.437;
Cd=2.015;
p=999.835;
v=2.02917;
%Array for theta
theta=0:pi/360:pi/45;
Fd=0.5*p*Cd*v^2;
T=(L/2).*tan(theta);
Fnet=sqrt((T.^2)+(Fd.^2));
deltaL=(Fnet.*L)./(E.*A);
plot(Fnet,deltaL,'.');
绘制数据时,x轴上的值都相同,y轴上的值也相同。 x和y值不同。但是,我的图表仍然会创建我的数据的工作模型。是否有一段我的代码导致了这个问题,或者在matlab中是否存在一些可以某种方式修复的故障?
答案 0 :(得分:2)
这是因为x / y轴值的精度不够高。
您可以使用此页面中的技巧:http://www.mathworks.fr/support/solutions/en/data/1-3P8CU0/index.html?product=ML&solution=1-3P8CU0
old_ticks = get(gca, 'ytick')';
new_tick_labels = cellfun(@(x) sprintf('%9.6f',x), num2cell(old_ticks), 'uniformoutput', false);
set(gca, 'yticklabel', new_tick_labels)
old_ticks = get(gca, 'xtick')';
new_tick_labels = cellfun(@(x) sprintf('%9.6f',x), num2cell(old_ticks), 'uniformoutput', false);
set(gca, 'xticklabel', new_tick_labels)
结果(右键单击+“显示图像”以获得更好的分辨率):
答案 1 :(得分:1)
您正在尝试绘制以非常小的幅度与其初始值相比增加的值。例如,如果你改为绘图
plot(Fnet-Fnet(1),deltaL-deltaL(1),'.');
您将看到这些变化的相关数字。
一种可能的解决方案是根据您的需要编辑xtick-labels和ytick-labels。例如
plot(Fnet,deltaL,'.');
yt=get(gca,'YTick')'
set(gca,'YTick',yt,'YTickLabel',num2str(yt,'%.6f'));
实际上,你可以在一行中完成!只需添加:
set(gca,'YTick',get(gca,'YTick')','YTickLabel',num2str(get(gca,'YTick')','%.6f'));
答案 2 :(得分:0)
嗯,X和Y上的值是不一样的 - 只是Matlab将数字四舍五入才能显示为4或5位数(这是有意义和有意义的行为)。您需要选择适当的数据表示(例如,对X和Y数据使用偏移量)。
例如
xofs = round(mean(Fnet)*100)/100;
yofs = round(mean(deltaL)*10000)/10000;
plot( Fnet-xofs, deltaL-yofs );
xlabel( sprintf('Fnet - %0.2f', xofs) );
ylabel( sprintf('\\DeltaL - %0.4f', yofs) );