如何在MATLAB中绘制该方程?不断得到矩阵尺寸误差

如何在MATLAB中绘制该方程?不断得到矩阵尺寸误差,matlab,matrix,plot,equation,Matlab,Matrix,Plot,Equation,我的密码是: T=[0:0.1:24]; omega=((12-T)/24)*360; alpha = [0:1:90]; latitude=35; delta=[-23.45:5:23.45]; sind(alpha)=sind(delta).*sind(latitude)+cosd(delta).*cosd(latitude).*cosd(omega) cosd(phi)=(sind(alpha).*sind(latitude)-cosd(delta))./(cosd(alpha).*cos

我的密码是:

T=[0:0.1:24];
omega=((12-T)/24)*360;
alpha = [0:1:90];
latitude=35;
delta=[-23.45:5:23.45];
sind(alpha)=sind(delta).*sind(latitude)+cosd(delta).*cosd(latitude).*cosd(omega)
cosd(phi)=(sind(alpha).*sind(latitude)-cosd(delta))./(cosd(alpha).*cosd(latitude))
alpha表示我的y轴,是0到90度之间的角度。φ代表我的x轴,是一个介于-120到+120之间的角度。整体结果应该看起来像半个正弦波

每当我试图输入最后一行时,我都会得到一个错误,说明内部矩阵的尺寸必须一致。所以我试着对我定义的那些变量在我的矩阵上使用重塑,这样它们就可以工作了。但后来我得到了'???下标索引必须是实正整数或逻辑数。”

每次我定义一组新的变量,以便将它们与方程一起使用时,都必须重新塑造我的矩阵,这似乎非常乏味。这些变量用于定义我的轴范围,是否有更好的方法来布置它们,或者有自动命令来确保它们每次都工作

我想用类似于

plot(alpha,phi) 
但是不能克服这些错误吗?我不能用一个命令来定义x轴[0:90],定义y轴[-120:120]之类的东西吗?我在这个问题上花了太多时间,找不到解决办法。我只想画一张图表。谁来帮忙!谢谢


感谢元素乘法(
*
)和除法
/
,而不是矩阵版本:

sind(alpha)=sind(delta).*sind(latitude)+cosd(delta).*cosd(latitude).*cosd(omega)
cosd(phi)=(sind(alpha).*sind(latitude)-cosd(delta))./(cosd(alpha).*cosd(latitude))

但一个更大的问题是,你不能用十进制或非正值来索引。在得到下标索引错误之前,返回代码。索引“必须是实数<强>正数<强>整数或逻辑数”。

我认为您对MATLAB sintax有点困惑(如nispio所述)。也许你想做这样的事

T=[0:0.1:24];
omega=((12-T)/24)*360;
alpha = [0:1:90];
latitude=35;
delta=[-23.45:5:23.45];
[o1,d1]=meshgrid(omega,delta);
[a2,d2]=meshgrid(alpha,delta);
var1=sind(d1(:)).*sind(latitude)+cosd(d1(:)).*cosd(latitude).*cosd(o1(:));
var2=(sind(a2(:)).*sind(latitude)-cosd(d2(:)))./(cosd(a2(:)).*cosd(latitude));
plot(var1);hold on;plot(var2);

如果没有,您应该发布算法或伪代码

以下是一个开始:

% Latitude
L=35;

% Hour Angle
h = [-12:5/60:12];
w = 15*h;

% Initialize and clear plot window
figure(1); clf;

% Plot one day per month for half of the year
for N = 1:30:365/2
    % Declination
    d = 23.45*sind(360*(284+N)/365);

    % Sun Height
    alpha = asind(sind(L)*sind(d) + cosd(L)*cosd(d)*cosd(w));

    % Solar Azimuth 
    x = ( sind(alpha)*sind(L)-sind(d) )./( cosd(alpha)*cosd(L) );
    y = cosd(d)*sind(w)./cosd(alpha);
    phi = real(atan2d(y,x));

    % Plot
    plot(phi,alpha); hold on;
end

hold off;
grid on;
axis([-180, 180, 0, 90]);
xlabel('Solar Azimuth')
ylabel('Solar Elevation')
函数
asind
本质上被限制为返回-90到90范围内的值。这意味着您将不会得到像链接到的那样跨越240度的绘图。为了使绘图不在+/-90度处出现拐点,您需要找到一种方法来推断象限。更新:我使用
atan2d
添加了余弦项以获得角度。


希望这将足以让您了解如何使用Matlab来获得您想要的结果。

好的,那么请删除。我对一个等式做了这个,得到了相同的答案。我甚至可能没有使用正确的方法。我只想画出这些方程的图表。我不关心矩阵中存储的值,只要它绘制正确的范围。T=[0:1:4];ω=((12-T)/24)*360;α=[0:1:4];纬度=35;增量=[0:1:4];>>sind(α)=sind(δ)*sind(纬度)+cosd(δ)*cosd(纬度)*cosd(ω)???使用==>mtimes内部矩阵维度时出错,必须一致。对于混淆,深表歉意。在我的原始代码中,我有./但忘记正确粘贴它(现在将对其进行编辑)。这给了我下标索引的错误,没有。如果只使用*或/,则会产生矩阵维数错误。正如错误消息所述,
下标索引必须是实**正**整数或逻辑数。您的
T
索引从
0
开始。但我需要它从0开始,因为它是轴上的0。与其他值相同。这怎么可能?!抱歉,我对MATLAB很陌生。如何用类似的数字范围绘制这些方程?使用另一个变量进行索引。命令
sind(alpha)=*stuff*
cosd(phi)=*stuff*
存在根本性的错误。
=
符号左侧的术语不能赋值。此外,您正在尝试对许多不同大小的事物进行元素级的多重操作,这是不允许的。如果你发布一些数学或伪代码来解释你想要实现的目标,也许会有所帮助。我正在尝试绘制一张太阳路径图,它基本上是一张显示全年太阳路径的图表。图表有两个轴。y轴由太阳高度角(alpha)表示,x轴由太阳方位角(phi)表示。方程为:sin alpha=sin(delta)*sin(L)+cos(delta)*cos(L)*cos(omega)-太阳高度方程cos(phi)=sin sin(alpha)*sin L-sin delta/(cos(alpha)*cos(L)),其中L是位置的纬度omega是小时角,定义为omega=((12-T)/24*360),其中T是时间。图表如下:我基本上只是尝试给这些变量分配合理的范围,例如T(0-24,如24小时),omega等,然后定义方程,以便我可以绘制它们。这就是我想要做的。我已经尝试了两天,这非常令人沮丧。此链接还以更好的格式解释了数学:谢谢你的时间。我将接受nispio的答案。感谢你的帮助!非常感谢你的时间和细节。你的答案已经完成非常有用。绘图确实看起来很奇怪,因为asind没有完整的值范围。尽管如此,我将运行此脚本并从语法中学习,看看是否可以获得正确的绘图。非常感谢!注意。纠正差异的最佳方法是找到方位角余弦的表达式,如w那么你可以使用
atan2d
中的sin和cos值,它映射到你想要的
[-180180]
。+1表示努力,即使这个解决方案效率很低(我假设你正在循环
保持
,只是为了演示)@chappjc:这段代码的主要目的是可读性和可修改性。并非所有代码都需要优化。
>tic;solar_plot;toc;经过的时间是0.023685秒。
我真的要节省多少时钟周期?在本例中没有多少,这是真的。我不是在批评,只是指出在循环不是很好