2

我正在做一个项目,它在 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中是否有一些可以以某种方式修复的故障?

4

3 回答 3

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)

结果(右键单击+“显示图像”以获得更好的分辨率):

在此处输入图像描述

于 2012-10-12T04:02:31.560 回答
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'));
于 2012-10-12T04:13:44.147 回答
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) );
于 2012-10-12T04:02:57.467 回答