永发信息网

MATLAB求助!计算地球子午圈曲率半径、卯酉圈曲率半径和纬圈半径; 计算赤道到纬度为 的子午线弧长等

答案:1  悬赏:50  手机版
解决时间 2021-01-25 02:00
  • 提问者网友:黑米和小志
  • 2021-01-24 19:18
另外还有计算赤道到纬度为之间的1弧度经差纬差的球面梯形面积。标题打不下了。代码运行不了。

以下是代码:
a = 6378245; b = 6356863; %长短半轴
e = realsqrt((realpow(a,2)-realpow(b,2))/realpow(a,2)); %第一偏心率
fai = [0:0.5:90]; %纬度数组
%计算曲率半径
m = a.*(1-realpow(e,2))./realpow((1-realpow(e.*sind(fai),2)),3./2);
M = vpa(m,8);
n = a./realpow((1-realpow(e.*sind(fai),2)),1./2);
N = vpa(n,8);
r = N.*cosd(fai);
R = vpa(r,8);
fun = @m;
s = quad(fun,0,fai);
lamda1 = 0;
lamda2 = 1;
t = @m.*n.*cosd(fai);
T = dblquad(T,0,fai,lamda1,lamda2,8);
disp('子午圈曲率半径:');
disp(M);
disp('卯酉圈曲率半径:');
disp(N);
disp('纬圈半径:');
disp(r);
disp('赤道到纬度为 的子午线弧长:');
disp(s);
disp('赤道到纬度为 之间的1弧度经差纬差的球面梯形面积:');
disp(T);

这三个地方出了问题,注释如下
fai = [0:0.5:90]; %纬度数组
错误:Use of brackets [] is unnecessary,use parentheses to group, if needed.
m = a.*(1-realpow(e,2))./realpow((1-realpow(e.*sind(fai),2)),3./2);
错误:The value assigned to variable 'm' might be unused.
t = @m.*n.*cosd(fai);
错误:'m' might be used incompatibly or redefined.

不太明白错误是什么意思。求大神慷慨解惑!万分感谢!!!
最佳答案
  • 五星知识达人网友:轻熟杀无赦
  • 2021-01-24 19:29
你所说的应该是M-Lint给出的提示信息,不一定是错误。
M-Lint是M语言的代码分析工具,能对你程序中可疑的地方给出提示和建议,有三种颜色:
  • 红色表示存在错误(你说的第三个就是);
  • 橙色表示警告,或者代码有改进可能,并不是错误(前两个是这种情况);
  • 如果M-Lint没检测出问题,编辑器右上角会显示绿色。
     
    善用M-Lint,注意按照它给的提示修改程序直至变绿对于提高代码质量和你的MATLAB编程水平都很有帮助。就你说的三个问题而言:
  • 第一个是改进建议,告诉你没必要使用中括号,删掉括号即可;
  • 第二个是警告m该处赋的值可能未使用,其实这个警告和第三个问题相关;
  • 第三个问题不仅是你说的那行,还包括前面的
    fun = @m;
    也存在同样的问题。此处是个错误,原因是m在前面定义成变量,而@m的写法意味着把m作为函数名称。至于为什么这么写,我猜作者可能把前面m的表达式当成函数用了。
     
    除了M-Lint检查出的三个问题外,这个句子也是有问题的:
        s = quad(fun,0,fai);
    积分的上限只能是标量,而这里fai是一个向量。
  • 我要举报
    如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
    点此我要举报以上问答信息
    大家都在看
    推荐资讯